Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Switch][Record Patterns] Unchecked conversion error missing from ECJ #3069

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

remove imprecise comment, defer to issue #3119

7e73c2b
Select commit
Loading
Failed to load commit list.
Open

[Switch][Record Patterns] Unchecked conversion error missing from ECJ #3069

remove imprecise comment, defer to issue #3119
7e73c2b
Select commit
Loading
Failed to load commit list.
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"