Bug 149376 - Internal compiler error on "import static"
Summary: Internal compiler error on "import static"
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.2   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.2.1   Edit
Assignee: Kent Johnson CLA
QA Contact:
URL:
Whiteboard:
Keywords:
: 151410 152202 (view as bug list)
Depends on:
Blocks:
 
Reported: 2006-07-01 14:27 EDT by Paul H. van Rossem CLA
Modified: 2006-09-12 04:54 EDT (History)
5 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Paul H. van Rossem CLA 2006-07-01 14:27:24 EDT
The following class causes an internal compiler error to be thrown if this is the only source file in a Java project.
Does not occur on 3.1.*.


package nl.timeware;
import static nl.timeware.SomeClass.SomeEnum.*;
abstract public class SomeClass<T> extends Object 
{  public enum SomeEnum 
   { A; };
}

Internal compiler error java.lang.ClassCastException: 
 org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding at 
 org.eclipse.jdt.internal.compiler.lookup.Scope.findMemberType(Scope.java:961) at 
 org.eclipse.jdt.internal.compiler.lookup.Scope.getTypeOrPackage(Scope.java:2359) at 
 org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2080) at 
 org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding
 (SingleTypeReference.java:44) at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType
 (TypeReference.java:153) at 
 org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType(TypeReference.java:110) 
 at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype(ClassScope.java:1084) at 
 org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass(ClassScope.java:804) at 
 org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy(ClassScope.java:929) 
 at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierarchy
 (CompilationUnitScope.java:288) at 
 org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings
 (LookupEnvironment.java:198) at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile
 (Compiler.java:383) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:397) at 
 org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:300) 
 at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:217) at 
 org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:237) 
 at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:56) at 
 org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:249) at 
 org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:174) at 
 org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:603) at 
 org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at 
 org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:167) at 
 org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:201) at 
 org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:230) at 
 org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at 
 org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:233) at 
 org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:252) at 
 org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:285) at 
 org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:145) at 
 org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:208) at 
 org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)
Comment 1 Kent Johnson CLA 2006-07-05 13:21:40 EDT
Another interesting case along the same lines:

package p2;
import static p2.SomeClass.SomeMember.*;
abstract class SomeClass<T> extends M {
	static class SomeMember {
		static class M {}
	}
}
Comment 2 Kent Johnson CLA 2006-07-06 11:23:35 EDT
Released in HEAD for 3.3 M1

Added GenericTypeTest #1021
Comment 3 Frederic Fusier CLA 2006-08-03 13:40:48 EDT
*** Bug 151410 has been marked as a duplicate of this bug. ***
Comment 4 Frederic Fusier CLA 2006-08-03 13:42:46 EDT
Philippe,
I've released the fix in R3_2_maintenance as it was really annoying for some 3.2 users (see blocker bug 151410).
Comment 5 Frederic Fusier CLA 2006-08-03 13:43:21 EDT
Added GenericTypeTest#1021c
Comment 6 Frederic Fusier CLA 2006-08-03 13:45:12 EDT
*** Bug 152202 has been marked as a duplicate of this bug. ***
Comment 7 Frederic Fusier CLA 2006-08-07 11:33:54 EDT
Verified for 3.3 M1 using build I20060807-0010.
Comment 8 Frederic Fusier CLA 2006-09-06 05:13:11 EDT
Released for 3.2.1
Comment 9 Philipe Mulet CLA 2006-09-06 05:56:37 EDT
Why isn't the fix simply to implement #isHierarchyBeingConnected() on ParameterizedTypeBinding to do:

	public boolean isHierarchyBeingConnected() {
		return this.type.isHierarchyBeingConnected();
	}

This would address all references to #isHierarchyBeingConnected()
Comment 10 Frederic Fusier CLA 2006-09-06 06:25:54 EDT
Note that fix is a change done in Scope.findMemberType(char[], ReferenceBinding). To see it, compare Scope.java version 1.279.2.2 (v_672_R32x) and 1.279.2.3 (v_673_R32x)...
Comment 11 Kent Johnson CLA 2006-09-06 10:44:31 EDT
There are only 2 other references to #isHierarchyBeingConnected() and neither can be to a ParameterizedType so it won't make a difference.

And its not the call to isHierarchyBeingConnected() that is affected by the change, its the cast to the SourceTypeBinding on the next line that cannot take the currentType.
Comment 12 Philipe Mulet CLA 2006-09-06 12:03:01 EDT
Ok, good then. 
Comment 13 Maxime Daniel CLA 2006-09-12 04:54:23 EDT
Verified for 3.2.1 using build M20060908-1655.