View | Details | Raw Unified | Return to bug 286918
Collapse All | Expand All

(-)compiler/org/eclipse/jdt/internal/compiler/ast/Javadoc.java (+12 lines)
Lines 820-825 Link Here
820
					}
820
					}
821
				}
821
				}
822
			}
822
			}
823
			/*
824
			 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=286918
825
			 *
826
			 * We are concerned only about the Single type references (i.e. without any package) If they are not in default package,
827
			 * then report an error. References with qualified yet incorrect names would have already been taken care of.
828
			 */
829
			if (scope.referenceCompilationUnit().isPackageInfo() && typeReference instanceof JavadocSingleTypeReference) {
830
				if (resolvedType.fPackage.compoundName.length > 0) {
831
					scope.problemReporter().javadocInvalidReference(typeReference.sourceStart, typeReference.sourceEnd);
832
					return; // Not really needed - just in case more code added in future
833
				}
834
			}
823
		}
835
		}
824
	}
836
	}
825
837
(-)src/org/eclipse/jdt/core/tests/compiler/regression/JavadocTest_1_5.java (+213 lines)
Lines 3930-3933 Link Here
3930
			"----------\n"
3930
			"----------\n"
3931
		);
3931
		);
3932
	}
3932
	}
3933
	/**
3934
	 * @bug 286918:[javadoc] Compiler should warn when @see and @link tag references in package-info.java don't have fully qualified names
3935
	 * @test that in a package-info.java file
3936
	 * 				1. References to valid packages are ACCEPTED without any warnings or errors
3937
	 * 				2. References to valid Java elements (including the ones in the same package) without qualified names are REPORTED as errors
3938
	 * 				3. References to valid Java elements with qualified names are ACCEPTED
3939
	 * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=286918"
3940
	 */
3941
	public void testBug284333() {
3942
		runNegativeTest(new String[]{
3943
				"goo/bar/package-info.java",
3944
				"/**\n" +
3945
				"*/\n" +
3946
				"package goo.bar;\n",
3947
				"foo/bar/ClassInSamePackage.java",
3948
				"package foo.bar;\n" +
3949
				"public class ClassInSamePackage {\n" +
3950
				"	public static int SOME_FIELD; \n" +
3951
				"}\n",
3952
				"foo/bar/goo/ClassInSubPackage.java",
3953
				"package foo.bar.goo;\n" +
3954
				"public class ClassInSubPackage {\n" +
3955
				"	public static void foo() { \n" +
3956
				"   }\n" +
3957
				"}\n",
3958
				"foo/ClassInEnclosingPackage.java",
3959
				"package foo;\n" +
3960
				"public class ClassInEnclosingPackage {\n" +
3961
				"	public static int SOME_FIELD; \n" +
3962
				"}\n",
3963
				"foo/bar/package-info.java",
3964
				"/**\n" +
3965
				" * @see ClassInSamePackage#SOME_FIELD\n" +
3966
				" * @see foo.bar.ClassInSamePackage#SOME_FIELD\n" +
3967
				" * @see ClassInSamePackage#SOME_FIELD\n" +
3968
				" * @see ClassInSubPackage#foo\n" +
3969
				" * @see foo.bar.goo.ClassInSubPackage#foo\n" +
3970
				" * @see ClassInSubPackage#foo\n" +
3971
				" * @see ClassInEnclosingPackage\n" +
3972
				" * @see foo.ClassInEnclosingPackage\n" +
3973
				" * @see ClassInEnclosingPackage\n" +
3974
				" * @see foo.bar\n" +
3975
				" * @see goo.bar\n" +
3976
				" * @see foo.bar.goo\n" +
3977
				" */\n" +
3978
				"package foo.bar;\n"	
3979
		},
3980
		"----------\n" + 
3981
		"1. ERROR in foo\\bar\\package-info.java (at line 2)\n" + 
3982
		"	* @see ClassInSamePackage#SOME_FIELD\n" + 
3983
		"	       ^^^^^^^^^^^^^^^^^^\n" + 
3984
		"Javadoc: Invalid reference\n" + 
3985
		"----------\n" + 
3986
		"2. ERROR in foo\\bar\\package-info.java (at line 4)\n" + 
3987
		"	* @see ClassInSamePackage#SOME_FIELD\n" + 
3988
		"	       ^^^^^^^^^^^^^^^^^^\n" + 
3989
		"Javadoc: Invalid reference\n" + 
3990
		"----------\n" + 
3991
		"3. ERROR in foo\\bar\\package-info.java (at line 5)\n" + 
3992
		"	* @see ClassInSubPackage#foo\n" + 
3993
		"	       ^^^^^^^^^^^^^^^^^\n" + 
3994
		"Javadoc: ClassInSubPackage cannot be resolved to a type\n" + 
3995
		"----------\n" + 
3996
		"4. ERROR in foo\\bar\\package-info.java (at line 7)\n" + 
3997
		"	* @see ClassInSubPackage#foo\n" + 
3998
		"	       ^^^^^^^^^^^^^^^^^\n" + 
3999
		"Javadoc: ClassInSubPackage cannot be resolved to a type\n" + 
4000
		"----------\n" + 
4001
		"5. ERROR in foo\\bar\\package-info.java (at line 8)\n" + 
4002
		"	* @see ClassInEnclosingPackage\n" + 
4003
		"	       ^^^^^^^^^^^^^^^^^^^^^^^\n" + 
4004
		"Javadoc: ClassInEnclosingPackage cannot be resolved to a type\n" + 
4005
		"----------\n" + 
4006
		"6. ERROR in foo\\bar\\package-info.java (at line 10)\n" + 
4007
		"	* @see ClassInEnclosingPackage\n" + 
4008
		"	       ^^^^^^^^^^^^^^^^^^^^^^^\n" + 
4009
		"Javadoc: ClassInEnclosingPackage cannot be resolved to a type\n" + 
4010
		"----------\n");
4011
	}	
4012
4013
	/**
4014
	 * Additional tests for "https://bugs.eclipse.org/bugs/show_bug.cgi?id=286918" 
4015
	 * @test that in a non package-info.java file
4016
	 * 				2. References without qualified names to valid Java elements in the same package are ACCEPTED
4017
	 * 	 			2. References without qualified names to valid Java elements in other packages are REPORTED
4018
	 * 				3. References with qualified names to valid Java elements are accepted
4019
	 */	
4020
	public void testBug284333a() {
4021
		runNegativeTest(new String[]{
4022
				"goo/bar/package-info.java",
4023
				"/**\n" +
4024
				"*/\n" +
4025
				"package goo.bar;\n",
4026
				"foo/bar/ClassInSamePackage.java",
4027
				"package foo.bar;\n" +
4028
				"public class ClassInSamePackage {\n" +
4029
				"	public static int SOME_FIELD; \n" +
4030
				"}\n",
4031
				"foo/bar/goo/ClassInSubPackage.java",
4032
				"package foo.bar.goo;\n" +
4033
				"public class ClassInSubPackage {\n" +
4034
				"	public static void foo() { \n" +
4035
				"   }\n" +
4036
				"}\n",
4037
				"foo/ClassInEnclosingPackage.java",
4038
				"package foo;\n" +
4039
				"public class ClassInEnclosingPackage {\n" +
4040
				"	public static int SOME_FIELD; \n" +
4041
				"}\n",
4042
				"foo/bar/NotAPackageInfo.java",
4043
				"package foo.bar;\n" +
4044
				"/**\n" +
4045
				" * @see ClassInSamePackage#SOME_FIELD\n" +
4046
				" * @see foo.bar.ClassInSamePackage#SOME_FIELD\n" +
4047
				" * @see ClassInSamePackage#SOME_FIELD\n" +
4048
				" */\n" +
4049
				" public class NotAPackageInfo {\n" +
4050
				"/**\n" +
4051
				" * @see ClassInSubPackage#foo\n" +
4052
				" * @see foo.bar.goo.ClassInSubPackage#foo\n" +
4053
				" * @see ClassInSubPackage#foo\n" +
4054
				" */\n" +
4055
				"	public static int SOME_FIELD = 0;\n" +
4056
				"/**\n" +
4057
				" * @see ClassInEnclosingPackage\n" +
4058
				" * @see foo.ClassInEnclosingPackage\n" +
4059
				" * @see ClassInEnclosingPackage\n" +
4060
				" */\n" +
4061
				" 	public static void foo() {\n" +
4062
				"	}\n" +
4063
				"	" +
4064
				" }\n"	
4065
		},
4066
		"----------\n" + 
4067
		"1. ERROR in foo\\bar\\NotAPackageInfo.java (at line 9)\n" + 
4068
		"	* @see ClassInSubPackage#foo\n" + 
4069
		"	       ^^^^^^^^^^^^^^^^^\n" + 
4070
		"Javadoc: ClassInSubPackage cannot be resolved to a type\n" + 
4071
		"----------\n" + 
4072
		"2. ERROR in foo\\bar\\NotAPackageInfo.java (at line 11)\n" + 
4073
		"	* @see ClassInSubPackage#foo\n" + 
4074
		"	       ^^^^^^^^^^^^^^^^^\n" + 
4075
		"Javadoc: ClassInSubPackage cannot be resolved to a type\n" + 
4076
		"----------\n" + 
4077
		"3. ERROR in foo\\bar\\NotAPackageInfo.java (at line 15)\n" + 
4078
		"	* @see ClassInEnclosingPackage\n" + 
4079
		"	       ^^^^^^^^^^^^^^^^^^^^^^^\n" + 
4080
		"Javadoc: ClassInEnclosingPackage cannot be resolved to a type\n" + 
4081
		"----------\n" + 
4082
		"4. ERROR in foo\\bar\\NotAPackageInfo.java (at line 17)\n" + 
4083
		"	* @see ClassInEnclosingPackage\n" + 
4084
		"	       ^^^^^^^^^^^^^^^^^^^^^^^\n" + 
4085
		"Javadoc: ClassInEnclosingPackage cannot be resolved to a type\n" + 
4086
		"----------\n");
4087
	}
4088
	/**
4089
	 * Additional tests for "https://bugs.eclipse.org/bugs/show_bug.cgi?id=284333" 
4090
	 * @test that in a non package-info.java file
4091
	 * 	 			2. References without qualified names to imported Java elements in other packages are ACCEPTED
4092
	 * 				3. References with qualified names to valid Java elements are ACCEPTED
4093
	 */	
4094
	public void testBug284333b() {
4095
		runConformTest(new String[] {
4096
				"goo/bar/package-info.java",
4097
				"/**\n" +
4098
				"*/\n" +
4099
				"package goo.bar;\n",
4100
				"foo/bar/ClassInSamePackage.java",
4101
				"package foo.bar;\n" +
4102
				"public class ClassInSamePackage {\n" +
4103
				"	public static int SOME_FIELD; \n" +
4104
				"}\n",
4105
				"foo/bar/goo/ClassInSubPackage.java",
4106
				"package foo.bar.goo;\n" +
4107
				"public class ClassInSubPackage {\n" +
4108
				"	public static void foo() { \n" +
4109
				"   }\n" +
4110
				"}\n",
4111
				"foo/ClassInEnclosingPackage.java",
4112
				"package foo;\n" +
4113
				"public class ClassInEnclosingPackage {\n" +
4114
				"	public static int SOME_FIELD; \n" +
4115
				"}\n",
4116
				"foo/bar/NotAPackageInfo.java",
4117
				"package foo.bar;\n" +
4118
				"import foo.*;\n" +
4119
				"import foo.bar.goo.*;\n" +
4120
				"/**\n" +
4121
				" * @see ClassInSamePackage#SOME_FIELD\n" +
4122
				" * @see foo.bar.ClassInSamePackage#SOME_FIELD\n" +
4123
				" * @see ClassInSamePackage#SOME_FIELD\n" +
4124
				" * @see goo.bar\n" +
4125
				" */\n" +
4126
				" public class NotAPackageInfo {\n" +
4127
				"/**\n" +
4128
				" * @see ClassInSubPackage#foo\n" +
4129
				" * @see foo.bar.goo.ClassInSubPackage#foo\n" +
4130
				" * @see ClassInSubPackage#foo\n" +
4131
				" * @see goo.bar\n" +
4132
				" */\n" +
4133
				"	public static int SOME_FIELD = 0;\n" +
4134
				"/**\n" +
4135
				" * @see ClassInEnclosingPackage\n" +
4136
				" * @see foo.ClassInEnclosingPackage\n" +
4137
				" * @see ClassInEnclosingPackage\n" +
4138
				" * @see goo.bar\n" +
4139
				" */\n" +
4140
				" 	public static void foo() {\n" +
4141
				"	}\n" +
4142
				"	" +
4143
				" }\n"	
4144
		});
4145
	}	
3933
}
4146
}

Return to bug 286918