From 37402336d5afbbdeae8d4921549abfc7b8d6e639 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Thu, 18 May 2023 12:29:07 +0200 Subject: [PATCH] [Gradle] Fix compiler plugins options were not passed to KaptGenerateStubs task ^KT-58745 Fixed --- .../org/jetbrains/kotlin/gradle/Kapt3IT.kt | 34 +++++++++++++++++++ .../org/jetbrains/kotlin/gradle/UpToDateIT.kt | 4 +-- .../gradle/plugin/SubpluginEnvironment.kt | 34 +++++++++++++++---- 3 files changed, 63 insertions(+), 9 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt index f7a98faa237..6c16a4d2857 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt @@ -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" + ) + } + } + } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/UpToDateIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/UpToDateIT.kt index d643402f0ec..69df1732280 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/UpToDateIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/UpToDateIT.kt @@ -192,8 +192,8 @@ class UpToDateIT : KGPBaseTest() { } override fun checkAfterRebuild(buildResult: BuildResult) = with(buildResult) { - assertTasksExecuted(":compileKotlin") - assertTasksUpToDate(":kaptGenerateStubsKotlin", ":kaptKotlin") + assertTasksExecuted(":compileKotlin", ":kaptGenerateStubsKotlin") + assertTasksUpToDate(":kaptKotlin") } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt index a991d6b7c5b..15f9fcfa20f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt @@ -3,15 +3,13 @@ package org.jetbrains.kotlin.gradle.plugin import org.gradle.api.Project import org.gradle.api.tasks.TaskProvider 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.plugin.mpp.* import org.jetbrains.kotlin.gradle.targets.js.ir.JsIrBinary import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation -import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile -import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompileTool -import org.jetbrains.kotlin.gradle.tasks.CompilerPluginOptions -import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile +import org.jetbrains.kotlin.gradle.tasks.* +import org.jetbrains.kotlin.gradle.utils.whenKaptEnabled class SubpluginEnvironment( private val subplugins: List, @@ -56,7 +54,7 @@ class SubpluginEnvironment( options } - val configureKotlinTask: (KotlinCompile<*>) -> Unit = { + val configureKotlinTask: (KotlinCompilationTask<*>) -> Unit = { when (it) { is AbstractKotlinCompile<*> -> it.pluginOptions.add(compilerOptions) 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) { kotlinCompilation.binaries.all { @@ -80,6 +79,27 @@ class SubpluginEnvironment( 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) + .kaptGenerateStubsTaskName + tasks.withType().configureEach { task -> + if (task.name == kaptGenerateStubsTaskName) { + configureKotlinTask(task) + } + } + } + } + } + private fun Project.addMavenDependency(configuration: String, artifact: SubpluginArtifact) { val artifactVersion = artifact.version ?: kotlinPluginVersion val mavenCoordinate = "${artifact.groupId}:${artifact.artifactId}:$artifactVersion"