From f7a665d0d24e48cb0d50e245ceb70b15acb36e00 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Mon, 25 Apr 2016 18:01:16 +0300 Subject: [PATCH] Fix incremental compilation with kapt generating stubs Changes: * map incremental property to compile kotlin after java task * when generating stubs compile kotlin task should not remove or copy classfiles --- .../kotlin/annotation/AnnotationFileUpdater.kt | 6 ++++-- .../kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt | 10 +++++++++- .../gradle/internal/AnnotationProcessingManager.kt | 4 ++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/annotation/AnnotationFileUpdater.kt b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/annotation/AnnotationFileUpdater.kt index ac72ba748b7..0f0dd2834c3 100644 --- a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/annotation/AnnotationFileUpdater.kt +++ b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/annotation/AnnotationFileUpdater.kt @@ -29,8 +29,6 @@ class AnnotationFileUpdater(private val generatedAnnotationFile: File) { else { lastSuccessfullyUpdatedFile.writeText("") } - - lastSuccessfullyUpdatedFile.deleteOnExit() } fun updateAnnotations(outdatedClasses: Iterable) { @@ -58,4 +56,8 @@ class AnnotationFileUpdater(private val generatedAnnotationFile: File) { fun revert() { lastSuccessfullyUpdatedFile.copyTo(generatedAnnotationFile, overwrite = true) } + + fun dispose() { + lastSuccessfullyUpdatedFile.delete() + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 8b6ec56c31a..0f1d098a231 100644 --- a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -175,6 +175,7 @@ open class KotlinCompile() : AbstractKotlinCompile() { } private var kaptAnnotationsFileUpdater: AnnotationFileUpdater? = null + private var kaptStubGeneratingMode = false override fun populateTargetSpecificArgs(args: K2JVMCompilerArguments) { // show kotlin compiler where to look for java source files @@ -384,7 +385,9 @@ open class KotlinCompile() : AbstractKotlinCompile() { targets.forEach { getIncrementalCache(it).let { it.markOutputClassesDirty(removedAndModified) - it.removeClassfilesBySources(removedAndModified) + if (!kaptStubGeneratingMode) { + it.removeClassfilesBySources(removedAndModified) + } }} // can be empty if only removed sources are present @@ -508,6 +511,7 @@ open class KotlinCompile() : AbstractKotlinCompile() { val kaptClassFileStubsDir = extraProperties.getOrNull("kaptStubsDir") if (kaptClassFileStubsDir != null) { + kaptStubGeneratingMode = true pluginOptions.add("plugin:$ANNOTATIONS_PLUGIN_NAME:stubs=" + kaptClassFileStubsDir) } @@ -531,6 +535,10 @@ open class KotlinCompile() : AbstractKotlinCompile() { } override fun afterCompileHook(args: K2JVMCompilerArguments) { + kaptAnnotationsFileUpdater?.dispose() + + if (kaptStubGeneratingMode) return + logger.debug("Copying resulting files to classes") // Copy kotlin classes to all classes directory diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AnnotationProcessingManager.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AnnotationProcessingManager.kt index cc55b83d41b..745661cf616 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AnnotationProcessingManager.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AnnotationProcessingManager.kt @@ -41,6 +41,7 @@ fun Project.initKapt( if (kaptExtension.generateStubs) { kotlinAfterJavaTask = createKotlinAfterJavaTask(javaTask, kotlinTask, kotlinOptions, taskFactory) + mapKotlinTaskProperties(this, kotlinAfterJavaTask) kotlinTask.logger.kotlinDebug("kapt: Using class file stubs") @@ -171,6 +172,9 @@ public class AnnotationProcessingManager( val processorPath = setOf(wrappersDirectory) + aptFiles setProcessorPath(javaTask, (processorPath + javaTask.classpath).joinToString(File.pathSeparator)) + if (aptOutputDir.exists()) { + aptOutputDir.deleteRecursively() + } addGeneratedSourcesOutputToCompilerArgs(javaTask, aptOutputDir) appendAnnotationsArguments()