diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt index 45c47677d7..49ad5c4e54 100644 --- a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt +++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt @@ -423,6 +423,7 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool configureAsAbstractKotlinCompileTool(kspTask as AbstractKotlinCompileTool<*>) configurePluginOptions(kspTask) kspTask.compilerOptions.noJdk.value(kotlinCompileTask.compilerOptions.noJdk) + kspTask.compilerOptions.jvmTarget.value(kotlinCompileTask.compilerOptions.jvmTarget) kspTask.compilerOptions.verbose.convention(kotlinCompilation.compilerOptions.options.verbose) // Read from kotlinCompileTask's language version as // kspTask's language version is yet to be configured by configurator. diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt index 14d8ebdc8e..42846fc7f0 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt @@ -282,4 +282,36 @@ class PlaygroundIT { project.restore("workload/build.gradle.kts") } + + @Test + fun testProjectExtensionCompilerOptions() { + val properties = File(project.root, "gradle.properties") + properties.writeText( + properties.readText().replace( + "kotlin.jvm.target.validation.mode=warning", + "kotlin.jvm.target.validation.mode=error" + ) + ) + val buildFile = File(project.root, "workload/build.gradle.kts") + buildFile.appendText( + """ + kotlin { + compilerOptions { + jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17) + } + } + """.trimIndent() + ) + val gradleRunner = GradleRunner.create().withProjectDir(project.root).withGradleVersion("8.0") + gradleRunner.withArguments("clean", "build").buildAndFail().let { result -> + Assert.assertTrue( + result.output.contains( + "'compileJava' task (current target is 11) and 'kspKotlin' " + + "task (current target is 17) jvm target compatibility should be set to the same Java version." + ) + ) + } + project.restore(buildFile.path) + project.restore(properties.path) + } }