Community
Participate
Working Groups
I20060215-0010 (aka almost 3.2 M5) The following code fragment raises a ClassCastException: public class X { class X1<T> { public static Class clazz = T.getClass(); } class X2<T> { } class X3<T> extends X2<T.clazz> { } } While this code is not correct, it shouldn't break the compiler. (Note: javac breaks also, but differently - see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6359951.) Prepared GenericTypeTest#_test912 for inclusion. Stack trace: Severity Path Resource Description Location Creation Time Id Error MDLCrap X.java Internal compiler error java.lang.ClassCastException: org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding at org.eclipse.jdt.internal.compiler.lookup.Scope.findMemberType(Scope.java:1005) at org.eclipse.jdt.internal.compiler.lookup.Scope.getMemberType(Scope.java:2160) at org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference.findNextTypeBinding(QualifiedTypeReference.java:41) at org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference.getTypeBinding(QualifiedTypeReference.java:70) at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:150) at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveTypeArgument(TypeReference.java:173) at org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference.internalResolveType(ParameterizedSingleTypeReference.java:135) at org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference.resolveType(ParameterizedSingleTypeReference.java:209) at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType(TypeReference.java:107) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype(ClassScope.java:1092) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass(ClassScope.java:752) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy(ClassScope.java:932) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectMemberTypes(ClassScope.java:720) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy(ClassScope.java:939) at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierarchy(CompilationUnitScope.java:279) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:195) at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:420) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:434) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:287) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:229) at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:112) at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:225) at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:153) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:593) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:168) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:202) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:231) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:234) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:253) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:282) at org.eclipse.core.internal.resources.Workspace.build(Workspace.java:271) at org.eclipse.ui.actions.GlobalBuildAction$1.run(GlobalBuildAction.java:182) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58) line 0 17 février 2006 16:34:08 250251
Realesed test as GenericTypeTest#_test917.
Offending line is: ((SourceTypeBinding) currentType).scope.connectTypeHierarchy(); where currentType is a TypeVariableBinding, which isn't yet connected to superclass/superinterfaces.
*** Bug 130257 has been marked as a duplicate of this bug. ***
With javac 1.6.0-beta2, they now report the error against T.clazz: cannot select from a type variable class X3<T> extends X2<T.clazz> { }
Enabled GenericTypeTest 917
Mike - yet another minor API addition as a new problem (which we did miss in the past) needs to be reported. Addition is: IProblem#IllegalAccessFromTypeVariable +1 from me for non-breaking API addition.
Seems reasonable to me too. +1.
Verified for 3.2RC1 with build I20060413-1718