@@ -425,11 +425,33 @@ public static Class<?> compileAndLoad(
425425 String compilerOutputDir = "/tmp/" + CapturedSnapshotTest .class .getSimpleName () + "-kotlin" ;
426426 args .setDestination (compilerOutputDir );
427427 args .setClasspath (System .getProperty ("java.class.path" ));
428- ExitCode exitCode =
429- compiler .exec (
430- new PrintingMessageCollector (System .out , MessageRenderer .WITHOUT_PATHS , true ),
431- Services .EMPTY ,
432- args );
428+ // Temporarily patch `java.version` for Java 26-ea compatibility.
429+ // We are using the following early access version of Java 26:
430+ // https://hub.docker.com/layers/library/openjdk/26-ea-jdk-bookworm/images/sha256-d8323bd0ab1a5c12e93a46fcc6b9817d25e5a6a3cbd9505b8d57d13eea9d18e2
431+ // TODO: Fix for Java 26. Revert change once GA version of Java 26 is released (Mar 2026).
432+ // ExitCode exitCode =
433+ // compiler.exec(
434+ // new PrintingMessageCollector(System.out, MessageRenderer.WITHOUT_PATHS, true),
435+ // Services.EMPTY,
436+ // args);
437+ String originalJavaVersion = System .getProperty ("java.version" );
438+ boolean overrideEAJavaVersion =
439+ originalJavaVersion != null && originalJavaVersion .contains ("-ea" );
440+ ExitCode exitCode ;
441+ try {
442+ if (overrideEAJavaVersion ) {
443+ System .setProperty ("java.version" , "25" );
444+ }
445+ exitCode =
446+ compiler .exec (
447+ new PrintingMessageCollector (System .out , MessageRenderer .WITHOUT_PATHS , true ),
448+ Services .EMPTY ,
449+ args );
450+ } finally {
451+ if (overrideEAJavaVersion ) {
452+ System .setProperty ("java.version" , originalJavaVersion );
453+ }
454+ }
433455
434456 if (exitCode .getCode () != 0 ) {
435457 throw new RuntimeException ("Kotlin compilation failed" );
0 commit comments