Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipe Mulet2007-04-24 14:46:20 +0000
committerPhilipe Mulet2007-04-24 14:46:20 +0000
commit38311398693fa0327a0fbfe24cb734925a9078fe (patch)
treed4ce175ed25517749f30bc314f9aba01a68a295c
parentecb79f12b442b6539de95a5327cc7dda830a5076 (diff)
downloadeclipse.jdt.core-38311398693fa0327a0fbfe24cb734925a9078fe.tar.gz
eclipse.jdt.core-38311398693fa0327a0fbfe24cb734925a9078fe.tar.xz
eclipse.jdt.core-38311398693fa0327a0fbfe24cb734925a9078fe.zip
183216
-rw-r--r--org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java224
-rw-r--r--org.eclipse.jdt.core/buildnotes_jdt-core.html4
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java13
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java13
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);

Back to the top