### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core.tests.compiler Index: src/org/eclipse/jdt/core/tests/compiler/regression/JavadocBugsTest.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/JavadocBugsTest.java,v retrieving revision 1.44 diff -u -r1.44 JavadocBugsTest.java --- src/org/eclipse/jdt/core/tests/compiler/regression/JavadocBugsTest.java 27 May 2008 23:54:01 -0000 1.44 +++ src/org/eclipse/jdt/core/tests/compiler/regression/JavadocBugsTest.java 5 Jun 2008 10:09:37 -0000 @@ -1247,19 +1247,34 @@ /** * Bug 50695. * @see 50695 + * Since bug 211054 was fixed, expect warning to be raised when referencing packages others + * than the current one. + * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=211054" */ public void testBug50695() { - runConformTest( + runNegativeTest( new String[] { "X.java", "public class X {\n" + - " /**\n" + - " * @see java\n" + - " * @see java.util\n" + - " */\n" + - " void foo() {}\n" + - "}\n" - }); + " /**\n" + + " * @see java\n" + + " * @see java.util\n" + + " */\n" + + " void foo() {}\n" + + "}\n" + }, + "----------\n" + + "1. ERROR in X.java (at line 3)\n" + + " * @see java\n" + + " ^^^^\n" + + "Javadoc: Invalid reference\n" + + "----------\n" + + "2. ERROR in X.java (at line 4)\n" + + " * @see java.util\n" + + " ^^^^^^^^^\n" + + "Javadoc: Invalid reference\n" + + "----------\n" + ); } public void testBug50695b() { runNegativeTest( @@ -1272,7 +1287,7 @@ " void foo() {}\n" + "}\n" }, - "----------\n" + + "----------\n" + "1. ERROR in X.java (at line 3)\n" + " * @see java.unknown\n" + " ^^^^^^^^^^^^\n" + @@ -7284,4 +7299,69 @@ expectedError ); } + + /** + * @bug 211054: [javadoc] @see package reference should raise a warning except for the package declaration + * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=211054" + */ + public void testBug211054a() { + String[] units = new String[] { + "pkg/X.java", + "package pkg;\n" + + "\n" + + "public class X {\n" + + " /**\n" + + " * @see java\n" + + " * @see java.lang\n" + + " * @see PKG\n" + + " * @see pkg\n" + + " */\n" + + " public void foo() { \n" + + " \n" + + " }\n" + + "}\n" + }; + reportInvalidJavadoc = CompilerOptions.WARNING; + runNegativeTest(units, + // warning - Tag @see: reference not found: java + // warning - Tag @see: reference not found: java.lang + // warning - Tag @see: reference not found: PKG + "----------\n" + + "1. WARNING in pkg\\X.java (at line 5)\n" + + " * @see java\n" + + " ^^^^\n" + + "Javadoc: Invalid reference\n" + + "----------\n" + + "2. WARNING in pkg\\X.java (at line 6)\n" + + " * @see java.lang\n" + + " ^^^^^^^^^\n" + + "Javadoc: Invalid reference\n" + + "----------\n" + + "3. WARNING in pkg\\X.java (at line 7)\n" + + " * @see PKG\n" + + " ^^^\n" + + "Javadoc: PKG cannot be resolved to a type\n" + + "----------\n"); + } + public void testBug211054b() { + String[] units = new String[] { + "pkg/X.java", + "package pkg;\n" + + "\n" + + "public class X {\n" + + " /**\n" + + " * @see java\n" + + " * @see java.lang\n" + + " * @see PKG\n" + + " * @see pkg\n" + + " */\n" + + " protected void foo() { \n" + + " \n" + + " }\n" + + "}\n" + }; + reportInvalidJavadoc = CompilerOptions.WARNING; + this.reportInvalidJavadocVisibility = CompilerOptions.PUBLIC; + runConformTest(units); + } } \ No newline at end of file #P org.eclipse.jdt.core Index: compiler/org/eclipse/jdt/internal/compiler/ast/JavadocQualifiedTypeReference.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/JavadocQualifiedTypeReference.java,v retrieving revision 1.22 diff -u -r1.22 JavadocQualifiedTypeReference.java --- compiler/org/eclipse/jdt/internal/compiler/ast/JavadocQualifiedTypeReference.java 27 May 2008 22:21:13 -0000 1.22 +++ compiler/org/eclipse/jdt/internal/compiler/ast/JavadocQualifiedTypeReference.java 5 Jun 2008 10:09:38 -0000 @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.jdt.internal.compiler.ast; +import org.eclipse.jdt.core.compiler.CharOperation; import org.eclipse.jdt.internal.compiler.ASTVisitor; import org.eclipse.jdt.internal.compiler.impl.Constant; import org.eclipse.jdt.internal.compiler.lookup.Binding; @@ -50,6 +51,12 @@ Binding binding = scope.getTypeOrPackage(this.tokens); if (binding instanceof PackageBinding) { this.packageBinding = (PackageBinding) binding; + // https://bugs.eclipse.org/bugs/show_bug.cgi?id=211054 + // allow references to current package only. All other package references should be reported as invalid + // @see also https://bugs.eclipse.org/bugs/show_bug.cgi?id=50695 + if (! CharOperation.equals(scope.compilationUnitScope().currentPackageName, this.packageBinding.compoundName, true)) { + scope.problemReporter().javadocInvalidReference(this.sourceStart, this.sourceEnd); + } } else { reportInvalidType(scope); } Index: compiler/org/eclipse/jdt/internal/compiler/ast/JavadocSingleTypeReference.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/JavadocSingleTypeReference.java,v retrieving revision 1.25 diff -u -r1.25 JavadocSingleTypeReference.java --- compiler/org/eclipse/jdt/internal/compiler/ast/JavadocSingleTypeReference.java 27 May 2008 22:21:13 -0000 1.25 +++ compiler/org/eclipse/jdt/internal/compiler/ast/JavadocSingleTypeReference.java 5 Jun 2008 10:09:38 -0000 @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.jdt.internal.compiler.ast; +import org.eclipse.jdt.core.compiler.CharOperation; import org.eclipse.jdt.internal.compiler.ASTVisitor; import org.eclipse.jdt.internal.compiler.impl.Constant; import org.eclipse.jdt.internal.compiler.lookup.Binding; @@ -65,6 +66,12 @@ Binding binding = scope.getTypeOrPackage(tokens); if (binding instanceof PackageBinding) { this.packageBinding = (PackageBinding) binding; + // https://bugs.eclipse.org/bugs/show_bug.cgi?id=211054 + // allow references to current package only. All other package references should be reported as invalid + // @see also https://bugs.eclipse.org/bugs/show_bug.cgi?id=50695 + if (! CharOperation.equals(scope.compilationUnitScope().currentPackageName, this.packageBinding.compoundName, true)) { + scope.problemReporter().javadocInvalidReference(this.sourceStart, this.sourceEnd); + } } else { if (this.resolvedType.problemId() == ProblemReasons.NonStaticReferenceInStaticContext) { TypeBinding closestMatch = this.resolvedType.closestMatch();