diff options
author | Philipe Mulet | 2007-04-24 14:46:20 +0000 |
---|---|---|
committer | Philipe Mulet | 2007-04-24 14:46:20 +0000 |
commit | 38311398693fa0327a0fbfe24cb734925a9078fe (patch) | |
tree | d4ce175ed25517749f30bc314f9aba01a68a295c | |
parent | ecb79f12b442b6539de95a5327cc7dda830a5076 (diff) | |
download | eclipse.jdt.core-38311398693fa0327a0fbfe24cb734925a9078fe.tar.gz eclipse.jdt.core-38311398693fa0327a0fbfe24cb734925a9078fe.tar.xz eclipse.jdt.core-38311398693fa0327a0fbfe24cb734925a9078fe.zip |
183216
4 files changed, 243 insertions, 11 deletions
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java index ee06593f98..e2cc02b39c 100644 --- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java @@ -33089,5 +33089,229 @@ public void test1117() { assertTrue(false); } } +//https://bugs.eclipse.org/bugs/show_bug.cgi?id=183216 +public void test1125() { + this.runNegativeTest( + new String[] { + "X.java", + "class A {\n" + + " class B<T> {\n" + + " T t;\n" + + " T getValue() {\n" + + " return t;\n" + + " }\n" + + " }\n" + + "}\n" + + "\n" + + "class C<T> extends A {\n" + + " Zork z;\n" + + "}\n" + + "\n" + + "public class X {\n" + + " static C.B<Double> c = new C().new B<Double>();\n" + + "\n" + + " public static void main(String[] args) {\n" + + " C.B<String> temp = new C().new B<String>();\n" + + " String s = temp.getValue();\n" + + " System.out.println(s);\n" + + " foo(bar());\n" + + " }\n" + + "\n" + + " static C.B<? extends Number> bar() {\n" + + " return new C().new B<Integer>();\n" + + " }\n" + + "\n" + + " static void foo(C.B<?> arg) {\n" + + " Object o = arg.getValue();\n" + + " Double d = c.getValue();\n" + + " System.out.println(o);\n" + + " System.out.println(d);\n" + + " }\n" + + "}\n", // ================= + }, + "----------\n" + + "1. ERROR in X.java (at line 11)\n" + + " Zork z;\n" + + " ^^^^\n" + + "Zork cannot be resolved to a type\n" + + "----------\n" + + "2. WARNING in X.java (at line 15)\n" + + " static C.B<Double> c = new C().new B<Double>();\n" + + " ^\n" + + "C is a raw type. References to generic type C<T> should be parameterized\n" + + "----------\n" + + "3. WARNING in X.java (at line 18)\n" + + " C.B<String> temp = new C().new B<String>();\n" + + " ^\n" + + "C is a raw type. References to generic type C<T> should be parameterized\n" + + "----------\n" + + "4. WARNING in X.java (at line 25)\n" + + " return new C().new B<Integer>();\n" + + " ^\n" + + "C is a raw type. References to generic type C<T> should be parameterized\n" + + "----------\n"); +} +//https://bugs.eclipse.org/bugs/show_bug.cgi?id=183216 - variation +public void test1126() { + this.runConformTest( + new String[] { + "X.java", + "class A {\n" + + " class B<T> {\n" + + " T t;\n" + + " T getValue() {\n" + + " return t;\n" + + " }\n" + + " }\n" + + "}\n" + + "\n" + + "public class X {\n" + + " static A.B<Double> c = new A().new B<Double>();\n" + + "\n" + + " public static void main(String[] args) {\n" + + " A.B<String> temp = new A().new B<String>();\n" + + " String s = temp.getValue();\n" + + " System.out.print(s);\n" + + " foo(bar());\n" + + " }\n" + + "\n" + + " static A.B<? extends Number> bar() {\n" + + " return new A().new B<Integer>();\n" + + " }\n" + + "\n" + + " static void foo(A.B<?> arg) {\n" + + " Object o = arg.getValue();\n" + + " Double d = c.getValue();\n" + + " System.out.print(o);\n" + + " System.out.print(d);\n" + + " }\n" + + "}\n", // ================= + }, + "nullnullnull"); +} +//https://bugs.eclipse.org/bugs/show_bug.cgi?id=183216 - variation +public void test1127() { + this.runNegativeTest( + new String[] { + "X.java", + "class A<E> {\n" + + " class B<T> {\n" + + " T t;\n" + + " T getValue() {\n" + + " return t;\n" + + " }\n" + + " }\n" + + "}\n" + + "\n" + + "class C<T> extends A<T> {\n" + + "}\n" + + "\n" + + "public class X {\n" + + " static C.B<Double> c = new C().new B<Double>();\n" + + "\n" + + " public static void main(String[] args) {\n" + + " C.B<String> temp = new C().new B<String>();\n" + + " String s = temp.getValue();\n" + + " System.out.println(s);\n" + + " foo(bar());\n" + + " }\n" + + "\n" + + " static C.B<? extends Number> bar() {\n" + + " return new C().new B<Integer>();\n" + + " }\n" + + "\n" + + " static void foo(C.B<?> arg) {\n" + + " Object o = arg.getValue();\n" + + " Double d = c.getValue();\n" + + " System.out.println(o);\n" + + " System.out.println(d);\n" + + " }\n" + + "}\n", // ================= + }, + "----------\n" + + "1. ERROR in X.java (at line 14)\n" + + " static C.B<Double> c = new C().new B<Double>();\n" + + " ^^^\n" + + "The member type A.B<Double> must be qualified with a parameterized type, since it is not static\n" + + "----------\n" + + "2. WARNING in X.java (at line 14)\n" + + " static C.B<Double> c = new C().new B<Double>();\n" + + " ^\n" + + "C is a raw type. References to generic type C<T> should be parameterized\n" + + "----------\n" + + "3. ERROR in X.java (at line 14)\n" + + " static C.B<Double> c = new C().new B<Double>();\n" + + " ^\n" + + "The member type A.B<Double> must be qualified with a parameterized type, since it is not static\n" + + "----------\n" + + "4. ERROR in X.java (at line 17)\n" + + " C.B<String> temp = new C().new B<String>();\n" + + " ^^^\n" + + "The member type A.B<String> must be qualified with a parameterized type, since it is not static\n" + + "----------\n" + + "5. WARNING in X.java (at line 17)\n" + + " C.B<String> temp = new C().new B<String>();\n" + + " ^\n" + + "C is a raw type. References to generic type C<T> should be parameterized\n" + + "----------\n" + + "6. ERROR in X.java (at line 17)\n" + + " C.B<String> temp = new C().new B<String>();\n" + + " ^\n" + + "The member type A.B<String> must be qualified with a parameterized type, since it is not static\n" + + "----------\n" + + "7. ERROR in X.java (at line 23)\n" + + " static C.B<? extends Number> bar() {\n" + + " ^^^\n" + + "The member type A.B<? extends Number> must be qualified with a parameterized type, since it is not static\n" + + "----------\n" + + "8. WARNING in X.java (at line 24)\n" + + " return new C().new B<Integer>();\n" + + " ^\n" + + "C is a raw type. References to generic type C<T> should be parameterized\n" + + "----------\n" + + "9. ERROR in X.java (at line 24)\n" + + " return new C().new B<Integer>();\n" + + " ^\n" + + "The member type A.B<Integer> must be qualified with a parameterized type, since it is not static\n" + + "----------\n" + + "10. ERROR in X.java (at line 27)\n" + + " static void foo(C.B<?> arg) {\n" + + " ^^^\n" + + "The member type A.B<?> must be qualified with a parameterized type, since it is not static\n" + + "----------\n"); +} +//https://bugs.eclipse.org/bugs/show_bug.cgi?id=183216 - variation +public void test1128() { + this.runNegativeTest( + new String[] { + "X.java", + "class A<T> {\n" + + " class Member<U> {}\n" + + "}\n" + + "\n" + + "public class X extends A {\n" + + " void foo() {\n" + + " new Member<String>();\n" + + " new X().new Member<String>();\n" + + " }\n" + + "}\n", // ================= + }, + "----------\n" + + "1. WARNING in X.java (at line 5)\n" + + " public class X extends A {\n" + + " ^\n" + + "A is a raw type. References to generic type A<T> should be parameterized\n" + + "----------\n" + + "2. ERROR in X.java (at line 7)\n" + + " new Member<String>();\n" + + " ^^^^^^\n" + + "The member type A.Member<String> must be qualified with a parameterized type, since it is not static\n" + + "----------\n" + + "3. ERROR in X.java (at line 8)\n" + + " new X().new Member<String>();\n" + + " ^^^^^^\n" + + "The member type A.Member<String> must be qualified with a parameterized type, since it is not static\n" + + "----------\n"); +} } diff --git a/org.eclipse.jdt.core/buildnotes_jdt-core.html b/org.eclipse.jdt.core/buildnotes_jdt-core.html index 04927120e4..5a621e8708 100644 --- a/org.eclipse.jdt.core/buildnotes_jdt-core.html +++ b/org.eclipse.jdt.core/buildnotes_jdt-core.html @@ -81,7 +81,9 @@ Eclipse SDK 3.2.2 - 25th January 2007 <h2>What's new in this drop</h2> <h3>Problem Reports Fixed</h3> -<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171653">171653</a> +<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183216">183216</a> +[1.5][compiler] Cannot refer to a generic member type using a non static subclass of the enclosing type +<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171653">171653</a> Java Tooling initialization performance issue after startup <br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173279">173279</a> [indexing] Category table is not cached for rt.jar since 1.5 version diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java index de214df29b..a8819aac7b 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java @@ -188,10 +188,13 @@ public class ParameterizedQualifiedTypeReference extends ArrayQualifiedTypeRefer return null; } // check parameterizing non-static member type of raw type - if (typeIsConsistent && !currentType.isStatic() && qualifiedType != null && qualifiedType.isRawType()) { - scope.problemReporter().rawMemberTypeCannotBeParameterized( - this, scope.environment().createRawType((ReferenceBinding)currentType.erasure(), qualifiedType), argTypes); - typeIsConsistent = false; + if (typeIsConsistent && !currentType.isStatic()) { + ReferenceBinding actualEnclosing = currentType.enclosingType(); + if (actualEnclosing != null && actualEnclosing.isRawType()) { + scope.problemReporter().rawMemberTypeCannotBeParameterized( + this, scope.environment().createRawType((ReferenceBinding)currentType.erasure(), actualEnclosing), argTypes); + typeIsConsistent = false; + } } ParameterizedTypeBinding parameterizedType = scope.environment().createParameterizedType((ReferenceBinding)currentType.erasure(), argTypes, qualifiedType); // check argument type compatibility @@ -215,8 +218,8 @@ public class ParameterizedQualifiedTypeReference extends ArrayQualifiedTypeRefer : currentType; } } + this.resolvedType = qualifiedType; } - this.resolvedType = qualifiedType; if (isTypeUseDeprecated(this.resolvedType, scope)) reportDeprecatedType(scope); // array type ? diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java index 2d4b45088a..9cf4b9fda2 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java @@ -109,7 +109,7 @@ public class ParameterizedSingleTypeReference extends ArrayTypeReference { : scope.environment().convertToParameterizedType(enclosingType); } } else { // resolving member type (relatively to enclosingType) - this.resolvedType = scope.getMemberType(token, (ReferenceBinding)enclosingType.erasure()); + this.resolvedType = scope.getMemberType(token, enclosingType); if (!this.resolvedType.isValidBinding()) { scope.problemReporter().invalidEnclosingType(this, this.resolvedType, enclosingType); return null; @@ -154,10 +154,13 @@ public class ParameterizedSingleTypeReference extends ArrayTypeReference { } else if (argLength != typeVariables.length) { // check arity scope.problemReporter().incorrectArityForParameterizedType(this, currentType, argTypes); return null; - } else if (!currentType.isStatic() && enclosingType != null && enclosingType.isRawType()){ - scope.problemReporter().rawMemberTypeCannotBeParameterized( - this, scope.environment().createRawType((ReferenceBinding)currentType.erasure(), enclosingType), argTypes); - return null; + } else if (!currentType.isStatic()) { + ReferenceBinding actualEnclosing = currentType.enclosingType(); + if (actualEnclosing != null && actualEnclosing.isRawType()){ + scope.problemReporter().rawMemberTypeCannotBeParameterized( + this, scope.environment().createRawType((ReferenceBinding)currentType.erasure(), actualEnclosing), argTypes); + return null; + } } ParameterizedTypeBinding parameterizedType = scope.environment().createParameterizedType((ReferenceBinding)currentType.erasure(), argTypes, enclosingType); |