### Eclipse Workspace Patch 1.0 #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.35 diff -u -r1.35 JavadocTest_1_5.java --- src/org/eclipse/jdt/core/tests/compiler/regression/JavadocTest_1_5.java 30 Nov 2007 17:01:57 -0000 1.35 +++ src/org/eclipse/jdt/core/tests/compiler/regression/JavadocTest_1_5.java 7 Dec 2007 06:16:12 -0000 @@ -3098,8 +3098,6 @@ * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=209936" */ public void testBug209936a() { - reportMissingJavadocComments = CompilerOptions.IGNORE; - reportMissingJavadocCommentsVisibility = CompilerOptions.IGNORE; runNegativeTest( new String[] { "p/X.java", @@ -3133,26 +3131,13 @@ "----------\n" + "1. ERROR in p\\X.java (at line 6)\n" + " * @see Member#foo(Object, Object)\n" + - " ^^^\n" + - "Javadoc: The method foo(Object, Object) from the type Z.Member is not visible\n" + - "----------\n" + - "2. ERROR in p\\X.java (at line 8)\n" + - " public void foo(Object source, Object data) {}\n" + - " ^^^^^^\n" + - "Javadoc: Missing tag for parameter source\n" + - "----------\n" + - "3. ERROR in p\\X.java (at line 8)\n" + - " public void foo(Object source, Object data) {}\n" + - " ^^^^\n" + - "Javadoc: Missing tag for parameter data\n" + + " ^^^^^^\n" + + "Javadoc: Invalid member type qualification\n" + "----------\n" ); } public void testBug209936b() { - reportMissingJavadocTags = CompilerOptions.IGNORE; - reportMissingJavadocComments = CompilerOptions.IGNORE; - reportMissingJavadocCommentsVisibility = CompilerOptions.IGNORE; runNegativeTest( new String[] { "p/X.java", @@ -3186,9 +3171,123 @@ "----------\n" + "1. ERROR in p\\X.java (at line 6)\n" + " * @see Member#foo(Object, Object)\n" + - " ^^^\n" + - "Javadoc: The method foo(Object, Object) from the type Z.Member is not visible\n" + + " ^^^^^^\n" + + "Javadoc: Invalid member type qualification\n" + + "----------\n" + ); + } + + public void testBug209936c() { + runConformTest( + new String[] { + "p1/A.java", + "package p1;\n" + + "\n" + + "public class A {\n" + + " public class B {\n" + + " public class C {\n" + + " public void foo(G object) {\n" + + " // does nothing\n" + + " }\n" + + " }\n" + + " }\n" + + "}", + "p2/X.java", + "package p2;\n" + + "\n" + + "import p1.A;\n" + + "\n" + + "public class X extends A {\n" + + " public class Y extends B {\n" + + " public class Z extends C {\n" + + " /**\n" + + " * @see A.B.C#foo(Object)\n" + + " */\n" + + " public void foo(G object) {\n" + + " super.foo(object);\n" + + " }\n" + + " }\n" + + " }\n" + + "}" + } + ); + } + + public void testBug209936d() { + runNegativeTest( + new String[] { + "p1/A.java", + "package p1;\n" + + "\n" + + "public class A {\n" + + " public class B {\n" + + " public class C {\n" + + " public void foo(G object) {\n" + + " // does nothing\n" + + " }\n" + + " }\n" + + " }\n" + + "}", + "p2/X.java", + "package p2;\n" + + "\n" + + "import p1.A;\n" + + "\n" + + "public class X extends A {\n" + + " public class Y extends B {\n" + + " public class Z extends C {\n" + + " /**\n" + + " * @see C#foo(Object)\n" + + " */\n" + + " public void foo(G object) {\n" + + " super.foo(object);\n" + + " }\n" + + " }\n" + + " }\n" + + "}" + }, + "----------\n" + + "1. ERROR in p2\\X.java (at line 9)\n" + + " * @see C#foo(Object)\n" + + " ^\n" + + "Javadoc: Invalid member type qualification\n" + "----------\n" ); } + + public void testBug209936e() { + runConformTest( + new String[] { + "p1/A.java", + "package p1;\n" + + "\n" + + "public class A {\n" + + " public class B {\n" + + " public class C {\n" + + " public void foo(G object) {\n" + + " // does nothing\n" + + " }\n" + + " }\n" + + " }\n" + + "}", + "p2/X.java", + "package p2;\n" + + "\n" + + "import p1.A;\n" + + "\n" + + "public class X extends A {\n" + + " public class Y extends B {\n" + + " public class Z extends C {\n" + + " /**\n" + + " * @see B.C#foo(Object)\n" + + " */\n" + + " public void foo(G object) {\n" + + " super.foo(object);\n" + + " }\n" + + " }\n" + + " }\n" + + "}" + } + ); + } } #P org.eclipse.jdt.core Index: compiler/org/eclipse/jdt/internal/compiler/util/Util.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/util/Util.java,v retrieving revision 1.64 diff -u -r1.64 Util.java --- compiler/org/eclipse/jdt/internal/compiler/util/Util.java 9 Oct 2007 15:59:29 -0000 1.64 +++ compiler/org/eclipse/jdt/internal/compiler/util/Util.java 7 Dec 2007 06:16:33 -0000 @@ -23,6 +23,11 @@ import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration; import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; import org.eclipse.jdt.internal.compiler.lookup.ExtraCompilerModifiers; +import org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment; +import org.eclipse.jdt.internal.compiler.lookup.RawTypeBinding; +import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding; +import org.eclipse.jdt.internal.compiler.lookup.Scope; +import org.eclipse.jdt.internal.compiler.lookup.TagBits; public class Util implements SuffixConstants { @@ -71,6 +76,55 @@ } return visibility; } + /** + * Returns the given binding's raw type binding. May retrieve and convert + * to raw types all enclosing types of the given ReferenceBinding. + * @param typeBinding the ReferenceBinding to raw convert + * @param scope the Scope of the given reference + * @return RawTypeBinding the raw converted ReferenceBinding + */ + public static RawTypeBinding deepConvertToRawType(ReferenceBinding typeBinding, Scope scope) { + if (typeBinding.isRawType()) { + return (RawTypeBinding) typeBinding; // nothing to do + } + + // top level types + if ((typeBinding.tagBits & TagBits.MemberTypeMask) == 0) { + return (RawTypeBinding) scope.environment().convertToRawType(typeBinding); + } + LookupEnvironment env = scope.compilationUnitScope().environment(); + + // test single level + ReferenceBinding enclosingType = typeBinding.enclosingType(); + ReferenceBinding currentType = enclosingType.enclosingType(); + if (currentType == null) { // only a single level + ReferenceBinding referenceBinding = (ReferenceBinding) env.convertToRawType(enclosingType); + return (RawTypeBinding) env.convertToRawType(referenceBinding.getMemberType(typeBinding.sourceName())); + } + + // more than 1 level found, make a loop + ReferenceBinding[] enclosingTypes = new ReferenceBinding[10]; + int enclosingIndex = 0; + enclosingTypes[enclosingIndex] = typeBinding; + enclosingTypes[++enclosingIndex] = enclosingType; + + // store all enclosing types + while (currentType != null) { + if (enclosingTypes.length == enclosingIndex) { // resize if needed + System.arraycopy(enclosingTypes, 0, (enclosingTypes = new ReferenceBinding[enclosingIndex * 2]), 0, enclosingIndex); + } + enclosingTypes[++enclosingIndex] = currentType; + currentType = currentType.enclosingType(); + } + + // raw convert all enclosing types + ReferenceBinding rawTypeBinding = (ReferenceBinding) env.convertToRawType(enclosingTypes[enclosingIndex--]); + while (enclosingIndex >= 0) { + ReferenceBinding referenceBinding = rawTypeBinding.getMemberType(enclosingTypes[enclosingIndex--].sourceName); + rawTypeBinding = (ReferenceBinding) env.convertToRawType(referenceBinding); + } + return (RawTypeBinding) rawTypeBinding; + } /** * Returns the contents of the given file as a byte array. 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.18 diff -u -r1.18 JavadocQualifiedTypeReference.java --- compiler/org/eclipse/jdt/internal/compiler/ast/JavadocQualifiedTypeReference.java 10 Apr 2007 19:03:10 -0000 1.18 +++ compiler/org/eclipse/jdt/internal/compiler/ast/JavadocQualifiedTypeReference.java 7 Dec 2007 06:16:16 -0000 @@ -16,9 +16,10 @@ import org.eclipse.jdt.internal.compiler.lookup.BlockScope; import org.eclipse.jdt.internal.compiler.lookup.ClassScope; import org.eclipse.jdt.internal.compiler.lookup.PackageBinding; -import org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding; +import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding; import org.eclipse.jdt.internal.compiler.lookup.Scope; import org.eclipse.jdt.internal.compiler.lookup.TypeBinding; +import org.eclipse.jdt.internal.compiler.util.Util; public class JavadocQualifiedTypeReference extends QualifiedTypeReference { @@ -74,8 +75,10 @@ } if (isTypeUseDeprecated(this.resolvedType, scope)) reportDeprecatedType(this.resolvedType, scope); - if (this.resolvedType instanceof ParameterizedTypeBinding) { - this.resolvedType = ((ParameterizedTypeBinding)this.resolvedType).genericType(); + + if (this.resolvedType.isParameterizedType() || this.resolvedType.isGenericType()) { + // https://bugs.eclipse.org/bugs/show_bug.cgi?id=209936 + return this.resolvedType = Util.deepConvertToRawType((ReferenceBinding) this.resolvedType, scope); } return this.resolvedType; } 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.21 diff -u -r1.21 JavadocSingleTypeReference.java --- compiler/org/eclipse/jdt/internal/compiler/ast/JavadocSingleTypeReference.java 10 Apr 2007 19:03:10 -0000 1.21 +++ compiler/org/eclipse/jdt/internal/compiler/ast/JavadocSingleTypeReference.java 7 Dec 2007 06:16:16 -0000 @@ -16,12 +16,12 @@ import org.eclipse.jdt.internal.compiler.lookup.BlockScope; import org.eclipse.jdt.internal.compiler.lookup.ClassScope; import org.eclipse.jdt.internal.compiler.lookup.PackageBinding; -import org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding; import org.eclipse.jdt.internal.compiler.lookup.ProblemReasons; import org.eclipse.jdt.internal.compiler.lookup.ProblemReferenceBinding; import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding; import org.eclipse.jdt.internal.compiler.lookup.Scope; import org.eclipse.jdt.internal.compiler.lookup.TypeBinding; +import org.eclipse.jdt.internal.compiler.util.Util; public class JavadocSingleTypeReference extends SingleTypeReference { @@ -86,8 +86,10 @@ } if (isTypeUseDeprecated(this.resolvedType, scope)) reportDeprecatedType(this.resolvedType, scope); - if (this.resolvedType instanceof ParameterizedTypeBinding) { - this.resolvedType = ((ParameterizedTypeBinding)this.resolvedType).genericType(); + + if (this.resolvedType.isParameterizedType() || this.resolvedType.isGenericType()) { + // https://bugs.eclipse.org/bugs/show_bug.cgi?id=209936 + return this.resolvedType = Util.deepConvertToRawType((ReferenceBinding) this.resolvedType, scope); } return this.resolvedType; } Index: compiler/org/eclipse/jdt/internal/compiler/ast/JavadocImplicitTypeReference.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/JavadocImplicitTypeReference.java,v retrieving revision 1.11 diff -u -r1.11 JavadocImplicitTypeReference.java --- compiler/org/eclipse/jdt/internal/compiler/ast/JavadocImplicitTypeReference.java 6 Mar 2007 02:38:48 -0000 1.11 +++ compiler/org/eclipse/jdt/internal/compiler/ast/JavadocImplicitTypeReference.java 7 Dec 2007 06:16:16 -0000 @@ -13,6 +13,7 @@ import org.eclipse.jdt.internal.compiler.ASTVisitor; import org.eclipse.jdt.internal.compiler.impl.Constant; import org.eclipse.jdt.internal.compiler.lookup.*; +import org.eclipse.jdt.internal.compiler.util.Util; public class JavadocImplicitTypeReference extends TypeReference { @@ -76,6 +77,11 @@ } if (isTypeUseDeprecated(this.resolvedType, scope)) reportDeprecatedType(this.resolvedType, scope); + + if (this.resolvedType.isParameterizedType() || this.resolvedType.isGenericType()) { + // https://bugs.eclipse.org/bugs/show_bug.cgi?id=209936 + return this.resolvedType = Util.deepConvertToRawType((ReferenceBinding) this.resolvedType, scope); + } return this.resolvedType; } Index: compiler/org/eclipse/jdt/internal/compiler/ast/JavadocMessageSend.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/JavadocMessageSend.java,v retrieving revision 1.33 diff -u -r1.33 JavadocMessageSend.java --- compiler/org/eclipse/jdt/internal/compiler/ast/JavadocMessageSend.java 27 Apr 2007 15:51:38 -0000 1.33 +++ compiler/org/eclipse/jdt/internal/compiler/ast/JavadocMessageSend.java 7 Dec 2007 06:16:16 -0000 @@ -78,7 +78,7 @@ if (this.actualReceiverType == null) { return null; } - this.actualReceiverType = scope.environment().convertToRawType(this.receiver.resolvedType); + SourceTypeBinding enclosingType = scope.enclosingSourceType(); if (enclosingType==null ? false : enclosingType.isCompatibleWith(this.actualReceiverType)) { this.bits |= ASTNode.SuperAccess; 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.364 diff -u -r1.364 ProblemReporter.java --- compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java 30 Nov 2007 17:02:40 -0000 1.364 +++ compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java 7 Dec 2007 06:16:33 -0000 @@ -4139,7 +4139,6 @@ return; } break; - case ProblemReasons.ReceiverTypeNotVisible: case ProblemReasons.NotVisible : id = IProblem.JavadocNotVisibleMethod; break; #P org.eclipse.jdt.core.tests.model Index: src/org/eclipse/jdt/core/tests/model/JavadocBugsCompletionModelTest.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavadocBugsCompletionModelTest.java,v retrieving revision 1.22 diff -u -r1.22 JavadocBugsCompletionModelTest.java --- src/org/eclipse/jdt/core/tests/model/JavadocBugsCompletionModelTest.java 14 May 2007 17:04:05 -0000 1.22 +++ src/org/eclipse/jdt/core/tests/model/JavadocBugsCompletionModelTest.java 7 Dec 2007 06:16:47 -0000 @@ -340,7 +340,7 @@ "}"; completeInJavadoc("/Completion/src/javadoc/bugs/BasicTestBugs.java", source, true, "meth"); assertSortedResults( - "method[METHOD_REF]{method(Object), Ljavadoc.bugs.BasicTestBugs;, (TS;)V, method, (s), "+this.positions+R_DRICNRNS+"}" + "method[METHOD_REF]{method(Object), Ljavadoc.bugs.BasicTestBugs;, (Ljava.lang.Object;)V, method, (s), "+this.positions+R_DRICNRNS+"}" ); } Index: src/org/eclipse/jdt/core/tests/dom/ASTConverterJavadocTest.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverterJavadocTest.java,v retrieving revision 1.75 diff -u -r1.75 ASTConverterJavadocTest.java --- src/org/eclipse/jdt/core/tests/dom/ASTConverterJavadocTest.java 24 Nov 2006 13:33:37 -0000 1.75 +++ src/org/eclipse/jdt/core/tests/dom/ASTConverterJavadocTest.java 7 Dec 2007 06:16:46 -0000 @@ -2418,9 +2418,11 @@ IBinding binding = seeRef.resolveBinding(); assertTrue("Wrong kind of binding", binding instanceof ITypeBinding); ITypeBinding typeBinding = (ITypeBinding)binding; - assertTrue(seeRef.toString()+" should have a generic type binding", typeBinding.isGenericType()); + // https://bugs.eclipse.org/bugs/show_bug.cgi?id=209936 + // only have RawTypeBinding in Javadocs + assertFalse(seeRef.toString()+" should NOT have a generic type binding", typeBinding.isGenericType()); assertFalse(seeRef.toString()+" should NOT have a parameterized type binding", typeBinding.isParameterizedType()); - assertFalse(seeRef.toString()+" should NOT have a raw type binding", typeBinding.isRawType()); + assertTrue(seeRef.toString()+" should have a raw type binding", typeBinding.isRawType()); // Get inline tag simple name reference in second tag assertEquals("Invalid number of fragments for inline tag element: "+inlineTag, 1, inlineTag.fragments().size()); node = (ASTNode) inlineTag.fragments().get(0); @@ -2430,9 +2432,11 @@ binding = linkRef.resolveBinding(); assertTrue("Wrong kind of binding", binding instanceof ITypeBinding); typeBinding = (ITypeBinding)binding; - assertTrue(linkRef.toString()+" should have a generic type binding", typeBinding.isGenericType()); + // https://bugs.eclipse.org/bugs/show_bug.cgi?id=209936 + // only have RawTypeBinding in Javadocs + assertFalse(linkRef.toString()+" should NOT have a generic type binding", typeBinding.isGenericType()); assertFalse(linkRef.toString()+" should NOT have a parameterized type binding", typeBinding.isParameterizedType()); - assertFalse(linkRef.toString()+" should NOT have a raw type binding", typeBinding.isRawType()); + assertTrue(linkRef.toString()+" should have a raw type binding", typeBinding.isRawType()); } }