Bug 128423 - [1.5][compiler] ClassCastException on illegal code fragment
Summary: [1.5][compiler] ClassCastException on illegal code fragment
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.2   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: 3.2 RC1   Edit
Assignee: Kent Johnson CLA
QA Contact:
URL:
Whiteboard:
Keywords: api
: 130257 (view as bug list)
Depends on:
Blocks:
 
Reported: 2006-02-17 10:34 EST by Maxime Daniel CLA
Modified: 2020-01-12 16:14 EST (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Maxime Daniel CLA 2006-02-17 10:34:42 EST
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
Comment 1 Maxime Daniel CLA 2006-02-17 12:29:24 EST
Realesed test as GenericTypeTest#_test917.
Comment 2 Philipe Mulet CLA 2006-02-17 12:31:27 EST
Offending line is:
   ((SourceTypeBinding) currentType).scope.connectTypeHierarchy();

where currentType is a TypeVariableBinding, which isn't yet connected to superclass/superinterfaces.
Comment 3 Philipe Mulet CLA 2006-03-03 04:17:38 EST
*** Bug 130257 has been marked as a duplicate of this bug. ***
Comment 4 Kent Johnson CLA 2006-04-04 13:47:57 EDT
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> { }
Comment 5 Kent Johnson CLA 2006-04-04 17:24:07 EDT
Enabled GenericTypeTest 917
Comment 6 Philipe Mulet CLA 2006-04-05 05:03:12 EDT
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.
Comment 7 Mike Wilson CLA 2006-04-05 09:57:36 EDT
Seems reasonable to me too. +1.
Comment 8 David Audel CLA 2006-04-14 05:01:04 EDT
Verified for 3.2RC1 with build I20060413-1718