From 642be58d44488ca5f1a3eab05e87464f1d003b00 Mon Sep 17 00:00:00 2001 From: calm <148254234+calm329@users.noreply.github.com> Date: Tue, 20 Jan 2026 23:31:07 -0800 Subject: [PATCH] Add scripted test for #6175 (#8598) This PR adds a scripted test to prevent regression of issue #6175, where `MethodHandle.invokeExact` failed to compile on JDK 15+ when using `-release 11`. Changes: - Added `sbt-app/src/sbt-test/java/method-handle-release/` scripted test - Test uses Scala 2.13.16 with `-release:11` to reproduce the original issue scenario - Verifies that polymorphic signature methods compile correctly under cross-version targeting --- .../java/method-handle-release/build.sbt | 2 ++ .../src/main/scala/Main.scala | 19 +++++++++++++++++++ .../sbt-test/java/method-handle-release/test | 3 +++ 3 files changed, 24 insertions(+) create mode 100644 sbt-app/src/sbt-test/java/method-handle-release/build.sbt create mode 100644 sbt-app/src/sbt-test/java/method-handle-release/src/main/scala/Main.scala create mode 100644 sbt-app/src/sbt-test/java/method-handle-release/test diff --git a/sbt-app/src/sbt-test/java/method-handle-release/build.sbt b/sbt-app/src/sbt-test/java/method-handle-release/build.sbt new file mode 100644 index 000000000..0cb11c5e3 --- /dev/null +++ b/sbt-app/src/sbt-test/java/method-handle-release/build.sbt @@ -0,0 +1,2 @@ +ThisBuild / scalaVersion := "2.13.16" +scalacOptions += "-release:11" diff --git a/sbt-app/src/sbt-test/java/method-handle-release/src/main/scala/Main.scala b/sbt-app/src/sbt-test/java/method-handle-release/src/main/scala/Main.scala new file mode 100644 index 000000000..8c36d7268 --- /dev/null +++ b/sbt-app/src/sbt-test/java/method-handle-release/src/main/scala/Main.scala @@ -0,0 +1,19 @@ +import java.lang.invoke.{ MethodHandle, MethodHandles } + +object Main { + case class TestClass(number: Int) + def testMethod(): TestClass = { + TestClass(10) + } + + def wrappedMethod(handle: MethodHandle): TestClass = { + handle.invokeExact() + } + + def main(args: Array[String]): Unit = { + val method = classOf[Main.type].getDeclaredMethod("testMethod") + method.setAccessible(true) + val handle = MethodHandles.lookup.unreflect(method) + println(wrappedMethod(handle)) + } +} diff --git a/sbt-app/src/sbt-test/java/method-handle-release/test b/sbt-app/src/sbt-test/java/method-handle-release/test new file mode 100644 index 000000000..c0b8da542 --- /dev/null +++ b/sbt-app/src/sbt-test/java/method-handle-release/test @@ -0,0 +1,3 @@ +# https://github.com/sbt/sbt/issues/6175 +# MethodHandle.invokeExact fails to compile on JDK 15+ when targeting Java 11 +> compile