From 0a17dc3229cab7cefdb8deee5f405a078c3a230f Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Fri, 26 May 2017 21:53:45 +0300 Subject: [PATCH] Refactor kapt tasks' wiring * Unify tasks wiring for new and old Android Gradle Plugin * rename wireKaptTask->registerGeneratedJavaSource --- .../plugin/android/Android25ProjectHandler.kt | 14 ++++----- .../internal/Kapt3KotlinGradleSubplugin.kt | 31 ++++++++++--------- .../LegacyAndroidAndroidProjectHandler.kt | 17 ++++++---- 3 files changed, 34 insertions(+), 28 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/agp25/kotlin/org/jetbrains/kotlin/gradle/plugin/android/Android25ProjectHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/agp25/kotlin/org/jetbrains/kotlin/gradle/plugin/android/Android25ProjectHandler.kt index 26385238d4b..1d2128878b4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/agp25/kotlin/org/jetbrains/kotlin/gradle/plugin/android/Android25ProjectHandler.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/agp25/kotlin/org/jetbrains/kotlin/gradle/plugin/android/Android25ProjectHandler.kt @@ -117,14 +117,12 @@ class Android25ProjectHandler(kotlinConfigurationTools: KotlinConfigurationTools override val annotationProcessorOptions: Map? = variantData.javaCompileOptions.annotationProcessorOptions.arguments - override fun wireKaptTask(project: Project, - task: KaptTask, - kotlinTask: KotlinCompile, - javaTask: AbstractCompile) { - - task.dependsOn(kotlinTask.dependsOn.minus(task)) - - val kaptSourceOutput = project.fileTree(task.destinationDir).builtBy(task) + override fun registerGeneratedJavaSource( + project: Project, + kaptTask: KaptTask, + javaTask: AbstractCompile + ) { + val kaptSourceOutput = project.fileTree(kaptTask.destinationDir).builtBy(kaptTask) variantData.registerExternalAptJavaOutput(kaptSourceOutput) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/Kapt3KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/Kapt3KotlinGradleSubplugin.kt index 302fcfa2e37..9414e58fbc6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/Kapt3KotlinGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/Kapt3KotlinGradleSubplugin.kt @@ -26,7 +26,6 @@ import org.gradle.api.tasks.SourceSet 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.plugin.android.AndroidGradleWrapper import org.jetbrains.kotlin.gradle.tasks.CompilerPluginOptions import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import java.io.ByteArrayOutputStream @@ -48,7 +47,10 @@ abstract class KaptVariantData(val variantData: T) { abstract val sourceProviders: Iterable abstract fun addJavaSourceFoldersToModel(generatedFilesDir: File) abstract val annotationProcessorOptions: Map? - abstract fun wireKaptTask(project: Project, task: KaptTask, kotlinTask: KotlinCompile, javaTask: AbstractCompile) + abstract fun registerGeneratedJavaSource( + project: Project, + kaptTask: KaptTask, + javaTask: AbstractCompile) } // Subplugin for the Kotlin Gradle plugin @@ -159,7 +161,11 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { kaptVariantData, sourceSetName, kaptExtension, kaptClasspath) val kaptGenerateStubsTask = context.createKaptGenerateStubsTask() - context.createKaptKotlinTask(kaptGenerateStubsTask) + val kaptTask = context.createKaptKotlinTask() + + kaptGenerateStubsTask.dependsOn(*kotlinCompile.dependsOn.toTypedArray()) + kaptTask.dependsOn(kaptGenerateStubsTask) + kotlinCompile.dependsOn(kaptTask) /** Plugin options are applied to kapt*Compile inside [createKaptKotlinTask] */ return emptyList() @@ -255,7 +261,7 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { } } - private fun Kapt3SubpluginContext.createKaptKotlinTask(kaptGenerateStubsTask: KaptGenerateStubsTask) { + private fun Kapt3SubpluginContext.createKaptKotlinTask(): KaptTask { val kaptTask = project.tasks.create(getKaptTaskName("kapt"), KaptTask::class.java) kaptTask.kotlinCompileTask = kotlinCompile @@ -276,17 +282,17 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { sourcesFromKotlinTask + stubSources } - kaptTask.dependsOn(kaptGenerateStubsTask) - kotlinCompile.dependsOn(kaptTask) kotlinCompile.source(sourcesOutputDir, kotlinSourcesOutputDir) if (kaptVariantData != null) { - kaptVariantData.wireKaptTask(project, kaptTask, kotlinCompile, javaCompile) - } else { - wireKaptTaskForJavaProject(kaptTask, kotlinCompile, javaCompile) + kaptVariantData.registerGeneratedJavaSource(project, kaptTask, javaCompile) + } + else { + registerGeneratedJavaSource(kaptTask, javaCompile) } buildAndAddOptionsTo(kaptTask.pluginOptions, aptMode = "apt") + return kaptTask } private fun Kapt3SubpluginContext.createKaptGenerateStubsTask(): KaptGenerateStubsTask { @@ -301,8 +307,6 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { kaptTask.mapClasspath { kotlinCompile.classpath } kaptTask.generatedSourcesDir = sourcesOutputDir - kaptTask.dependsOn(*(javaCompile.dependsOn.filter { it !== kotlinCompile }.toTypedArray())) - buildAndAddOptionsTo(kaptTask.pluginOptions, aptMode = "stubs") return kaptTask @@ -335,7 +339,6 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { override fun getArtifactName() = "kotlin-annotation-processing" } -internal fun wireKaptTaskForJavaProject(task: KaptTask, kotlinTask: KotlinCompile, javaTask: AbstractCompile) { - task.dependsOn(*(javaTask.dependsOn.filter { it !== kotlinTask && it != kotlinTask.name }.toTypedArray())) - javaTask.source(task.destinationDir) +internal fun registerGeneratedJavaSource(kaptTask: KaptTask, javaTask: AbstractCompile) { + javaTask.source(kaptTask.destinationDir) } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/LegacyAndroidAndroidProjectHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/LegacyAndroidAndroidProjectHandler.kt index 68cf2dfa0a8..40d15400108 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/LegacyAndroidAndroidProjectHandler.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/LegacyAndroidAndroidProjectHandler.kt @@ -11,7 +11,7 @@ import org.gradle.api.ProjectConfigurationException import org.gradle.api.tasks.compile.AbstractCompile import org.jetbrains.kotlin.gradle.internal.KaptTask import org.jetbrains.kotlin.gradle.internal.KaptVariantData -import org.jetbrains.kotlin.gradle.internal.wireKaptTaskForJavaProject +import org.jetbrains.kotlin.gradle.internal.registerGeneratedJavaSource import org.jetbrains.kotlin.gradle.plugin.android.AndroidGradleWrapper import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.incremental.configureMultiProjectIncrementalCompilation @@ -41,9 +41,9 @@ internal class LegacyAndroidAndroidProjectHandler(kotlinConfigurationTools: Kotl variantData: BaseVariantData, javaTask: AbstractCompile, kotlinTask: KotlinCompile, - kotlinAfterJavaTask: KotlinCompile?) { - - kotlinTask.setDependsOn(javaTask.dependsOn) + kotlinAfterJavaTask: KotlinCompile? + ) { + kotlinTask.dependsOn(*javaTask.dependsOn.toTypedArray()) kotlinTask.mapClasspath { javaTask.classpath + project.files(AndroidGradleWrapper.getRuntimeJars(androidPlugin, androidExt)) @@ -118,8 +118,13 @@ internal class LegacyAndroidAndroidProjectHandler(kotlinConfigurationTools: Kotl override val annotationProcessorOptions: Map? = AndroidGradleWrapper.getAnnotationProcessorOptionsFromAndroidVariant(variantData) - override fun wireKaptTask(project: Project, task: KaptTask, kotlinTask: KotlinCompile, javaTask: AbstractCompile) = - wireKaptTaskForJavaProject(task, kotlinTask, javaTask) + override fun registerGeneratedJavaSource( + project: Project, + kaptTask: KaptTask, + javaTask: AbstractCompile + ) { + registerGeneratedJavaSource(kaptTask, javaTask) + } } override fun wrapVariantDataForKapt(variantData: BaseVariantData)