diff options
author | Ting-Yuan Huang <laszio@google.com> | 2022-04-01 02:13:37 -0700 |
---|---|---|
committer | laszio <ting-yuan@users.noreply.github.com> | 2022-04-01 12:18:03 -0700 |
commit | f14f10d9ee37f110687f7bf6ec0ea39b43deb3ae (patch) | |
tree | c3ff7f9a29a6bc37e31e35c059de15683c261a4e | |
parent | 938f2ebcdaa32799442c05b5762c2b72cac998bb (diff) | |
download | ksp-f14f10d9ee37f110687f7bf6ec0ea39b43deb3ae.tar.gz |
K/N: delete outputs upfront
In other platforms, outputs are deleted in AbstractKotlinCompile, which
is not inherited by K/N.
4 files changed, 34 insertions, 0 deletions
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 215a50e8..21585b77 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 @@ -808,6 +808,14 @@ abstract class KspTaskNative @Inject constructor( // new / changed / removed files. // Long term solution: contribute to upstream to support incremental compilation. // Short term workaround: declare a @TaskAction function and call super.compile(). + // Use a name that gets sorted in the front just in case. `_$` is lower, but it might be too hacky. + @TaskAction + fun _0() { + options.get().single { it.key == "kspOutputDir" }.value.let { + File(it).deleteRecursively() + } + super.compile() + } } // This forces rebuild. diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/KMPImplementedIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/KMPImplementedIT.kt index a16fb27c..4fa6b336 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/KMPImplementedIT.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/KMPImplementedIT.kt @@ -154,6 +154,7 @@ class KMPImplementedIT { @Test fun testLinuxX64() { val gradleRunner = GradleRunner.create().withProjectDir(project.root) + val genDir = File(project.root, "workload-linuxX64/build/generated/ksp/linuxX64/linuxX64Main/kotlin") gradleRunner.withArguments( "--configuration-cache-problems=warn", @@ -180,6 +181,21 @@ class KMPImplementedIT { ) Assert.assertFalse(it.output.contains("kotlin scripting plugin:")) Assert.assertTrue(it.output.contains("w: [ksp] platforms: [Native")) + Assert.assertTrue(File(genDir, "Main_dot_kt.kt").exists()) + Assert.assertTrue(File(genDir, "ToBeRemoved_dot_kt.kt").exists()) + } + + File(project.root, "workload-linuxX64/src/linuxX64Main/kotlin/ToBeRemoved.kt").delete() + gradleRunner.withArguments( + "--configuration-cache-problems=warn", + ":workload-linuxX64:build" + ).build().let { + Assert.assertEquals(TaskOutcome.SUCCESS, it.task(":workload-linuxX64:build")?.outcome) + Assert.assertEquals(TaskOutcome.SUCCESS, it.task(":workload-linuxX64:kspTestKotlinLinuxX64")?.outcome) + verifyKexe("workload-linuxX64/build/bin/linuxX64/debugExecutable/workload-linuxX64.kexe") + verifyKexe("workload-linuxX64/build/bin/linuxX64/releaseExecutable/workload-linuxX64.kexe") + Assert.assertTrue(File(genDir, "Main_dot_kt.kt").exists()) + Assert.assertFalse(File(genDir, "ToBeRemoved_dot_kt.kt").exists()) } } diff --git a/integration-tests/src/test/resources/kmp/test-processor/src/main/kotlin/TestProcessor.kt b/integration-tests/src/test/resources/kmp/test-processor/src/main/kotlin/TestProcessor.kt index ffa0276f..a0d8fa47 100644 --- a/integration-tests/src/test/resources/kmp/test-processor/src/main/kotlin/TestProcessor.kt +++ b/integration-tests/src/test/resources/kmp/test-processor/src/main/kotlin/TestProcessor.kt @@ -37,6 +37,15 @@ class TestProcessor( writer.write("}\n") } } + + allFiles.forEach { + val fn = it.replace(".", "_dot_") + codeGenerator.createNewFile(Dependencies(false), "", fn, "kt").use { output -> + OutputStreamWriter(output).use { writer -> + writer.write("// empty\n") + } + } + } return emptyList() } } diff --git a/integration-tests/src/test/resources/kmp/workload-linuxX64/src/linuxX64Main/kotlin/ToBeRemoved.kt b/integration-tests/src/test/resources/kmp/workload-linuxX64/src/linuxX64Main/kotlin/ToBeRemoved.kt new file mode 100644 index 00000000..56063711 --- /dev/null +++ b/integration-tests/src/test/resources/kmp/workload-linuxX64/src/linuxX64Main/kotlin/ToBeRemoved.kt @@ -0,0 +1 @@ +class ToBeRemoved |