Kapt: Register AP options as inputs in worker mode as it done with kotlinc compiler plugin mode

This commit fixes the 'KotlinAndroid32GradleIT.testKaptUsingApOptionProvidersAsNestedInputOutput()' test that started to fail after switching to the worker API mode by default.
This commit is contained in:
Yan Zhulanow
2019-10-15 21:39:46 +09:00
parent 958e6623fc
commit 68deedb589
2 changed files with 32 additions and 15 deletions
@@ -32,7 +32,6 @@ import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.tasks.CompilerPluginOptions
import org.jetbrains.kotlin.gradle.tasks.KotlinCompileTaskData
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.ObjectOutputStream
@@ -324,12 +323,15 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
subluginOptionsFromProvidedApOptions
}
private fun Kapt3SubpluginContext.buildAndAddOptionsTo(task: Task, container: CompilerPluginOptions, aptMode: String, javacOptions: Map<String, String>) {
private fun Kapt3SubpluginContext.registerSubpluginOptions(
task: Task,
container: CompilerPluginOptions,
options: List<SubpluginOption>
) {
val compilerPluginId = getCompilerPluginId()
val kaptSubpluginOptions = buildOptions(aptMode, javacOptions)
task.registerSubpluginOptionsAsInputs(compilerPluginId, kaptSubpluginOptions)
task.registerSubpluginOptionsAsInputs(compilerPluginId, options)
for (option in kaptSubpluginOptions) {
for (option in options) {
container.addPluginArgument(compilerPluginId, option)
}
@@ -441,7 +443,8 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
SubpluginOption("incrementalCache", kaptTask.incAptCache!!.absolutePath))
}
buildAndAddOptionsTo(kaptTask, kaptTask.pluginOptions, aptMode = "apt", javacOptions = dslJavacOptions)
val subpluginOptions = buildOptions("apt", dslJavacOptions)
registerSubpluginOptions(kaptTask, kaptTask.pluginOptions, subpluginOptions)
}
if (kaptTask is KaptWithoutKotlincTask) {
@@ -449,9 +452,11 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
isVerbose = project.isKaptVerbose()
mapDiagnosticLocations = kaptExtension.mapDiagnosticLocations
annotationProcessorFqNames = kaptExtension.processors.split(',').filter { it.isNotEmpty() }
processorOptions = getAPOptions().map { it.key to it.value }.toMap()
javacOptions = dslJavacOptions
}
val subpluginOptions = getAPOptions()
registerSubpluginOptions(kaptTask, kaptTask.processorOptions, subpluginOptions)
}
return kaptTask
@@ -496,7 +501,9 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
PropertiesProvider(project).mapKotlinTaskProperties(kaptTask)
kaptTask.kaptClasspathConfigurations = kaptClasspathConfigurations
buildAndAddOptionsTo(kaptTask, kaptTask.pluginOptions, aptMode = "stubs", javacOptions = kaptExtension.getJavacOptions())
val subpluginOptions = buildOptions("stubs", kaptExtension.getJavacOptions())
registerSubpluginOptions(kaptTask, kaptTask.pluginOptions, subpluginOptions)
return kaptTask
}
@@ -5,16 +5,16 @@
package org.jetbrains.kotlin.gradle.internal
import org.gradle.api.tasks.Classpath
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.*
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
import org.gradle.workers.IsolationMode
import org.gradle.workers.WorkerExecutor
import org.jetbrains.kotlin.gradle.internal.Kapt3KotlinGradleSubplugin.Companion.KAPT_WORKER_DEPENDENCIES_CONFIGURATION_NAME
import org.jetbrains.kotlin.gradle.internal.kapt.incremental.KaptIncrementalChanges
import org.jetbrains.kotlin.gradle.plugin.CompositeSubpluginOption
import org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPluginWrapper
import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
import org.jetbrains.kotlin.gradle.tasks.CompilerPluginOptions
import org.jetbrains.kotlin.gradle.tasks.findKotlinStdlibClasspath
import org.jetbrains.kotlin.gradle.tasks.findToolsJar
import org.jetbrains.kotlin.utils.PathUtil
@@ -40,12 +40,22 @@ open class KaptWithoutKotlincTask @Inject constructor(private val workerExecutor
@get:Input
lateinit var annotationProcessorFqNames: List<String>
@get:Input
lateinit var processorOptions: Map<String, String>
@get:Internal
internal val processorOptions = CompilerPluginOptions()
@get:Input
lateinit var javacOptions: Map<String, String>
private fun getAnnotationProcessorOptions(): Map<String, String> {
val options = processorOptions.subpluginOptionsByPluginId[Kapt3KotlinGradleSubplugin.KAPT_SUBPLUGIN_ID] ?: return emptyMap()
val result = mutableMapOf<String, String>()
for (option in options) {
result[option.key] = option.value
}
return result
}
@TaskAction
fun compile(inputs: IncrementalTaskInputs) {
logger.info("Running kapt annotation processing using the Gradle Worker API")
@@ -86,7 +96,7 @@ open class KaptWithoutKotlincTask @Inject constructor(private val workerExecutor
kaptClasspath.files.toList(),
annotationProcessorFqNames,
processorOptions,
getAnnotationProcessorOptions(),
javacOptions,
kaptFlagsForWorker