From 93edad8300b7d48069903eb09cfb03f9e3c2f92f Mon Sep 17 00:00:00 2001 From: tinder-ryantrontz Date: Fri, 6 Mar 2026 10:59:59 -0800 Subject: [PATCH 1/4] fix: use configureEach instead of all for JavaCompile tasks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The eager .all {} API forces realization of lazily-registered JavaCompile tasks during afterEvaluate. When a project defines custom source sets (e.g. intTest) with a Java toolchain, Gradle finalizes the javaCompiler property during task realization — before JavaBasePlugin.createCompileJavaTask finishes setting its convention. This causes: 'property javaCompiler is final and cannot be changed'. Replacing .all {} with .configureEach {} defers the configuration action until Gradle has fully initialized each task. Amp-Thread-ID: https://ampcode.com/threads/T-019cbfff-d981-727b-9564-00e5705dbcec Co-authored-by: Amp --- .../main/scala/SemanticdbGradlePlugin.scala | 2 +- .../scala/tests/GradleBuildToolSuite.scala | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/semanticdb-gradle-plugin/src/main/scala/SemanticdbGradlePlugin.scala b/semanticdb-gradle-plugin/src/main/scala/SemanticdbGradlePlugin.scala index 04e84ff5..b44e2c07 100644 --- a/semanticdb-gradle-plugin/src/main/scala/SemanticdbGradlePlugin.scala +++ b/semanticdb-gradle-plugin/src/main/scala/SemanticdbGradlePlugin.scala @@ -104,7 +104,7 @@ class SemanticdbGradlePlugin extends Plugin[Project] { project .getTasks() .withType(classOf[JavaCompile]) - .all { task => + .configureEach { task => // If we run on JDK 17, we need to add special flags to the JVM // to allow access to the compiler. diff --git a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala index 9eb470e1..9dc70e0d 100644 --- a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala +++ b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala @@ -511,4 +511,37 @@ abstract class GradleBuildToolSuite(gradle: Tool.Gradle) // NOTE(olafur): no packages because we use more modern APIs. ) + // Regression test: projects that lazily register custom source sets (e.g. intTest) + // with a Java toolchain would fail because the eager `.all {}` API in the plugin + // caused the javaCompiler property to be finalized before Gradle finished + // configuring the task. + checkGradleBuild( + "lazy-sourceset-with-toolchain", + s"""|/build.gradle + |plugins { + | id 'java' + |} + |java { + | toolchain { + | languageVersion = JavaLanguageVersion.of(11) + | } + |} + |sourceSets { + | intTest { + | compileClasspath += sourceSets.main.output + | runtimeClasspath += sourceSets.main.output + | } + |} + |configurations { + | intTestImplementation.extendsFrom implementation + |} + |/src/main/java/Example.java + |public class Example {} + |/src/intTest/java/ExampleIntTest.java + |public class ExampleIntTest {} + |""".stripMargin, + expectedSemanticdbFiles = 1, + gradleVersions = List(Gradle8, Gradle7) + ) + } From 284384e921f373f2be7e7d2c8c599e5b12c0c582 Mon Sep 17 00:00:00 2001 From: jupblb Date: Mon, 23 Mar 2026 12:44:18 +0100 Subject: [PATCH 2/4] Drop support for Gradle 2 and Gradle 3 --- .../test/scala/tests/GradleBuildToolSuite.scala | 15 --------------- tests/buildTools/src/test/scala/tests/Tool.scala | 2 -- 2 files changed, 17 deletions(-) diff --git a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala index 9dc70e0d..684197db 100644 --- a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala +++ b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala @@ -6,8 +6,6 @@ class Gradle_8_BuildToolSuite extends GradleBuildToolSuite(Gradle8) class Gradle_7_BuildToolSuite extends GradleBuildToolSuite(Gradle7) class Gradle_6_BuildToolSuite extends GradleBuildToolSuite(Gradle6) class Gradle_5_BuildToolSuite extends GradleBuildToolSuite(Gradle5) -class Gradle_3_BuildToolSuite extends GradleBuildToolSuite(Gradle3) -class Gradle_2_BuildToolSuite extends GradleBuildToolSuite(Gradle2) abstract class GradleBuildToolSuite(gradle: Tool.Gradle) extends GradleBuildToolSuiteBase(gradle) { @@ -497,19 +495,6 @@ abstract class GradleBuildToolSuite(gradle: Tool.Gradle) // ) // } - checkGradleBuild( - "legacy", - s"""|/build.gradle - |apply plugin: 'java' - |/src/main/java/Example.java - |public class Example {} - |/src/test/java/ExampleSuite.java - |public class ExampleSuite {} - |""".stripMargin, - expectedSemanticdbFiles = 2, - gradleVersions = List(Gradle3, Gradle2) - // NOTE(olafur): no packages because we use more modern APIs. - ) // Regression test: projects that lazily register custom source sets (e.g. intTest) // with a Java toolchain would fail because the eager `.all {}` API in the plugin diff --git a/tests/buildTools/src/test/scala/tests/Tool.scala b/tests/buildTools/src/test/scala/tests/Tool.scala index 9e66d41d..9c5e4ab3 100644 --- a/tests/buildTools/src/test/scala/tests/Tool.scala +++ b/tests/buildTools/src/test/scala/tests/Tool.scala @@ -40,8 +40,6 @@ object Tool { case object Gradle7 extends Gradle("7.6.3", atMostJava(17)) case object Gradle6 extends Gradle("6.8.3", atMostJava(11)) case object Gradle5 extends Gradle("5.6.4", atMostJava(11)) - case object Gradle3 extends Gradle("3.3", atMostJava(8)) - case object Gradle2 extends Gradle("2.14.1", atMostJava(8)) sealed abstract class SBT(version: String, support: JVMSupport) extends Tool("sbt", version, support) From 79c84f1dd7c53e8e58bab321fb4c69a7d542ab7e Mon Sep 17 00:00:00 2001 From: jupblb Date: Mon, 23 Mar 2026 14:01:52 +0100 Subject: [PATCH 3/4] Scalafmt fix --- tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala index 684197db..1228efaa 100644 --- a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala +++ b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala @@ -495,7 +495,6 @@ abstract class GradleBuildToolSuite(gradle: Tool.Gradle) // ) // } - // Regression test: projects that lazily register custom source sets (e.g. intTest) // with a Java toolchain would fail because the eager `.all {}` API in the plugin // caused the javaCompiler property to be finalized before Gradle finished From ee75d68e76a5ae74d2e7175532653fdcfa4b471d Mon Sep 17 00:00:00 2001 From: jupblb Date: Mon, 23 Mar 2026 16:16:58 +0100 Subject: [PATCH 4/4] fix: bump Gradle8 test version from 8.7 to 8.10 to match CI --- tests/buildTools/src/test/scala/tests/Tool.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/buildTools/src/test/scala/tests/Tool.scala b/tests/buildTools/src/test/scala/tests/Tool.scala index 9c5e4ab3..2d689f0b 100644 --- a/tests/buildTools/src/test/scala/tests/Tool.scala +++ b/tests/buildTools/src/test/scala/tests/Tool.scala @@ -36,7 +36,7 @@ object Tool { // See https://docs.gradle.org/current/userguide/compatibility.html sealed abstract class Gradle(version: String, support: JVMSupport) extends Tool("gradle", version, support) - case object Gradle8 extends Gradle("8.7", atMostJava(21)) + case object Gradle8 extends Gradle("8.10", atMostJava(21)) case object Gradle7 extends Gradle("7.6.3", atMostJava(17)) case object Gradle6 extends Gradle("6.8.3", atMostJava(11)) case object Gradle5 extends Gradle("5.6.4", atMostJava(11))