### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: compiler/org/eclipse/jdt/internal/compiler/ast/Javadoc.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Javadoc.java,v retrieving revision 1.65 diff -u -r1.65 Javadoc.java --- compiler/org/eclipse/jdt/internal/compiler/ast/Javadoc.java 24 Mar 2009 08:51:02 -0000 1.65 +++ compiler/org/eclipse/jdt/internal/compiler/ast/Javadoc.java 20 Aug 2009 06:19:49 -0000 @@ -820,6 +820,18 @@ } } } + /* + * https://bugs.eclipse.org/bugs/show_bug.cgi?id=286918 + * + * We are concerned only about the Single type references (i.e. without any package) If they are not in default package, + * then report an error. References with qualified yet incorrect names would have already been taken care of. + */ + if (scope.referenceCompilationUnit().isPackageInfo() && typeReference instanceof JavadocSingleTypeReference) { + if (resolvedType.fPackage.compoundName.length > 0) { + scope.problemReporter().javadocInvalidReference(typeReference.sourceStart, typeReference.sourceEnd); + return; // Not really needed - just in case more code added in future + } + } } } #P org.eclipse.jdt.core.tests.compiler Index: src/org/eclipse/jdt/core/tests/compiler/regression/JavadocTest_1_5.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/JavadocTest_1_5.java,v retrieving revision 1.44 diff -u -r1.44 JavadocTest_1_5.java --- src/org/eclipse/jdt/core/tests/compiler/regression/JavadocTest_1_5.java 19 Aug 2009 14:57:15 -0000 1.44 +++ src/org/eclipse/jdt/core/tests/compiler/regression/JavadocTest_1_5.java 20 Aug 2009 06:19:56 -0000 @@ -3930,4 +3930,217 @@ "----------\n" ); } + /** + * @bug 286918:[javadoc] Compiler should warn when @see and @link tag references in package-info.java don't have fully qualified names + * @test that in a package-info.java file + * 1. References to valid packages are ACCEPTED without any warnings or errors + * 2. References to valid Java elements (including the ones in the same package) without qualified names are REPORTED as errors + * 3. References to valid Java elements with qualified names are ACCEPTED + * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=286918" + */ + public void testBug284333() { + runNegativeTest(new String[]{ + "goo/bar/package-info.java", + "/**\n" + + "*/\n" + + "package goo.bar;\n", + "foo/bar/ClassInSamePackage.java", + "package foo.bar;\n" + + "public class ClassInSamePackage {\n" + + " public static int SOME_FIELD; \n" + + "}\n", + "foo/bar/goo/ClassInSubPackage.java", + "package foo.bar.goo;\n" + + "public class ClassInSubPackage {\n" + + " public static void foo() { \n" + + " }\n" + + "}\n", + "foo/ClassInEnclosingPackage.java", + "package foo;\n" + + "public class ClassInEnclosingPackage {\n" + + " public static int SOME_FIELD; \n" + + "}\n", + "foo/bar/package-info.java", + "/**\n" + + " * @see ClassInSamePackage#SOME_FIELD\n" + + " * @see foo.bar.ClassInSamePackage#SOME_FIELD\n" + + " * @see ClassInSamePackage#SOME_FIELD\n" + + " * @see ClassInSubPackage#foo\n" + + " * @see foo.bar.goo.ClassInSubPackage#foo\n" + + " * @see ClassInSubPackage#foo\n" + + " * @see ClassInEnclosingPackage\n" + + " * @see foo.ClassInEnclosingPackage\n" + + " * @see ClassInEnclosingPackage\n" + + " * @see foo.bar\n" + + " * @see goo.bar\n" + + " * @see foo.bar.goo\n" + + " */\n" + + "package foo.bar;\n" + }, + "----------\n" + + "1. ERROR in foo\\bar\\package-info.java (at line 2)\n" + + " * @see ClassInSamePackage#SOME_FIELD\n" + + " ^^^^^^^^^^^^^^^^^^\n" + + "Javadoc: Invalid reference\n" + + "----------\n" + + "2. ERROR in foo\\bar\\package-info.java (at line 4)\n" + + " * @see ClassInSamePackage#SOME_FIELD\n" + + " ^^^^^^^^^^^^^^^^^^\n" + + "Javadoc: Invalid reference\n" + + "----------\n" + + "3. ERROR in foo\\bar\\package-info.java (at line 5)\n" + + " * @see ClassInSubPackage#foo\n" + + " ^^^^^^^^^^^^^^^^^\n" + + "Javadoc: ClassInSubPackage cannot be resolved to a type\n" + + "----------\n" + + "4. ERROR in foo\\bar\\package-info.java (at line 7)\n" + + " * @see ClassInSubPackage#foo\n" + + " ^^^^^^^^^^^^^^^^^\n" + + "Javadoc: ClassInSubPackage cannot be resolved to a type\n" + + "----------\n" + + "5. ERROR in foo\\bar\\package-info.java (at line 8)\n" + + " * @see ClassInEnclosingPackage\n" + + " ^^^^^^^^^^^^^^^^^^^^^^^\n" + + "Javadoc: ClassInEnclosingPackage cannot be resolved to a type\n" + + "----------\n" + + "6. ERROR in foo\\bar\\package-info.java (at line 10)\n" + + " * @see ClassInEnclosingPackage\n" + + " ^^^^^^^^^^^^^^^^^^^^^^^\n" + + "Javadoc: ClassInEnclosingPackage cannot be resolved to a type\n" + + "----------\n"); + } + + /** + * Additional tests for "https://bugs.eclipse.org/bugs/show_bug.cgi?id=286918" + * @test that in a non package-info.java file + * 2. References without qualified names to valid Java elements in the same package are ACCEPTED + * 2. References without qualified names to valid Java elements in other packages are REPORTED + * 3. References with qualified names to valid Java elements are accepted + */ + public void testBug284333a() { + runNegativeTest(new String[]{ + "goo/bar/package-info.java", + "/**\n" + + "*/\n" + + "package goo.bar;\n", + "foo/bar/ClassInSamePackage.java", + "package foo.bar;\n" + + "public class ClassInSamePackage {\n" + + " public static int SOME_FIELD; \n" + + "}\n", + "foo/bar/goo/ClassInSubPackage.java", + "package foo.bar.goo;\n" + + "public class ClassInSubPackage {\n" + + " public static void foo() { \n" + + " }\n" + + "}\n", + "foo/ClassInEnclosingPackage.java", + "package foo;\n" + + "public class ClassInEnclosingPackage {\n" + + " public static int SOME_FIELD; \n" + + "}\n", + "foo/bar/NotAPackageInfo.java", + "package foo.bar;\n" + + "/**\n" + + " * @see ClassInSamePackage#SOME_FIELD\n" + + " * @see foo.bar.ClassInSamePackage#SOME_FIELD\n" + + " * @see ClassInSamePackage#SOME_FIELD\n" + + " */\n" + + " public class NotAPackageInfo {\n" + + "/**\n" + + " * @see ClassInSubPackage#foo\n" + + " * @see foo.bar.goo.ClassInSubPackage#foo\n" + + " * @see ClassInSubPackage#foo\n" + + " */\n" + + " public static int SOME_FIELD = 0;\n" + + "/**\n" + + " * @see ClassInEnclosingPackage\n" + + " * @see foo.ClassInEnclosingPackage\n" + + " * @see ClassInEnclosingPackage\n" + + " */\n" + + " public static void foo() {\n" + + " }\n" + + " " + + " }\n" + }, + "----------\n" + + "1. ERROR in foo\\bar\\NotAPackageInfo.java (at line 9)\n" + + " * @see ClassInSubPackage#foo\n" + + " ^^^^^^^^^^^^^^^^^\n" + + "Javadoc: ClassInSubPackage cannot be resolved to a type\n" + + "----------\n" + + "2. ERROR in foo\\bar\\NotAPackageInfo.java (at line 11)\n" + + " * @see ClassInSubPackage#foo\n" + + " ^^^^^^^^^^^^^^^^^\n" + + "Javadoc: ClassInSubPackage cannot be resolved to a type\n" + + "----------\n" + + "3. ERROR in foo\\bar\\NotAPackageInfo.java (at line 15)\n" + + " * @see ClassInEnclosingPackage\n" + + " ^^^^^^^^^^^^^^^^^^^^^^^\n" + + "Javadoc: ClassInEnclosingPackage cannot be resolved to a type\n" + + "----------\n" + + "4. ERROR in foo\\bar\\NotAPackageInfo.java (at line 17)\n" + + " * @see ClassInEnclosingPackage\n" + + " ^^^^^^^^^^^^^^^^^^^^^^^\n" + + "Javadoc: ClassInEnclosingPackage cannot be resolved to a type\n" + + "----------\n"); + } + /** + * Additional tests for "https://bugs.eclipse.org/bugs/show_bug.cgi?id=284333" + * @test that in a non package-info.java file + * 2. References without qualified names to imported Java elements in other packages are ACCEPTED + * 3. References with qualified names to valid Java elements are ACCEPTED + */ + public void testBug284333b() { + runConformTest(new String[] { + "goo/bar/package-info.java", + "/**\n" + + "*/\n" + + "package goo.bar;\n", + "foo/bar/ClassInSamePackage.java", + "package foo.bar;\n" + + "public class ClassInSamePackage {\n" + + " public static int SOME_FIELD; \n" + + "}\n", + "foo/bar/goo/ClassInSubPackage.java", + "package foo.bar.goo;\n" + + "public class ClassInSubPackage {\n" + + " public static void foo() { \n" + + " }\n" + + "}\n", + "foo/ClassInEnclosingPackage.java", + "package foo;\n" + + "public class ClassInEnclosingPackage {\n" + + " public static int SOME_FIELD; \n" + + "}\n", + "foo/bar/NotAPackageInfo.java", + "package foo.bar;\n" + + "import foo.*;\n" + + "import foo.bar.goo.*;\n" + + "/**\n" + + " * @see ClassInSamePackage#SOME_FIELD\n" + + " * @see foo.bar.ClassInSamePackage#SOME_FIELD\n" + + " * @see ClassInSamePackage#SOME_FIELD\n" + + " * @see goo.bar\n" + + " */\n" + + " public class NotAPackageInfo {\n" + + "/**\n" + + " * @see ClassInSubPackage#foo\n" + + " * @see foo.bar.goo.ClassInSubPackage#foo\n" + + " * @see ClassInSubPackage#foo\n" + + " * @see goo.bar\n" + + " */\n" + + " public static int SOME_FIELD = 0;\n" + + "/**\n" + + " * @see ClassInEnclosingPackage\n" + + " * @see foo.ClassInEnclosingPackage\n" + + " * @see ClassInEnclosingPackage\n" + + " * @see goo.bar\n" + + " */\n" + + " public static void foo() {\n" + + " }\n" + + " " + + " }\n" + }); + } }