eclipse-jdt / eclipse-jdt/eclipse.jdt.core
Unexpected cast compile error for generic type argument
- Dominant language
- Java
- Stars
- 237
- Forks
- 195
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 47
Description
See: https://bugs.eclipse.org/bugs/show_bug.cgi?id=562230
To reproduce, paste the following snippet in Eclipse:
```
package test;
import java.util.Collections;
import java.util.List;
public class Test {
public static > String test(List in) {
List x = (List) in;
return x.get(0);
}
public static void main(String[] args) {
List list = Collections.singletonList("hello");
String string = Test.test(list);
System.out.println(string);
}
}
```
Compile and run with `javac`/`java` (OpenJDK 17), observe no errors:
```
➜ src /usr/lib/jvm/java-17-openjdk/bin/javac test/Test.java
Note: test/Test.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
```
```
➜ src /usr/lib/jvm/java-17-openjdk/bin/java test.Test
hello
```
With `ecj`/Eclipse though, observe compile error:
```
Description Resource Path Location Type
Cannot cast from List to List Test.java /TestBug562230/src/test line 9 Java Problem
```
The problem is created here:
```
"org.eclipse.jdt.internal.ui.text.JavaReconciler" #82 daemon prio=1 os_prio=0 cpu=1512.91ms elapsed=1783.09s tid=0x00007f381e1e6bb0 nid=0x1251 at breakpoint [0x00007f377cae6000]
java.lang.Thread.State: RUNNABLE
at org.eclipse.jdt.internal.compiler.problem.ProblemHandler.handle(ProblemHandler.java:130)
at org.eclipse.jdt.internal.compiler.problem.ProblemHandler.handle(ProblemHandler.java:229)
at org.eclipse.jdt.internal.compiler.problem.ProblemReporter.handle(ProblemReporter.java:2679)
at org.eclipse.jdt.internal.compiler.problem.ProblemReporter.typeCastError(ProblemReporter.java:8542)
at org.eclipse.jdt.internal.compiler.ast.CastExpression.resolveType(CastExpression.java:676)
at org.eclipse.jdt.internal.compiler.ast.LocalDeclaration.resolve(LocalDeclaration.java:390)
at org.eclipse.jdt.internal.compiler.ast.LocalDeclaration.resolve(LocalDeclaration.java:259)
at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:662)
at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:388)
at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:571)
at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1506)
at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1631)
at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:668)
at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:1069)
at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:1111)
at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:282)
at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:348)
at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:193)
at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:94)
at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:740)
at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:806)
at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1325)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:132)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:94)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:91)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:158)
at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:94)
at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:107)
at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:78)
at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:207)
```
Changing the generics type argument to `Z extends Comparable` results in no compile error with `ecj`.
Contributor guide
Assessment
This issue has not been assessed yet.