[Switch][Record Patterns] Unchecked conversion error missing from ECJ #3069
+146
−79
Jenkins - Eclipse JDT / Tests / Build
failed
Oct 19, 2024 in 0s
org.eclipse.jdt.core.tests.compiler.regression.SwitchPatternTest22.testIssue3109 - 23 failed
Send us feedback
Details
org.eclipse.jdt.core.tests.compiler.regression.SwitchPatternTest22.testIssue3109 - 23
Unexpected failure.
----------- Expected ------------
------------ but was ------------
----------\n
1. ERROR in Maybe.java (at line 16)\n
case Some(T value) when predicate.test(value) -> this; // unsupported line with 4 errors\n
^^^^^^^\n
Type Object cannot be safely cast to T\n
----------\n
---------------------- ----------
expected:<[]> but was:<[----------\n
1. ERROR in Maybe.java (at line 16)\n
case Some(T value) when predicate.test(value) -> this; // unsupported line with 4 errors\n
^^^^^^^\n
Type Object cannot be safely cast to T\n
----------\n
]>
Stack trace
junit.framework.ComparisonFailure:
Unexpected failure.
----------- Expected ------------
------------ but was ------------
----------\n
1. ERROR in Maybe.java (at line 16)\n
case Some(T value) when predicate.test(value) -> this; // unsupported line with 4 errors\n
^^^^^^^\n
Type Object cannot be safely cast to T\n
----------\n
---------------------- ----------
expected:<[]> but was:<[----------\n
1. ERROR in Maybe.java (at line 16)\n
case Some(T value) when predicate.test(value) -> this; // unsupported line with 4 errors\n
^^^^^^^\n
Type Object cannot be safely cast to T\n
----------\n
]>
at org.eclipse.jdt.core.tests.junit.extension.TestCase.assertStringEquals(TestCase.java:265)
at org.eclipse.jdt.core.tests.junit.extension.TestCase.assertEquals(TestCase.java:240)
at org.eclipse.jdt.core.tests.compiler.regression.AbstractRegressionTest.runTest(AbstractRegressionTest.java:3586)
at org.eclipse.jdt.core.tests.compiler.regression.AbstractRegressionTest.runTest(AbstractRegressionTest.java:3276)
at org.eclipse.jdt.core.tests.compiler.regression.AbstractRegressionTest.runConformTest(AbstractRegressionTest.java:2091)
at org.eclipse.jdt.core.tests.compiler.regression.SwitchPatternTest22.runConformTest(SwitchPatternTest22.java:40)
at org.eclipse.jdt.core.tests.compiler.regression.SwitchPatternTest22.testIssue3109(SwitchPatternTest22.java:963)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at junit.framework.TestCase.runTest(TestCase.java:177)
at org.eclipse.jdt.core.tests.junit.extension.TestCase.runTest(TestCase.java:970)
at junit.framework.TestCase.runBare(TestCase.java:142)
at junit.framework.TestResult$1.protect(TestResult.java:122)
at junit.framework.TestResult.runProtected(TestResult.java:142)
at junit.framework.TestResult.run(TestResult.java:125)
at junit.framework.TestCase.run(TestCase.java:130)
at junit.framework.TestSuite.runTest(TestSuite.java:241)
at junit.framework.TestSuite.run(TestSuite.java:236)
at junit.framework.TestSuite.runTest(TestSuite.java:241)
at junit.framework.TestSuite.run(TestSuite.java:236)
at org.eclipse.jdt.core.tests.util.CompilerTestSetup.run(CompilerTestSetup.java:57)
at junit.framework.TestSuite.runTest(TestSuite.java:241)
at junit.framework.TestSuite.run(TestSuite.java:236)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:90)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:316)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:240)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:214)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:155)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.apache.maven.surefire.api.util.ReflectionUtils.invokeMethodWithArray2(ReflectionUtils.java:137)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:148)
at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:88)
at org.eclipse.tycho.surefire.osgibooter.OsgiSurefireBooter.run(OsgiSurefireBooter.java:140)
at org.eclipse.tycho.surefire.osgibooter.HeadlessTestApplication.start(HeadlessTestApplication.java:29)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:143)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:109)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:439)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:271)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:668)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:605)
at org.eclipse.equinox.launcher.Main.run(Main.java:1481)
at org.eclipse.equinox.launcher.Main.main(Main.java:1454)
Standard out
org.eclipse.jdt.core.tests.compiler.regression.SwitchPatternTest22.testIssue3109 - 23
org.eclipse.jdt.core.tests.compiler.regression.SwitchPatternTest22#testIssue3109 - 23
Maybe.java [
import java.util.function.Function;
import java.util.function.Predicate;
public sealed interface Maybe<T> {
static <T> Maybe<T> of(T value) {
return new Some<>(value);
}
static <T> Maybe<T> empty() {
return new None<>();
}
default Maybe<T> filter(Predicate<T> predicate){
return switch (this) {
case Some(T value) when predicate.test(value) -> this; // unsupported line with 4 errors
case Some(_), None<T> _ -> empty();
};
}
default Maybe<T> filter2(Predicate<T> predicate){
return switch (this) {
case Some(_), None<T> _ -> empty(); //also unsupported with 1 error
};
}
record Some<T>(T value) implements Maybe<T> {}
record None<T>() implements Maybe<T>{}
}
]
Copy-paste compiler log:
"----------\n" +
"1. ERROR in Maybe.java (at line 16)\n" +
" case Some(T value) when predicate.test(value) -> this; // unsupported line with 4 errors\n" +
" ^^^^^^^\n" +
"Type Object cannot be safely cast to T\n" +
"----------\n"
Loading