Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 64743 Details for
Bug 183216
[1.5][compiler] Cannot refer to a generic member type using a non static subclass of the enclosing type
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Proposed patch for 3.2.2
183216-r32x.txt (text/plain), 12.87 KB, created by
Philipe Mulet
on 2007-04-24 10:40:15 EDT
(
hide
)
Description:
Proposed patch for 3.2.2
Filename:
MIME Type:
Creator:
Philipe Mulet
Created:
2007-04-24 10:40:15 EDT
Size:
12.87 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core >Index: compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java,v >retrieving revision 1.32 >diff -u -r1.32 ParameterizedSingleTypeReference.java >--- compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java 28 Mar 2006 20:29:56 -0000 1.32 >+++ compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java 24 Apr 2007 11:53:13 -0000 >@@ -109,7 +109,7 @@ > : 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 @@ > } 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); >Index: compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java,v >retrieving revision 1.35.4.3 >diff -u -r1.35.4.3 ParameterizedQualifiedTypeReference.java >--- compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java 6 Oct 2006 09:17:11 -0000 1.35.4.3 >+++ compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java 24 Apr 2007 11:53:13 -0000 >@@ -188,10 +188,13 @@ > 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 @@ > : currentType; > } > } >+ this.resolvedType = qualifiedType; > } >- this.resolvedType = qualifiedType; > if (isTypeUseDeprecated(this.resolvedType, scope)) > reportDeprecatedType(scope); > // array type ? >#P org.eclipse.jdt.core.tests.compiler >Index: src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java,v >retrieving revision 1.494.2.22 >diff -u -r1.494.2.22 GenericTypeTest.java >--- src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java 15 Mar 2007 17:50:54 -0000 1.494.2.22 >+++ src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java 24 Apr 2007 11:53:23 -0000 >@@ -33089,5 +33089,229 @@ > 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"); >+} > > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 183216
:
64713
|
64742
| 64743