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>? =
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)
}
}
@@ -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<T>(val variantData: T) {
abstract val sourceProviders: Iterable<SourceProvider>
abstract fun addJavaSourceFoldersToModel(generatedFilesDir: File)
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
@@ -159,7 +161,11 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
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<KotlinCompile> {
}
}
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<KotlinCompile> {
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<KotlinCompile> {
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<KotlinCompile> {
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)
}
@@ -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<out BaseVariantOutputData>,
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<String, String>? =
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<out BaseVariantOutputData>)