From f6b3369dba554e17eeb6831e39bed3d024ec67f9 Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Fri, 24 Sep 2021 14:26:30 +0200 Subject: Add ProcessorClasspathConfigurationsTest, fix configuration resolved in KspTask --- .../com/google/devtools/ksp/gradle/KspSubplugin.kt | 5 +- .../gradle/ProcessorClasspathConfigurationsTest.kt | 97 ++++++++++++++++++++++ .../ksp/gradle/SourceSetConfigurationsTest.kt | 1 - 3 files changed, 98 insertions(+), 5 deletions(-) create mode 100644 gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/ProcessorClasspathConfigurationsTest.kt (limited to 'gradle-plugin') 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 e47b663c..f547623e 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 @@ -206,10 +206,7 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool val processorClasspath = project.configurations.maybeCreate("${kspTaskName}ProcessorClasspath") .extendsFrom(*nonEmptyKspConfigurations.toTypedArray()) kspTask.processorClasspath.from(processorClasspath) - - nonEmptyKspConfigurations.forEach { - kspTask.dependsOn(it.buildDependencies) - } + kspTask.dependsOn(processorClasspath.buildDependencies) if (kspExtension.blockOtherCompilerPlugins) { // FIXME: ask upstream to provide an API to make this not implementation-dependent. diff --git a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/ProcessorClasspathConfigurationsTest.kt b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/ProcessorClasspathConfigurationsTest.kt new file mode 100644 index 00000000..a1216f1e --- /dev/null +++ b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/ProcessorClasspathConfigurationsTest.kt @@ -0,0 +1,97 @@ +/* + * Copyright 2020 Google LLC + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.devtools.ksp.gradle + +import com.google.devtools.ksp.gradle.testing.KspIntegrationTestRule +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TemporaryFolder + +class ProcessorClasspathConfigurationsTest { + @Rule + @JvmField + val tmpDir = TemporaryFolder() + + @Rule + @JvmField + val testRule = KspIntegrationTestRule(tmpDir) + + private val kspConfigs by lazy { + """configurations.matching { it.name.startsWith("ksp") && !it.name.endsWith("ProcessorClasspath") }""" + } + + // config name is .replace("compile", "ksp") + "ProcessorClasspath" + // they should extend all non-empty ksp configurations + @Test + fun testConfigurationsForSinglePlatformApp() { + testRule.setupAppAsJvmApp() + testRule.appModule.addSource("Foo.kt", "class Foo") + testRule.appModule.buildFileAdditions.add(""" + $kspConfigs.all { + // Make sure ksp configs are not empty. + project.dependencies.add(name, "androidx.room:room-compiler:2.3.0") + } + tasks.register("testConfigurations") { + // Resolve all tasks to trigger classpath config creation + dependsOn(tasks["tasks"]) + doLast { + val main = configurations["kspKotlinProcessorClasspath"] + val test = configurations["kspTestKotlinProcessorClasspath"] + require(main.extendsFrom.map { it.name } == listOf("ksp")) + require(test.extendsFrom.map { it.name } == listOf("kspTest")) + } + } + """.trimIndent()) + testRule.runner() + .withArguments(":app:testConfigurations") + .build() + } + + @Test + fun testConfigurationsForMultiPlatformApp() { + testRule.setupAppAsMultiplatformApp(""" + kotlin { + jvm { } + js { browser() } + } + """.trimIndent()) + testRule.appModule.addMultiplatformSource("commonMain", "Foo.kt", "class Foo") + testRule.appModule.buildFileAdditions.add(""" + $kspConfigs.matching { it.name != "ksp" }.all { + // Make sure ksp configs are not empty. + project.dependencies.add(name, "androidx.room:room-compiler:2.3.0") + } + tasks.register("testConfigurations") { + // Resolve all tasks to trigger classpath config creation + dependsOn(tasks["tasks"]) + doLast { + val jvmMain = configurations["kspKotlinJvmProcessorClasspath"] + val jvmTest = configurations["kspTestKotlinJvmProcessorClasspath"] + val jsMain = configurations["kspKotlinJsProcessorClasspath"] + val jsTest = configurations["kspTestKotlinJsProcessorClasspath"] + require(jvmMain.extendsFrom.map { it.name } == listOf("kspJvm")) + require(jvmTest.extendsFrom.map { it.name } == listOf("kspJvmTest")) + require(jsMain.extendsFrom.map { it.name } == listOf("kspJs")) + require(jsTest.extendsFrom.map { it.name } == listOf("kspJsTest")) + } + } + """.trimIndent()) + testRule.runner() + .withArguments(":app:testConfigurations") + .build() + } +} diff --git a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/SourceSetConfigurationsTest.kt b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/SourceSetConfigurationsTest.kt index 9fe2b2c7..02aded2b 100644 --- a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/SourceSetConfigurationsTest.kt +++ b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/SourceSetConfigurationsTest.kt @@ -89,7 +89,6 @@ class SourceSetConfigurationsTest { .build() assertThat(result.output.lines()).containsAtLeast( - "ksp", // jvm target: "kspJvm", "kspJvmTest", -- cgit v1.2.3