Refactoring: do not use extraProperties to pass kapt options to task
This commit is contained in:
+11
-12
@@ -23,6 +23,7 @@ import org.gradle.api.tasks.compile.AbstractCompile
|
||||
import org.gradle.api.tasks.compile.JavaCompile
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
||||
import org.jetbrains.kotlin.gradle.tasks.kapt.generateAnnotationProcessorWrapper
|
||||
import org.jetbrains.kotlin.gradle.tasks.kapt.generateKotlinAptAnnotation
|
||||
import java.io.File
|
||||
@@ -37,20 +38,20 @@ fun Project.initKapt(
|
||||
variantName: String,
|
||||
kotlinOptions: Any?,
|
||||
subpluginEnvironment: SubpluginEnvironment,
|
||||
taskFactory: (suffix: String) -> AbstractCompile
|
||||
tasksProvider: KotlinTasksProvider
|
||||
): AbstractCompile? {
|
||||
val kaptExtension = extensions.getByType(KaptExtension::class.java)
|
||||
val kotlinAfterJavaTask: AbstractCompile?
|
||||
val kotlinAfterJavaTask: KotlinCompile?
|
||||
|
||||
if (kaptExtension.generateStubs) {
|
||||
kotlinAfterJavaTask = createKotlinAfterJavaTask(javaTask, kotlinTask, kotlinOptions, taskFactory)
|
||||
kotlinAfterJavaTask = createKotlinAfterJavaTask(javaTask, kotlinTask, kotlinOptions, tasksProvider)
|
||||
mapKotlinTaskProperties(this, kotlinAfterJavaTask)
|
||||
|
||||
kotlinTask.logger.kotlinDebug("kapt: Using class file stubs")
|
||||
|
||||
val stubsDir = File(buildDir, "tmp/kapt/$variantName/classFileStubs")
|
||||
stubsDir.mkdirs()
|
||||
kotlinTask.extensions.extraProperties.set("kaptStubsDir", stubsDir)
|
||||
kotlinTask.kaptOptions.classFileStubs = stubsDir
|
||||
javaTask.appendClasspathDynamically(stubsDir)
|
||||
kotlinTask.appendClasspathDynamically(stubsDir)
|
||||
|
||||
@@ -76,9 +77,7 @@ fun Project.initKapt(
|
||||
javaTask.appendClasspathDynamically(kaptManager.wrappersDirectory)
|
||||
javaTask.source(kaptManager.hackAnnotationDir)
|
||||
|
||||
if (kaptExtension.inheritedAnnotations) {
|
||||
kotlinTask.extensions.extraProperties.set("kaptInheritedAnnotations", true)
|
||||
}
|
||||
kotlinTask.kaptOptions.supportInheritedAnnotations = kaptExtension.inheritedAnnotations
|
||||
|
||||
kotlinTask.doFirst {
|
||||
kaptManager.generateJavaHackFile()
|
||||
@@ -98,18 +97,18 @@ fun Project.initKapt(
|
||||
kaptManager.afterJavaCompile()
|
||||
}
|
||||
|
||||
kotlinTask.storeKaptAnnotationsFile(kaptManager)
|
||||
kotlinTask.kaptOptions.annotationsFile = kaptManager.getAnnotationFile()
|
||||
return kotlinAfterJavaTask
|
||||
}
|
||||
|
||||
private fun Project.createKotlinAfterJavaTask(
|
||||
javaTask: AbstractCompile,
|
||||
kotlinTask: AbstractCompile,
|
||||
kotlinTask: KotlinCompile,
|
||||
kotlinOptions: Any?,
|
||||
taskFactory: (suffix: String) -> AbstractCompile
|
||||
): AbstractCompile {
|
||||
val kotlinAfterJavaTask = with (taskFactory(KOTLIN_AFTER_JAVA_TASK_SUFFIX)) {
|
||||
destinationDir = kotlinTask.destinationDir
|
||||
tasksProvider: KotlinTasksProvider
|
||||
): KotlinCompile {
|
||||
val kotlinAfterJavaTask = with (tasksProvider.createKotlinJVMTask(this, KOTLIN_AFTER_JAVA_TASK_SUFFIX)) {
|
||||
classpath = kotlinTask.classpath - project.files(javaTask.destinationDir)
|
||||
this
|
||||
}
|
||||
|
||||
+9
-28
@@ -172,9 +172,7 @@ class Kotlin2JvmSourceSetProcessor(
|
||||
aptConfiguration.resolve(), aptOutputDir, aptWorkingDir)
|
||||
|
||||
kotlinAfterJavaTask = project.initKapt(kotlinTask, javaTask, kaptManager,
|
||||
sourceSetName, null, subpluginEnvironment) {
|
||||
createKotlinCompileTask(it)
|
||||
}
|
||||
sourceSetName, null, subpluginEnvironment, tasksProvider)
|
||||
|
||||
if (kotlinAfterJavaTask != null) {
|
||||
javaTask.doFirst {
|
||||
@@ -442,11 +440,7 @@ open class KotlinAndroidPlugin @Inject constructor(val scriptHandler: ScriptHand
|
||||
val kaptManager = AnnotationProcessingManager(kotlinTask, javaTask, variantDataName,
|
||||
aptFiles.toSet(), aptOutputDir, aptWorkingDir, variantData)
|
||||
|
||||
kotlinTask.storeKaptAnnotationsFile(kaptManager)
|
||||
|
||||
kotlinAfterJavaTask = project.initKapt(kotlinTask, javaTask, kaptManager, variantDataName, kotlinOptions, subpluginEnvironment) {
|
||||
tasksProvider.createKotlinJVMTask(project, kotlinTaskName + KOTLIN_AFTER_JAVA_TASK_SUFFIX)
|
||||
}
|
||||
kotlinAfterJavaTask = project.initKapt(kotlinTask, javaTask, kaptManager, variantDataName, kotlinOptions, subpluginEnvironment, tasksProvider)
|
||||
}
|
||||
|
||||
configureJavaTask(kotlinTask, javaTask, kotlinAfterJavaTask, logger)
|
||||
@@ -560,32 +554,23 @@ class SubpluginEnvironment(
|
||||
val subplugins: List<KotlinGradleSubplugin>
|
||||
) {
|
||||
|
||||
fun addSubpluginArguments(project: Project, compileTask: AbstractCompile) {
|
||||
val realPluginClasspaths = arrayListOf<String>()
|
||||
val pluginArguments = arrayListOf<String>()
|
||||
fun getPluginOptionString(pluginId: String, key: String, value: String) = "plugin:$pluginId:$key=$value"
|
||||
fun addSubpluginArguments(project: Project, kotlinTask: KotlinCompile) {
|
||||
val pluginOptions = kotlinTask.pluginOptions
|
||||
|
||||
for (subplugin in subplugins) {
|
||||
if (!subplugin.isApplicable(project, compileTask)) continue
|
||||
if (!subplugin.isApplicable(project, kotlinTask)) continue
|
||||
|
||||
with (subplugin) {
|
||||
project.logger.kotlinDebug("Subplugin ${getPluginName()} (${getGroupName()}:${getArtifactName()}) loaded.")
|
||||
}
|
||||
|
||||
val subpluginClasspath = subpluginClasspaths[subplugin]
|
||||
if (subpluginClasspath != null) {
|
||||
subpluginClasspath.forEach { realPluginClasspaths.add(it.absolutePath) }
|
||||
val subpluginClasspath = subpluginClasspaths[subplugin] ?: continue
|
||||
subpluginClasspath.forEach { pluginOptions.addClasspathEntry(it) }
|
||||
|
||||
for (arg in subplugin.getExtraArguments(project, compileTask)) {
|
||||
val option = getPluginOptionString(subplugin.getPluginName(), arg.key, arg.value)
|
||||
pluginArguments.add(option)
|
||||
}
|
||||
for (arg in subplugin.getExtraArguments(project, kotlinTask)) {
|
||||
pluginOptions.addPluginArgument(subplugin.getPluginName(), arg.key, arg.value)
|
||||
}
|
||||
}
|
||||
|
||||
val extraProperties = compileTask.extensions.extraProperties
|
||||
extraProperties.set("compilerPluginClasspaths", realPluginClasspaths.toTypedArray())
|
||||
extraProperties.set("compilerPluginArguments", pluginArguments.toTypedArray())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -610,10 +595,6 @@ open class GradleUtils(val scriptHandler: ScriptHandler, val project: ProjectInt
|
||||
internal operator fun FileCollection.plus(other: FileCollection) = this.plus(other)
|
||||
internal operator fun FileCollection.minus(other: FileCollection) = this.minus(other)
|
||||
|
||||
fun AbstractCompile.storeKaptAnnotationsFile(kapt: AnnotationProcessingManager) {
|
||||
extensions.extraProperties.set("kaptAnnotationsFile", kapt.getAnnotationFile())
|
||||
}
|
||||
|
||||
private fun Project.getAptDirsForSourceSet(sourceSetName: String): Pair<File, File> {
|
||||
val aptOutputDir = File(buildDir, "generated/source/kapt")
|
||||
val aptOutputDirForVariant = File(aptOutputDir, sourceSetName)
|
||||
|
||||
Reference in New Issue
Block a user