From 6cd73c9a64705139aa9e73d2033983d11fea688e Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Thu, 30 Apr 2026 16:14:13 +0200 Subject: [PATCH 1/2] Pick Gradle distribution based on client JVM version The Tooling API daemon defaults to the same JVM as the client, so the hardcoded 8.12 fallback fails on Java 24+ and Java 25+. Map the running Java version to the lowest Gradle distribution that can host its daemon (8.12 for <=23, 8.14.3 for 24, 9.1.0 for 25+) instead. --- .../toolingapi/OpenRewriteModelBuilder.java | 33 ++++++++++++- .../OpenRewriteModelBuilderTest.java | 48 +++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 rewrite-gradle-tooling-model/model/src/test/java/org/openrewrite/gradle/toolingapi/OpenRewriteModelBuilderTest.java diff --git a/rewrite-gradle-tooling-model/model/src/main/java/org/openrewrite/gradle/toolingapi/OpenRewriteModelBuilder.java b/rewrite-gradle-tooling-model/model/src/main/java/org/openrewrite/gradle/toolingapi/OpenRewriteModelBuilder.java index 8ebe672772d..766755b1d2b 100644 --- a/rewrite-gradle-tooling-model/model/src/main/java/org/openrewrite/gradle/toolingapi/OpenRewriteModelBuilder.java +++ b/rewrite-gradle-tooling-model/model/src/main/java/org/openrewrite/gradle/toolingapi/OpenRewriteModelBuilder.java @@ -82,7 +82,7 @@ public static OpenRewriteModel forProjectDirectory(File projectDir, @Nullable Fi } else if (Files.exists(projectDir.toPath().resolve("gradle/wrapper/gradle-wrapper.properties"))) { connector.useBuildDistribution(); } else { - connector.useGradleVersion("8.12"); + connector.useGradleVersion(defaultGradleVersion()); } connector // Uncomment to hit breakpoints inside OpenRewriteModelBuilder in unit tests @@ -132,6 +132,37 @@ public static OpenRewriteModel forProjectDirectory(File projectDir, @Nullable Fi } } + /** + * Pick a Gradle distribution compatible with the JVM running the Tooling API client. + * The daemon defaults to the same JVM as the client, so the chosen distribution must support that Java version. + * See Gradle compatibility matrix. + */ + static String defaultGradleVersion() { + return defaultGradleVersion(javaSpecificationVersion()); + } + + static String defaultGradleVersion(int javaFeatureVersion) { + if (javaFeatureVersion >= 25) { + return "9.1.0"; + } + if (javaFeatureVersion >= 24) { + return "8.14.3"; + } + return "8.12"; + } + + private static int javaSpecificationVersion() { + String version = System.getProperty("java.specification.version", "8"); + if (version.startsWith("1.")) { + version = version.substring(2); + } + try { + return Integer.parseInt(version); + } catch (NumberFormatException e) { + return 8; + } + } + /** * Everywhere except within openrewrite/rewrite itself the plugin will be resolved from some artifact repository * But within openrewrite/rewrite it comes from a build directory. diff --git a/rewrite-gradle-tooling-model/model/src/test/java/org/openrewrite/gradle/toolingapi/OpenRewriteModelBuilderTest.java b/rewrite-gradle-tooling-model/model/src/test/java/org/openrewrite/gradle/toolingapi/OpenRewriteModelBuilderTest.java new file mode 100644 index 00000000000..a392774fe63 --- /dev/null +++ b/rewrite-gradle-tooling-model/model/src/test/java/org/openrewrite/gradle/toolingapi/OpenRewriteModelBuilderTest.java @@ -0,0 +1,48 @@ +/* + * Copyright 2026 the original author or authors. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * https://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openrewrite.gradle.toolingapi; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class OpenRewriteModelBuilderTest { + + @Test + void java8FallsBackToBaselineDistribution() { + assertThat(OpenRewriteModelBuilder.defaultGradleVersion(8)).isEqualTo("8.12"); + } + + @Test + void java23StaysOnBaselineDistribution() { + assertThat(OpenRewriteModelBuilder.defaultGradleVersion(23)).isEqualTo("8.12"); + } + + @Test + void java24RequiresGradle814() { + assertThat(OpenRewriteModelBuilder.defaultGradleVersion(24)).isEqualTo("8.14.3"); + } + + @Test + void java25RequiresGradle91() { + assertThat(OpenRewriteModelBuilder.defaultGradleVersion(25)).isEqualTo("9.1.0"); + } + + @Test + void futureJavaVersionsResolveToLatestKnownDistribution() { + assertThat(OpenRewriteModelBuilder.defaultGradleVersion(99)).isEqualTo("9.1.0"); + } +} From e0e59ae7f78284c0ff73ef1cea197256f4e4e525 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Thu, 30 Apr 2026 16:17:13 +0200 Subject: [PATCH 2/2] Apply review: collapse = 25) { return "9.1.0"; } - if (javaFeatureVersion >= 24) { - return "8.14.3"; - } - return "8.12"; + return "8.14.3"; } private static int javaSpecificationVersion() { diff --git a/rewrite-gradle-tooling-model/model/src/test/java/org/openrewrite/gradle/toolingapi/OpenRewriteModelBuilderTest.java b/rewrite-gradle-tooling-model/model/src/test/java/org/openrewrite/gradle/toolingapi/OpenRewriteModelBuilderTest.java index a392774fe63..9659a60609a 100644 --- a/rewrite-gradle-tooling-model/model/src/test/java/org/openrewrite/gradle/toolingapi/OpenRewriteModelBuilderTest.java +++ b/rewrite-gradle-tooling-model/model/src/test/java/org/openrewrite/gradle/toolingapi/OpenRewriteModelBuilderTest.java @@ -22,17 +22,12 @@ class OpenRewriteModelBuilderTest { @Test - void java8FallsBackToBaselineDistribution() { - assertThat(OpenRewriteModelBuilder.defaultGradleVersion(8)).isEqualTo("8.12"); + void java8UsesGradle814() { + assertThat(OpenRewriteModelBuilder.defaultGradleVersion(8)).isEqualTo("8.14.3"); } @Test - void java23StaysOnBaselineDistribution() { - assertThat(OpenRewriteModelBuilder.defaultGradleVersion(23)).isEqualTo("8.12"); - } - - @Test - void java24RequiresGradle814() { + void java24UsesGradle814() { assertThat(OpenRewriteModelBuilder.defaultGradleVersion(24)).isEqualTo("8.14.3"); }