[Gradle] Fix compiler plugins options were not passed to KaptGenerateStubs task

^KT-58745 Fixed
This commit is contained in:
Yahor Berdnikau
2023-05-18 12:29:07 +02:00
committed by Space Team
parent 5f5b32b8ae
commit 37402336d5
3 changed files with 63 additions and 9 deletions
@@ -1237,4 +1237,38 @@ open class Kapt3IT : Kapt3BaseIT() {
} }
} }
} }
@DisplayName("KT-58745: compiler plugin options should be passed to KaptGenerateStubs task")
@GradleTest
fun kaptGenerateStubsConfiguredWithCompilerPluginOptions(gradleVersion: GradleVersion) {
project(
"simple".withPrefix,
gradleVersion,
buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)
) {
buildGradle.modify {
//language=groovy
"""
|${it.substringBefore("plugins {")}
|plugins {
| id "org.jetbrains.kotlin.plugin.noarg"
|${it.substringAfter("plugins {")}
|
|noArg {
| annotation("my.custom.Annotation")
|}
""".trimMargin()
}
build(":kaptGenerateStubsKotlin") {
assertTasksExecuted(":kaptGenerateStubsKotlin")
assertCompilerArgument(
":kaptGenerateStubsKotlin",
"plugin:org.jetbrains.kotlin.noarg:annotation=my.custom.Annotation"
)
}
}
}
} }
@@ -192,8 +192,8 @@ class UpToDateIT : KGPBaseTest() {
} }
override fun checkAfterRebuild(buildResult: BuildResult) = with(buildResult) { override fun checkAfterRebuild(buildResult: BuildResult) = with(buildResult) {
assertTasksExecuted(":compileKotlin") assertTasksExecuted(":compileKotlin", ":kaptGenerateStubsKotlin")
assertTasksUpToDate(":kaptGenerateStubsKotlin", ":kaptKotlin") assertTasksUpToDate(":kaptKotlin")
} }
} }
@@ -3,15 +3,13 @@ package org.jetbrains.kotlin.gradle.plugin
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.compile.JavaCompile import org.gradle.api.tasks.compile.JavaCompile
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile import org.jetbrains.kotlin.gradle.internal.kaptGenerateStubsTaskName
import org.jetbrains.kotlin.gradle.logging.kotlinDebug import org.jetbrains.kotlin.gradle.logging.kotlinDebug
import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.targets.js.ir.JsIrBinary import org.jetbrains.kotlin.gradle.targets.js.ir.JsIrBinary
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile import org.jetbrains.kotlin.gradle.tasks.*
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompileTool import org.jetbrains.kotlin.gradle.utils.whenKaptEnabled
import org.jetbrains.kotlin.gradle.tasks.CompilerPluginOptions
import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile
class SubpluginEnvironment( class SubpluginEnvironment(
private val subplugins: List<KotlinCompilerPluginSupportPlugin>, private val subplugins: List<KotlinCompilerPluginSupportPlugin>,
@@ -56,7 +54,7 @@ class SubpluginEnvironment(
options options
} }
val configureKotlinTask: (KotlinCompile<*>) -> Unit = { val configureKotlinTask: (KotlinCompilationTask<*>) -> Unit = {
when (it) { when (it) {
is AbstractKotlinCompile<*> -> it.pluginOptions.add(compilerOptions) is AbstractKotlinCompile<*> -> it.pluginOptions.add(compilerOptions)
is KotlinNativeCompile -> it.compilerPluginOptions.addPluginArgument(compilerOptions.get()) is KotlinNativeCompile -> it.compilerPluginOptions.addPluginArgument(compilerOptions.get())
@@ -64,7 +62,8 @@ class SubpluginEnvironment(
} }
} }
kotlinCompilation.compileKotlinTaskProvider.configure(configureKotlinTask) kotlinCompilation.compileTaskProvider.configure(configureKotlinTask)
project.configurePluginOptionsForKapt(kotlinCompilation, configureKotlinTask)
if (kotlinCompilation is KotlinJsIrCompilation) { if (kotlinCompilation is KotlinJsIrCompilation) {
kotlinCompilation.binaries.all { kotlinCompilation.binaries.all {
@@ -80,6 +79,27 @@ class SubpluginEnvironment(
return appliedSubplugins return appliedSubplugins
} }
private fun Project.configurePluginOptionsForKapt(
kotlinCompilation: KotlinCompilation<*>,
configureKotlinTask: (KotlinCompilationTask<*>) -> Unit,
) {
if (kotlinCompilation is KotlinJvmCompilation ||
kotlinCompilation is KotlinWithJavaCompilation<*, *> ||
kotlinCompilation is KotlinJvmAndroidCompilation
) {
whenKaptEnabled {
@Suppress("UNCHECKED_CAST")
val kaptGenerateStubsTaskName = (kotlinCompilation.compileTaskProvider as TaskProvider<KotlinJvmCompile>)
.kaptGenerateStubsTaskName
tasks.withType<KaptGenerateStubs>().configureEach { task ->
if (task.name == kaptGenerateStubsTaskName) {
configureKotlinTask(task)
}
}
}
}
}
private fun Project.addMavenDependency(configuration: String, artifact: SubpluginArtifact) { private fun Project.addMavenDependency(configuration: String, artifact: SubpluginArtifact) {
val artifactVersion = artifact.version ?: kotlinPluginVersion val artifactVersion = artifact.version ?: kotlinPluginVersion
val mavenCoordinate = "${artifact.groupId}:${artifact.artifactId}:$artifactVersion" val mavenCoordinate = "${artifact.groupId}:${artifact.artifactId}:$artifactVersion"