Bug 100007

Summary: [1.5][compiler] ClassCastException using array object as generic type
Product: [Eclipse Project] JDT Reporter: Mikael Nordenberg <mikael>
Component: CoreAssignee: Philipe Mulet <philippe_mulet>
Status: VERIFIED FIXED QA Contact:
Severity: blocker    
Priority: P3 CC: daniel_megert
Version: 3.1   
Target Milestone: 3.1 RC3   
Hardware: PC   
OS: Windows XP   
Whiteboard:

Description Mikael Nordenberg CLA 2005-06-14 12:37:18 EDT
The following code gives an "Internal compiler error":

public class Test {
	static interface Factory<T> {
		public <U extends T> U create(Class<U> cl);
	}
	
	static class BytesFactory implements Factory<byte[]> {
		public byte[] create(Class<byte[]> cl) {
			return null;
		}
	}
}
Comment 1 Olivier Thomann CLA 2005-06-14 14:31:32 EDT
java.lang.ClassCastException: org.eclipse.jdt.internal.compiler.lookup.ArrayBinding
	at
org.eclipse.jdt.internal.compiler.lookup.ParameterizedMethodBinding.<init>(ParameterizedMethodBinding.java:78)
	at
org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.createParameterizedMethod(ParameterizedTypeBinding.java:229)
	at
org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.methods(ParameterizedTypeBinding.java:725)
	at
org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding.unResolvedMethods(ReferenceBinding.java:982)
	at
org.eclipse.jdt.internal.compiler.lookup.MethodVerifier.computeInheritedMethods(MethodVerifier.java:465)
	at
org.eclipse.jdt.internal.compiler.lookup.MethodVerifier.computeInheritedMethods(MethodVerifier.java:352)
	at
org.eclipse.jdt.internal.compiler.lookup.MethodVerifier.verify(MethodVerifier.java:586)
	at
org.eclipse.jdt.internal.compiler.lookup.MethodVerifier15.verify(MethodVerifier15.java:397)
	at
org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.verifyMethods(SourceTypeBinding.java:1493)
	at
org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.verifyMethods(SourceTypeBinding.java:1496)
	at
org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.verifyMethods(CompilationUnitScope.java:718)
	at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:501)
	at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:329)
	at org.eclipse.jdt.internal.compiler.batch.Main.performCompilation(Main.java:2691)
	at org.eclipse.jdt.internal.compiler.batch.Main.compile(Main.java:1151)
	at org.eclipse.jdt.internal.compiler.batch.Main.compile(Main.java:1048)
	at org.eclipse.jdt.internal.compiler.batch.Main.compile(Main.java:1040)
	at org.eclipse.jdt.core.tools.compiler.Compile.main(Compile.java:19)
Comment 2 Philipe Mulet CLA 2005-06-15 04:47:35 EDT
Added GenericTypeTest#test748.

When creating generic method for parameterized type (Factory<byte[]>) we did not
properly handle arrays when recreating type variable formal bounds.
Fix is similar to what we do already have in other places.

+1 for RC3

Dani - pls cast your vote.
Comment 3 Dani Megert CLA 2005-06-15 04:57:47 EDT
+1 for 3.1 RC3
Comment 4 Philipe Mulet CLA 2005-06-15 05:33:28 EDT
Fixed
Comment 5 Olivier Thomann CLA 2005-06-16 14:26:01 EDT
Verified using N20050616-0010 + JDT/Core HEAD