kapt: Create kotlinAfterJava task after project evaluation

This commit is contained in:
Yan Zhulanow
2015-06-09 19:19:17 +03:00
parent 7561b43336
commit 3cfdf21aa4
@@ -140,12 +140,11 @@ class Kotlin2JvmSourceSetProcessor(
val javaTask = project.getTasks().findByName(sourceSet.getCompileJavaTaskName()) as AbstractCompile? val javaTask = project.getTasks().findByName(sourceSet.getCompileJavaTaskName()) as AbstractCompile?
val kotlinAfterJavaTask = if (javaTask is JavaCompile) { if (javaTask != null) {
project.createKotlinAfterJavaTask(kotlinTask, javaTask, kotlinDestinationDir) { javaTask.dependsOn(kotlinTaskName)
createKotlinCompileTask(it) val javacClassPath = javaTask.getClasspath() + project.files(kotlinDestinationDir);
} javaTask.setClasspath(javacClassPath)
} }
else null
val kotlinAnnotationProcessingDep = cachedKotlinAnnotationProcessingDep ?: run { val kotlinAnnotationProcessingDep = cachedKotlinAnnotationProcessingDep ?: run {
val projectVersion = loadKotlinVersionFromResource(project.getLogger()) val projectVersion = loadKotlinVersionFromResource(project.getLogger())
@@ -162,13 +161,15 @@ class Kotlin2JvmSourceSetProcessor(
kotlinDirSet?.srcDir(dir) kotlinDirSet?.srcDir(dir)
} }
if (aptConfiguration.getDependencies().size() > 1 && javaTask is JavaCompile && kotlinAfterJavaTask != null) { if (aptConfiguration.getDependencies().size() > 1 && javaTask is JavaCompile) {
val (aptOutputDir, aptWorkingDir) = project.getAptDirsForSourceSet(kotlinTask, sourceSetName) val (aptOutputDir, aptWorkingDir) = project.getAptDirsForSourceSet(kotlinTask, sourceSetName)
val kaptManager = AnnotationProcessingManager(kotlinTask, javaTask, sourceSetName, val kaptManager = AnnotationProcessingManager(kotlinTask, javaTask, sourceSetName,
aptConfiguration.resolve(), aptOutputDir, aptWorkingDir) aptConfiguration.resolve(), aptOutputDir, aptWorkingDir)
project.initKapt(kotlinTask, kotlinAfterJavaTask, javaTask, kaptManager, sourceSetName) project.initKapt(kotlinTask, javaTask, kaptManager, sourceSetName, kotlinDestinationDir) {
createKotlinCompileTask(it)
}
} }
} }
} }
@@ -434,16 +435,14 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t
val (aptOutputDir, aptWorkingDir) = project.getAptDirsForSourceSet(kotlinTask, variantDataName) val (aptOutputDir, aptWorkingDir) = project.getAptDirsForSourceSet(kotlinTask, variantDataName)
variantData.addJavaSourceFoldersToModel(aptOutputDir) variantData.addJavaSourceFoldersToModel(aptOutputDir)
val kotlinAfterJavaTask = project.createKotlinAfterJavaTask(kotlinTask, javaTask, kotlinOutputDir) {
tasksProvider.createKotlinJVMTask(project, kotlinTaskName + "AfterJava")
}
if (javaTask is JavaCompile && aptFiles.isNotEmpty()) { if (javaTask is JavaCompile && aptFiles.isNotEmpty()) {
val kaptManager = AnnotationProcessingManager(kotlinTask, javaTask, variantDataName, val kaptManager = AnnotationProcessingManager(kotlinTask, javaTask, variantDataName,
aptFiles.toSet(), aptOutputDir, aptWorkingDir) aptFiles.toSet(), aptOutputDir, aptWorkingDir)
kotlinTask.storeKaptAnnotationsFile(kaptManager) kotlinTask.storeKaptAnnotationsFile(kaptManager)
project.initKapt(kotlinTask, kotlinAfterJavaTask, javaTask, kaptManager, variantDataName, subpluginEnvironment) project.initKapt(kotlinTask, javaTask, kaptManager, variantDataName, kotlinOutputDir, subpluginEnvironment) {
tasksProvider.createKotlinJVMTask(project, kotlinTaskName + "AfterJava")
}
} }
javaTask doFirst { javaTask doFirst {
@@ -573,16 +572,20 @@ private fun Project.createKaptExtension() {
private fun Project.initKapt( private fun Project.initKapt(
kotlinTask: AbstractCompile, kotlinTask: AbstractCompile,
kotlinAfterJavaTask: AbstractCompile,
javaTask: AbstractCompile, javaTask: AbstractCompile,
kaptManager: AnnotationProcessingManager, kaptManager: AnnotationProcessingManager,
variantName: String, variantName: String,
subpluginEnvironment: SubpluginEnvironment? = null kotlinOutputDir: File,
subpluginEnvironment: SubpluginEnvironment? = null,
taskFactory: (suffix: String) -> AbstractCompile
) { ) {
val kaptExtension = getExtensions().kapt val kaptExtension = getExtensions().kapt
val environment = subpluginEnvironment ?: loadSubplugins(this, getLogger()) val environment = subpluginEnvironment ?: loadSubplugins(this, getLogger())
val kotlinAfterJavaTask: AbstractCompile?
if (kaptExtension.generateStubs) { if (kaptExtension.generateStubs) {
kotlinAfterJavaTask = createKotlinAfterJavaTask(kotlinTask, javaTask, kotlinOutputDir, taskFactory)
kotlinTask.getLogger().kotlinDebug("kapt: Using class file stubs") kotlinTask.getLogger().kotlinDebug("kapt: Using class file stubs")
val stubsDir = File(getBuildDir(), "tmp/kapt/$variantName/classFileStubs") val stubsDir = File(getBuildDir(), "tmp/kapt/$variantName/classFileStubs")
@@ -596,15 +599,14 @@ private fun Project.initKapt(
environment.addSubpluginArguments(this, kotlinAfterJavaTask) environment.addSubpluginArguments(this, kotlinAfterJavaTask)
} else { } else {
kotlinAfterJavaTask = null
kotlinTask.getLogger().kotlinDebug("kapt: Class file stubs are not used") kotlinTask.getLogger().kotlinDebug("kapt: Class file stubs are not used")
kotlinAfterJavaTask.setEnabled(false)
environment.addSubpluginArguments(this, kotlinTask) environment.addSubpluginArguments(this, kotlinTask)
} }
javaTask.doFirst { javaTask.doFirst {
kaptManager.setupKapt() kaptManager.setupKapt()
kotlinAfterJavaTask.setClasspath(files(kotlinTask.getClasspath(), javaTask.getDestinationDir())) kotlinAfterJavaTask?.setClasspath(files(kotlinTask.getClasspath(), javaTask.getDestinationDir()))
} }
javaTask.doLast { javaTask.doLast {
@@ -620,10 +622,6 @@ private fun Project.createKotlinAfterJavaTask(
kotlinDestinationDir: File, kotlinDestinationDir: File,
taskFactory: (suffix: String) -> AbstractCompile taskFactory: (suffix: String) -> AbstractCompile
): AbstractCompile { ): AbstractCompile {
javaTask.dependsOn(kotlinTask.getName())
val javacClassPath = javaTask.getClasspath() + files(kotlinDestinationDir)
javaTask.setClasspath(javacClassPath)
val kotlinTaskAfterJava = taskFactory("AfterJava") val kotlinTaskAfterJava = taskFactory("AfterJava")
kotlinTaskAfterJava.setProperty("kotlinDestinationDir", kotlinDestinationDir) kotlinTaskAfterJava.setProperty("kotlinDestinationDir", kotlinDestinationDir)
kotlinTaskAfterJava.setDestinationDir(javaTask.getDestinationDir()) kotlinTaskAfterJava.setDestinationDir(javaTask.getDestinationDir())