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..1228efaa 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,18 +495,37 @@ 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 + // configuring the task. checkGradleBuild( - "legacy", + "lazy-sourceset-with-toolchain", s"""|/build.gradle - |apply plugin: 'java' + |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/test/java/ExampleSuite.java - |public class ExampleSuite {} + |/src/intTest/java/ExampleIntTest.java + |public class ExampleIntTest {} |""".stripMargin, - expectedSemanticdbFiles = 2, - gradleVersions = List(Gradle3, Gradle2) - // NOTE(olafur): no packages because we use more modern APIs. + expectedSemanticdbFiles = 1, + gradleVersions = List(Gradle8, Gradle7) ) } diff --git a/tests/buildTools/src/test/scala/tests/Tool.scala b/tests/buildTools/src/test/scala/tests/Tool.scala index 9e66d41d..2d689f0b 100644 --- a/tests/buildTools/src/test/scala/tests/Tool.scala +++ b/tests/buildTools/src/test/scala/tests/Tool.scala @@ -36,12 +36,10 @@ 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)) - 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)