aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing-Yuan Huang <laszio@google.com>2023-01-17 13:10:04 -0800
committerlaszio <ting-yuan@users.noreply.github.com>2023-01-17 22:09:08 -0800
commit512f771fcb7eb5907f009c7a45a5b473fe79a426 (patch)
tree0cdb3428624e60b51565e54e4db85749bb699ff7
parent348cca880d7886eade42366d646bac33f77f0adb (diff)
downloadksp-512f771fcb7eb5907f009c7a45a5b473fe79a426.tar.gz
Defer realization of compilation tasks
Tested with build scan manually; no easy way to automate the test. (cherry picked from commit da9e9ef5cde26bf8a8bf6381b77a8ed026b91c4b)
-rw-r--r--gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KotlinFactories.kt9
-rw-r--r--gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt25
2 files changed, 21 insertions, 13 deletions
diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KotlinFactories.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KotlinFactories.kt
index 589a7ed3..73b5d8e1 100644
--- a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KotlinFactories.kt
+++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KotlinFactories.kt
@@ -48,6 +48,7 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptionsDefault
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptionsDefault
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformCommonCompilerOptionsDefault
+import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
import org.jetbrains.kotlin.gradle.plugin.mpp.enabledOnCurrentHost
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData
@@ -121,9 +122,13 @@ class KotlinFactories {
fun registerKotlinNativeCompileTask(
project: Project,
taskName: String,
- kotlinCompileTask: KotlinNativeCompile
+ kotlinCompilation: KotlinCompilation<*>
): TaskProvider<out KspTaskNative> {
- return project.tasks.register(taskName, KspTaskNative::class.java, kotlinCompileTask.compilation).apply {
+ return project.tasks.register(
+ taskName,
+ KspTaskNative::class.java,
+ kotlinCompilation as KotlinNativeCompilationData<*>
+ ).apply {
configure { kspTask ->
kspTask.onlyIf {
kspTask.konanTarget.enabledOnCurrentHost
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 9bc5ae8b..f1ca11d7 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
@@ -47,6 +47,7 @@ import org.jetbrains.kotlin.gradle.plugin.InternalSubpluginOption
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin
+import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact
import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
@@ -203,7 +204,6 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool
val project = kotlinCompilation.target.project
val kotlinCompileProvider: TaskProvider<AbstractKotlinCompileTool<*>> =
project.locateTask(kotlinCompilation.compileKotlinTaskName) ?: return project.provider { emptyList() }
- val javaCompile = findJavaTaskForKotlinCompilation(kotlinCompilation)?.get()
val kspExtension = project.extensions.getByType(KspExtension::class.java)
val kspConfigurations = kspConfigurations.find(kotlinCompilation)
val nonEmptyKspConfigurations = kspConfigurations.filter { it.allDependencies.isNotEmpty() }
@@ -233,7 +233,7 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool
"$KSP_GROUP_ID:$KSP_COMPILER_PLUGIN_ID:$KSP_VERSION"
)
- if (javaCompile != null) {
+ findJavaTaskForKotlinCompilation(kotlinCompilation)?.configure { javaCompile ->
val generatedJavaSources = javaCompile.project.fileTree(javaOutputDir)
generatedJavaSources.include("**/*.java")
javaCompile.source(generatedJavaSources)
@@ -249,8 +249,6 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool
project.kotlinExtension.sourceSets.create("generatedBy" + kspTaskName.capitalizeAsciiOnly())
sourceSetMap.put(kotlinCompilation.defaultSourceSet, kspGeneratedSourceSet)
- val kotlinCompileTask = kotlinCompileProvider.get()
-
val processorClasspath = project.configurations.maybeCreate("${kspTaskName}ProcessorClasspath")
.extendsFrom(*nonEmptyKspConfigurations.toTypedArray())
fun configureAsKspTask(kspTask: KspTask, isIncremental: Boolean) {
@@ -314,6 +312,7 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool
)
if (kspExtension.allowSourcesFromOtherPlugins) {
+ val kotlinCompileTask = kotlinCompileProvider.get()
fun FileCollection.nonSelfDeps(): List<Task> =
buildDependencies.getDependencies(null).filterNot {
it.name == kspTaskName
@@ -382,11 +381,12 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool
val isIncremental = project.findProperty("ksp.incremental")?.toString()?.toBoolean() ?: true
// Create and configure KSP tasks.
- val kspTaskProvider = when (kotlinCompileTask) {
- is KotlinCompile -> {
+ val kspTaskProvider = when (kotlinCompilation.platformType) {
+ KotlinPlatformType.jvm, KotlinPlatformType.androidJvm -> {
kotlinCompilation as KotlinCompilationData<*>
KotlinFactories.registerKotlinJvmCompileTask(project, kspTaskName, kotlinCompilation).also {
it.configure { kspTask ->
+ val kotlinCompileTask = kotlinCompileProvider.get() as KotlinCompile
maybeBlockOtherPlugins(kspTask as BaseKotlinCompile)
configureAsKspTask(kspTask, isIncremental)
configureAsAbstractKotlinCompileTool(kspTask as AbstractKotlinCompileTool<*>)
@@ -420,10 +420,11 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool
kotlinCompilation.output.classesDirs.from(classOutputDir)
}
}
- is Kotlin2JsCompile -> {
+ KotlinPlatformType.js, KotlinPlatformType.wasm -> {
kotlinCompilation as KotlinCompilationData<*>
KotlinFactories.registerKotlinJSCompileTask(project, kspTaskName, kotlinCompilation).also {
it.configure { kspTask ->
+ val kotlinCompileTask = kotlinCompileProvider.get() as Kotlin2JsCompile
maybeBlockOtherPlugins(kspTask as BaseKotlinCompile)
configureAsKspTask(kspTask, isIncremental)
configureAsAbstractKotlinCompileTool(kspTask as AbstractKotlinCompileTool<*>)
@@ -449,10 +450,11 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool
}
}
}
- is KotlinCompileCommon -> {
+ KotlinPlatformType.common -> {
kotlinCompilation as KotlinCompilationData<*>
KotlinFactories.registerKotlinMetadataCompileTask(project, kspTaskName, kotlinCompilation).also {
it.configure { kspTask ->
+ val kotlinCompileTask = kotlinCompileProvider.get() as KotlinCompileCommon
maybeBlockOtherPlugins(kspTask as BaseKotlinCompile)
configureAsKspTask(kspTask, isIncremental)
configureAsAbstractKotlinCompileTool(kspTask as AbstractKotlinCompileTool<*>)
@@ -475,9 +477,10 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool
}
}
}
- is KotlinNativeCompile -> {
- KotlinFactories.registerKotlinNativeCompileTask(project, kspTaskName, kotlinCompileTask).also {
+ KotlinPlatformType.native -> {
+ KotlinFactories.registerKotlinNativeCompileTask(project, kspTaskName, kotlinCompilation).also {
it.configure { kspTask ->
+ val kotlinCompileTask = kotlinCompileProvider.get() as KotlinNativeCompile
configureAsKspTask(kspTask, false)
configureAsAbstractKotlinCompileTool(kspTask)
@@ -504,7 +507,7 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool
}
}
}
- else -> return project.provider { emptyList() }
+ // No else; The cases should be exhaustive
}
kspGeneratedSourceSet.kotlin.srcDir(project.files(kotlinOutputDir, javaOutputDir).builtBy(kspTaskProvider))
kotlinCompilation.source(kspGeneratedSourceSet)