[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) {
assertTasksExecuted(":compileKotlin")
assertTasksUpToDate(":kaptGenerateStubsKotlin", ":kaptKotlin")
assertTasksExecuted(":compileKotlin", ":kaptGenerateStubsKotlin")
assertTasksUpToDate(":kaptKotlin")
}
}
@@ -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<KotlinCompilerPluginSupportPlugin>,
@@ -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<KotlinJvmCompile>)
.kaptGenerateStubsTaskName
tasks.withType<KaptGenerateStubs>().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"