### 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.14 diff -u -r1.14 JavadocBugsTest.java --- src/org/eclipse/jdt/core/tests/compiler/regression/JavadocBugsTest.java 17 Nov 2005 18:52:14 -0000 1.14 +++ src/org/eclipse/jdt/core/tests/compiler/regression/JavadocBugsTest.java 29 Nov 2005 09:52:28 -0000 @@ -3944,6 +3944,78 @@ } /** + * Bug 96237: [javadoc] Inner types must be qualified + * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=96237" + */ + public void testBug96237() { + this.reportMissingJavadocTags = CompilerOptions.ERROR; + runNegativeTest( + new String[] { + "Test.java", + "/**\n" + + " * @see Inner\n" + + " * @see TestBug96237.Inner\n" + + " */\n" + + "public class Test {\n" + + " class Inner {\n" + + " }\n" + + "}\n" + }, + "???" + ); + } + public void testBug96237a() { + this.reportMissingJavadocTags = CompilerOptions.ERROR; + runNegativeTest( + new String[] { + "Test.java", + "public class Test {\n" + + " /**\n" + + " * @see Level2\n" + + " * @see Inner.Level2\n" + + " */\n" + + " class Inner {\n" + + " class Level2 {\n" + + " }\n" + + " }\n" + + "}\n" + }, + "???" + ); + } + public void testBug96237b() { + this.reportMissingJavadocTags = CompilerOptions.ERROR; + runNegativeTest( + new String[] { + "Test.java", + "/**\n" + + " * @see Inner\n" + + " * @see TestBug96237.Inner\n" + + " * @see Level3\n" + + " * @see Level2.Level3\n" + + " * @see Inner.Level2.Level3\n" + + " * @see TestBug96237.Inner.Level2.Level3\n" + + " */\n" + + "public class Test {\n" + + " /**\n" + + " * @see Level2\n" + + " * @see Inner.Level2\n" + + " * @see Level3\n" + + " * @see Level2.Level3\n" + + " */\n" + + " class Inner {\n" + + " class Level2 {\n" + + " class Level3 {\n" + + " }\n" + + " }\n" + + " }\n" + + "}\n" + }, + "???" + ); + } + + /** * Bug 116464: [javadoc] Unicode tag name are not correctly parsed * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=116464" */ #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.37 diff -u -r1.37 Javadoc.java --- compiler/org/eclipse/jdt/internal/compiler/ast/Javadoc.java 20 Oct 2005 13:26:45 -0000 1.37 +++ compiler/org/eclipse/jdt/internal/compiler/ast/Javadoc.java 29 Nov 2005 09:52:31 -0000 @@ -253,11 +253,32 @@ return; } + + // Verify field references + if (reference.resolvedType != null && reference.resolvedType.isValidBinding() && reference.resolvedType.isMemberType()) { + if (reference instanceof JavadocSingleTypeReference) { + int modifiers = ((MemberTypeBinding)reference.resolvedType).modifiers; + scope.problemReporter().javadocMissingTypeMemberQualification(reference.sourceStart, reference.sourceEnd, modifiers); + } else if (reference instanceof JavadocQualifiedTypeReference) { + JavadocQualifiedTypeReference qualifiedTypeReference = (JavadocQualifiedTypeReference) reference; + TypeBinding enclosingType = qualifiedTypeReference.resolvedType.enclosingType(); + char[] topLevelName = enclosingType.sourceName(); + while (enclosingType.isMemberType()) { + enclosingType = enclosingType.enclosingType(); + topLevelName = enclosingType.sourceName(); + } + if (!CharOperation.equals(topLevelName, qualifiedTypeReference.tokens[0])) { + int modifiers = ((MemberTypeBinding)reference.resolvedType).modifiers; + scope.problemReporter().javadocMissingTypeMemberQualification(reference.sourceStart, reference.sourceEnd, modifiers); + } + } + } + // If not 1.5 level, verification is finished if (!verifyValues) return; // Verify that message reference are not used for @value tags - else if (reference instanceof JavadocMessageSend) { + if (reference instanceof JavadocMessageSend) { JavadocMessageSend msgSend = (JavadocMessageSend) reference; int modifiers = msgSend.binding==null ? -1 : msgSend.binding.modifiers; if (msgSend.tagValue == JavadocTagConstants.TAG_VALUE_VALUE) { // cannot refer to method for @value tag Index: compiler/org/eclipse/jdt/core/compiler/IProblem.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/IProblem.java,v retrieving revision 1.161 diff -u -r1.161 IProblem.java --- compiler/org/eclipse/jdt/core/compiler/IProblem.java 21 Oct 2005 07:19:17 -0000 1.161 +++ compiler/org/eclipse/jdt/core/compiler/IProblem.java 29 Nov 2005 09:52:31 -0000 @@ -740,6 +740,13 @@ /* * Javadoc comments */ + /** @since 3.2 */ + int JavadocMissingTypeMemberQualification = Javadoc + Internal + 466; + /** @since 3.2 */ + int JavadocMissingIdentifier = Javadoc + Internal + 467; + /** @since 3.2 */ + int JavadocNonStaticTypeFromStaticInvocation = Javadoc + Internal + 468; + /** @since 3.0 */ int JavadocUnexpectedTag = Javadoc + Internal + 470; /** @since 3.0 */ @@ -856,11 +863,6 @@ /** @since 3.1 */ int JavadocInvalidParamTagTypeParameter = Javadoc + Internal + 469; - /** @since 3.2 */ - int JavadocNonStaticTypeFromStaticInvocation = Javadoc + Internal + 468; - /** @since 3.2 */ - int JavadocMissingIdentifier = Javadoc + Internal + 467; - /** * Generics */ Index: compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties,v retrieving revision 1.190 diff -u -r1.190 messages.properties --- compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties 21 Oct 2005 07:19:17 -0000 1.190 +++ compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties 29 Nov 2005 09:52:36 -0000 @@ -360,6 +360,7 @@ 460 = Empty block should be documented ### DOC +466 = Missing qualification for type member 467 = Missing identifier 468 = Cannot make a static reference to the non-static type variable {0} 469 = Invalid param tag type parameter name Index: compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java,v retrieving revision 1.274 diff -u -r1.274 ProblemReporter.java --- compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java 16 Nov 2005 12:19:37 -0000 1.274 +++ compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java 29 Nov 2005 09:52:35 -0000 @@ -560,6 +560,7 @@ case IProblem.JavadocDuplicateParamName: case IProblem.JavadocMissingParamName: case IProblem.JavadocMissingIdentifier: + case IProblem.JavadocMissingTypeMemberQualification: case IProblem.JavadocInvalidThrowsClassName: case IProblem.JavadocDuplicateThrowsClassName: case IProblem.JavadocMissingThrowsClassName: @@ -1410,6 +1411,7 @@ case IProblem.JavadocDuplicateParamName: case IProblem.JavadocMissingParamName: case IProblem.JavadocMissingIdentifier: + case IProblem.JavadocMissingTypeMemberQualification: case IProblem.JavadocInvalidThrowsClassName: case IProblem.JavadocDuplicateThrowsClassName: case IProblem.JavadocMissingThrowsClassName: @@ -3845,6 +3847,10 @@ if (javadocVisibility(this.options.reportInvalidJavadocTagsVisibility, modifiers)) this.handle(IProblem.JavadocMissingIdentifier, NoArgument, NoArgument, sourceStart, sourceEnd); } +public void javadocMissingTypeMemberQualification(int sourceStart, int sourceEnd, int modifiers){ + if (javadocVisibility(this.options.reportInvalidJavadocTagsVisibility, modifiers)) + this.handle(IProblem.JavadocMissingTypeMemberQualification, NoArgument, NoArgument, sourceStart, sourceEnd); +} public void javadocMissingParamName(int sourceStart, int sourceEnd, int modifiers){ if (javadocVisibility(this.options.reportInvalidJavadocTagsVisibility, modifiers)) this.handle(IProblem.JavadocMissingParamName, NoArgument, NoArgument, sourceStart, sourceEnd);