From 591bf5eb1a210eb3f149874ae7f3fc029e6a0367 Mon Sep 17 00:00:00 2001 From: Ting-Yuan Huang Date: Tue, 21 Nov 2023 16:03:32 -0800 Subject: [PATCH] Turn off -progressive when downgrading from K2 Progressive mode should always be used with latest language version. --- .../google/devtools/ksp/gradle/KspSubplugin.kt | 13 +++++++++++++ .../google/devtools/ksp/test/PlaygroundIT.kt | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+) 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 2b83563656..6d30c5088c 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 @@ -366,6 +366,7 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool fun configureLanguageVersion(kspTask: KotlinCompilationTask<*>) { kspTask.compilerOptions.useK2.value(false) val languageVersion = kotlinCompilation.compilerOptions.options.languageVersion + val progressiveMode = kotlinCompilation.compilerOptions.options.progressiveMode kspTask.compilerOptions.languageVersion.value( project.provider { languageVersion.orNull?.let { version -> @@ -377,6 +378,18 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool } ?: KotlinVersion.KOTLIN_1_9 } ) + + // Turn off progressive mode if we need to downgrade language version. + kspTask.compilerOptions.progressiveMode.value( + project.provider { + val compileLangVer = languageVersion.orNull ?: KotlinVersion.DEFAULT + if (compileLangVer >= KotlinVersion.KOTLIN_2_0) { + false + } else { + progressiveMode.orNull + } + } + ) } val isIncremental = project.findProperty("ksp.incremental")?.toString()?.toBoolean() ?: true 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 b885c25ebe..2079ac1bff 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 @@ -361,6 +361,24 @@ class PlaygroundIT(val useKSP2: Boolean) { project.restore(properties.path) } + @Test + fun testProgressiveMode() { + val buildFile = File(project.root, "workload/build.gradle.kts") + buildFile.appendText( + """ + kotlin { + compilerOptions { + allWarningsAsErrors.value(true) + progressiveMode.value(true) + } + } + """.trimIndent() + ) + val gradleRunner = GradleRunner.create().withProjectDir(project.root).withGradleVersion("8.0") + gradleRunner.withArguments("clean", "build").build() + project.restore(buildFile.path) + } + companion object { @JvmStatic @Parameterized.Parameters(name = "KSP2={0}")