From 3e5b24f2a295adc367ee23d0b2ba49c71acd80c4 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Fri, 15 May 2015 15:43:53 +0300 Subject: [PATCH] Add output dir for generated sources --- .../tasks/AnnotationProcessingManager.kt | 36 +++++++++++++++---- .../jetbrains/kotlin/gradle/tasks/Tasks.kt | 1 + .../kotlin/gradle/plugin/KotlinPlugin.kt | 5 +++ 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/AnnotationProcessingManager.kt b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/AnnotationProcessingManager.kt index b1920048e1c..5b261c8e64e 100644 --- a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/AnnotationProcessingManager.kt +++ b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/AnnotationProcessingManager.kt @@ -42,10 +42,14 @@ public class AnnotationProcessingManager(private val task: KotlinCompile) { } fun afterKotlinCompile(outputDirFile: File) { + val extraProperties = task.getExtensions().getExtraProperties() [suppress("UNCHECKED_CAST")] - val javaTask = (task.getExtensions().getExtraProperties().get("javaTask") as? WeakReference)?.get() + val javaTask = (extraProperties.get("javaTask") as? WeakReference)?.get() + val aptFiles = task.aptFiles - if (javaTask == null || aptFiles.isEmpty()) return + val aptOutputDir = task.kotlinAptOutputDir + + if (javaTask == null || aptFiles.isEmpty() || aptOutputDir == null) return val aptDir = File(outputDirFile, "0apt") val annotationDeclarationsFile = File(aptDir, ANNOTATIONS_FILENAME) @@ -56,6 +60,8 @@ public class AnnotationProcessingManager(private val task: KotlinCompile) { val annotationProcessorFqNames = lookupAnnotationProcessors(aptFiles) generateAnnotationProcessorStubs(aptDir, javaTask, annotationProcessorFqNames) + + addGeneratedSourcesOutputToCompilerArgs(javaTask, aptOutputDir) } private fun generateJavaHackFile(aptDir: File, javaTask: JavaCompile) { @@ -98,12 +104,12 @@ public class AnnotationProcessingManager(private val task: KotlinCompile) { private fun addWrappersToCompilerArgs(javaTask: JavaCompile, wrapperFqNames: String) { val compilerArgs = javaTask.getOptions().getCompilerArgs() - val processorArgIndex = compilerArgs.indexOfFirst { "-processor" == it } + val argIndex = compilerArgs.indexOfFirst { "-processor" == it } // Already has a "-processor" argument (and it is not the last one) - if (processorArgIndex >= 0 && compilerArgs.size() > (processorArgIndex + 1)) { - compilerArgs[processorArgIndex + 1] = - compilerArgs[processorArgIndex + 1] + "," + wrapperFqNames + if (argIndex >= 0 && compilerArgs.size() > (argIndex + 1)) { + compilerArgs[argIndex + 1] = + compilerArgs[argIndex + 1] + "," + wrapperFqNames } else { compilerArgs.add("-processor") @@ -113,6 +119,24 @@ public class AnnotationProcessingManager(private val task: KotlinCompile) { javaTask.getOptions().setCompilerArgs(compilerArgs) } + private fun addGeneratedSourcesOutputToCompilerArgs(javaTask: JavaCompile, outputDir: File) { + outputDir.mkdirs() + + val compilerArgs = javaTask.getOptions().getCompilerArgs().toArrayList() + + val argIndex = compilerArgs.indexOfFirst { "-s" == it } + + if (argIndex >= 0 && compilerArgs.size() > (argIndex + 1)) { + compilerArgs[argIndex + 1] = outputDir.getAbsolutePath() + } + else { + compilerArgs.add("-s") + compilerArgs.add(outputDir.getAbsolutePath()) + } + + javaTask.getOptions().setCompilerArgs(compilerArgs) + } + private fun generateKotlinAptAnnotation(outputDirectory: File) { val packageName = "__gen" val className = "KotlinAptAnnotation" 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 52311046854..45a1abc68bc 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 @@ -106,6 +106,7 @@ public open class KotlinCompile() : AbstractKotlinCompile = emptySet() + public var kotlinAptOutputDir: File? = null val srcDirsSources = HashSet() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index d6218ecba4d..a8c46e4ce16 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -404,6 +404,11 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t kotlinTask.setProperty("aptFiles", aptFiles) + val aptOutputDir = project.file(File(project.getBuildDir(), "generated/source/kotlinApt")) + val aptOutputDirForVariant = File(aptOutputDir, variantDataName) + kotlinTask.setProperty("kotlinAptOutputDir", aptOutputDirForVariant) + variantData.addJavaSourceFoldersToModel(aptOutputDirForVariant) + kotlinTask doFirst { val androidRT = project.files(AndroidGradleWrapper.getRuntimeJars(androidPlugin, androidExt)) val fullClasspath = (javaTask.getClasspath() + androidRT) - project.files(kotlinTask.property("kotlinDestinationDir"))