Kapt: 'kaptKotlin' task should be invoked only when all task dependencies from kapt configuration is built (KT-19178)

This commit is contained in:
Yan Zhulanow
2017-07-21 19:36:44 +03:00
parent c2be771486
commit 53fda33499
@@ -24,9 +24,9 @@ import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.Dependency import org.gradle.api.artifacts.Dependency
import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.TaskDependency
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.com.intellij.openapi.util.io.FileUtil
import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.*
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
@@ -132,6 +132,7 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
assert((variantData != null) xor (javaSourceSet != null)) assert((variantData != null) xor (javaSourceSet != null))
val kaptClasspath = arrayListOf<File>() val kaptClasspath = arrayListOf<File>()
val buildDependencies = arrayListOf<TaskDependency>()
fun handleSourceSet(sourceSetName: String) { fun handleSourceSet(sourceSetName: String) {
val kaptConfiguration = project.findKaptConfiguration(sourceSetName) val kaptConfiguration = project.findKaptConfiguration(sourceSetName)
@@ -139,9 +140,12 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
it.group != getGroupName() || it.name != getArtifactName() it.group != getGroupName() || it.name != getArtifactName()
} ?: emptyList() } ?: emptyList()
if (kaptConfiguration != null && filteredDependencies.isNotEmpty()) { if (kaptConfiguration != null) {
javaCompile.dependsOn(kaptConfiguration.buildDependencies) buildDependencies += kaptConfiguration.buildDependencies
kaptClasspath.addAll(kaptConfiguration.resolve())
if (filteredDependencies.isNotEmpty()) {
kaptClasspath.addAll(kaptConfiguration.resolve())
}
} }
} }
@@ -169,6 +173,8 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
val kaptGenerateStubsTask = context.createKaptGenerateStubsTask() val kaptGenerateStubsTask = context.createKaptGenerateStubsTask()
val kaptTask = context.createKaptKotlinTask() val kaptTask = context.createKaptKotlinTask()
kaptTask.dependsOn(*buildDependencies.toTypedArray())
kaptGenerateStubsTask.dependsOn(*kotlinCompile.dependsOn.toTypedArray()) kaptGenerateStubsTask.dependsOn(*kotlinCompile.dependsOn.toTypedArray())
kaptTask.dependsOn(kaptGenerateStubsTask) kaptTask.dependsOn(kaptGenerateStubsTask)
kotlinCompile.dependsOn(kaptTask) kotlinCompile.dependsOn(kaptTask)