Refactor kapt tasks' wiring

* Unify tasks wiring for new and old Android Gradle Plugin
* rename wireKaptTask->registerGeneratedJavaSource
This commit is contained in:
Alexey Tsvetkov
2017-05-26 21:53:45 +03:00
parent e529592d15
commit 0a17dc3229
3 changed files with 34 additions and 28 deletions
@@ -117,14 +117,12 @@ class Android25ProjectHandler(kotlinConfigurationTools: KotlinConfigurationTools
override val annotationProcessorOptions: Map<String, String>? = override val annotationProcessorOptions: Map<String, String>? =
variantData.javaCompileOptions.annotationProcessorOptions.arguments variantData.javaCompileOptions.annotationProcessorOptions.arguments
override fun wireKaptTask(project: Project, override fun registerGeneratedJavaSource(
task: KaptTask, project: Project,
kotlinTask: KotlinCompile, kaptTask: KaptTask,
javaTask: AbstractCompile) { javaTask: AbstractCompile
) {
task.dependsOn(kotlinTask.dependsOn.minus(task)) val kaptSourceOutput = project.fileTree(kaptTask.destinationDir).builtBy(kaptTask)
val kaptSourceOutput = project.fileTree(task.destinationDir).builtBy(task)
variantData.registerExternalAptJavaOutput(kaptSourceOutput) variantData.registerExternalAptJavaOutput(kaptSourceOutput)
} }
} }
@@ -26,7 +26,6 @@ import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.compile.AbstractCompile import org.gradle.api.tasks.compile.AbstractCompile
import org.gradle.api.tasks.compile.JavaCompile import org.gradle.api.tasks.compile.JavaCompile
import org.jetbrains.kotlin.gradle.plugin.* 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.CompilerPluginOptions
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
@@ -48,7 +47,10 @@ abstract class KaptVariantData<T>(val variantData: T) {
abstract val sourceProviders: Iterable<SourceProvider> abstract val sourceProviders: Iterable<SourceProvider>
abstract fun addJavaSourceFoldersToModel(generatedFilesDir: File) abstract fun addJavaSourceFoldersToModel(generatedFilesDir: File)
abstract val annotationProcessorOptions: Map<String, String>? abstract val annotationProcessorOptions: Map<String, String>?
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 // Subplugin for the Kotlin Gradle plugin
@@ -159,7 +161,11 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
kaptVariantData, sourceSetName, kaptExtension, kaptClasspath) kaptVariantData, sourceSetName, kaptExtension, kaptClasspath)
val kaptGenerateStubsTask = context.createKaptGenerateStubsTask() 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] */ /** Plugin options are applied to kapt*Compile inside [createKaptKotlinTask] */
return emptyList() return emptyList()
@@ -255,7 +261,7 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
} }
} }
private fun Kapt3SubpluginContext.createKaptKotlinTask(kaptGenerateStubsTask: KaptGenerateStubsTask) { private fun Kapt3SubpluginContext.createKaptKotlinTask(): KaptTask {
val kaptTask = project.tasks.create(getKaptTaskName("kapt"), KaptTask::class.java) val kaptTask = project.tasks.create(getKaptTaskName("kapt"), KaptTask::class.java)
kaptTask.kotlinCompileTask = kotlinCompile kaptTask.kotlinCompileTask = kotlinCompile
@@ -276,17 +282,17 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
sourcesFromKotlinTask + stubSources sourcesFromKotlinTask + stubSources
} }
kaptTask.dependsOn(kaptGenerateStubsTask)
kotlinCompile.dependsOn(kaptTask)
kotlinCompile.source(sourcesOutputDir, kotlinSourcesOutputDir) kotlinCompile.source(sourcesOutputDir, kotlinSourcesOutputDir)
if (kaptVariantData != null) { if (kaptVariantData != null) {
kaptVariantData.wireKaptTask(project, kaptTask, kotlinCompile, javaCompile) kaptVariantData.registerGeneratedJavaSource(project, kaptTask, javaCompile)
} else { }
wireKaptTaskForJavaProject(kaptTask, kotlinCompile, javaCompile) else {
registerGeneratedJavaSource(kaptTask, javaCompile)
} }
buildAndAddOptionsTo(kaptTask.pluginOptions, aptMode = "apt") buildAndAddOptionsTo(kaptTask.pluginOptions, aptMode = "apt")
return kaptTask
} }
private fun Kapt3SubpluginContext.createKaptGenerateStubsTask(): KaptGenerateStubsTask { private fun Kapt3SubpluginContext.createKaptGenerateStubsTask(): KaptGenerateStubsTask {
@@ -301,8 +307,6 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
kaptTask.mapClasspath { kotlinCompile.classpath } kaptTask.mapClasspath { kotlinCompile.classpath }
kaptTask.generatedSourcesDir = sourcesOutputDir kaptTask.generatedSourcesDir = sourcesOutputDir
kaptTask.dependsOn(*(javaCompile.dependsOn.filter { it !== kotlinCompile }.toTypedArray()))
buildAndAddOptionsTo(kaptTask.pluginOptions, aptMode = "stubs") buildAndAddOptionsTo(kaptTask.pluginOptions, aptMode = "stubs")
return kaptTask return kaptTask
@@ -335,7 +339,6 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
override fun getArtifactName() = "kotlin-annotation-processing" override fun getArtifactName() = "kotlin-annotation-processing"
} }
internal fun wireKaptTaskForJavaProject(task: KaptTask, kotlinTask: KotlinCompile, javaTask: AbstractCompile) { internal fun registerGeneratedJavaSource(kaptTask: KaptTask, javaTask: AbstractCompile) {
task.dependsOn(*(javaTask.dependsOn.filter { it !== kotlinTask && it != kotlinTask.name }.toTypedArray())) javaTask.source(kaptTask.destinationDir)
javaTask.source(task.destinationDir)
} }
@@ -11,7 +11,7 @@ import org.gradle.api.ProjectConfigurationException
import org.gradle.api.tasks.compile.AbstractCompile import org.gradle.api.tasks.compile.AbstractCompile
import org.jetbrains.kotlin.gradle.internal.KaptTask import org.jetbrains.kotlin.gradle.internal.KaptTask
import org.jetbrains.kotlin.gradle.internal.KaptVariantData 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.plugin.android.AndroidGradleWrapper
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.incremental.configureMultiProjectIncrementalCompilation import org.jetbrains.kotlin.incremental.configureMultiProjectIncrementalCompilation
@@ -41,9 +41,9 @@ internal class LegacyAndroidAndroidProjectHandler(kotlinConfigurationTools: Kotl
variantData: BaseVariantData<out BaseVariantOutputData>, variantData: BaseVariantData<out BaseVariantOutputData>,
javaTask: AbstractCompile, javaTask: AbstractCompile,
kotlinTask: KotlinCompile, kotlinTask: KotlinCompile,
kotlinAfterJavaTask: KotlinCompile?) { kotlinAfterJavaTask: KotlinCompile?
) {
kotlinTask.setDependsOn(javaTask.dependsOn) kotlinTask.dependsOn(*javaTask.dependsOn.toTypedArray())
kotlinTask.mapClasspath { kotlinTask.mapClasspath {
javaTask.classpath + project.files(AndroidGradleWrapper.getRuntimeJars(androidPlugin, androidExt)) javaTask.classpath + project.files(AndroidGradleWrapper.getRuntimeJars(androidPlugin, androidExt))
@@ -118,8 +118,13 @@ internal class LegacyAndroidAndroidProjectHandler(kotlinConfigurationTools: Kotl
override val annotationProcessorOptions: Map<String, String>? = override val annotationProcessorOptions: Map<String, String>? =
AndroidGradleWrapper.getAnnotationProcessorOptionsFromAndroidVariant(variantData) AndroidGradleWrapper.getAnnotationProcessorOptionsFromAndroidVariant(variantData)
override fun wireKaptTask(project: Project, task: KaptTask, kotlinTask: KotlinCompile, javaTask: AbstractCompile) = override fun registerGeneratedJavaSource(
wireKaptTaskForJavaProject(task, kotlinTask, javaTask) project: Project,
kaptTask: KaptTask,
javaTask: AbstractCompile
) {
registerGeneratedJavaSource(kaptTask, javaTask)
}
} }
override fun wrapVariantDataForKapt(variantData: BaseVariantData<out BaseVariantOutputData>) override fun wrapVariantDataForKapt(variantData: BaseVariantData<out BaseVariantOutputData>)