From 700d495d7f821a3369ee63b239e2bfa4bac54842 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 23 Jun 2015 18:26:04 +0300 Subject: [PATCH] kapt: Support inherited annotations in Gradle --- .../jetbrains/kotlin/gradle/tasks/Tasks.kt | 30 ++++++++++++------- .../kotlin/gradle/plugin/KaptExtension.kt | 2 ++ .../kotlin/gradle/plugin/KotlinPlugin.kt | 13 ++++++-- 3 files changed, 31 insertions(+), 14 deletions(-) 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 a82506ecb22..7808697de49 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 @@ -131,17 +131,7 @@ public open class KotlinCompile() : AbstractKotlinCompile>("compilerPluginArguments") ?: arrayOf() val pluginOptions = arrayListOf(*basePluginOptions) - - val kaptAnnotationsFile = extraProperties.getOrNull("kaptAnnotationsFile") - if (kaptAnnotationsFile != null) { - if (kaptAnnotationsFile.exists()) kaptAnnotationsFile.delete() - pluginOptions.add("plugin:$ANNOTATIONS_PLUGIN_NAME:output=" + kaptAnnotationsFile) - } - - val kaptClassFileStubsDir = extraProperties.getOrNull("stubsDir") - if (kaptClassFileStubsDir != null) { - pluginOptions.add("plugin:$ANNOTATIONS_PLUGIN_NAME:stubs=" + kaptClassFileStubsDir) - } + handleKaptProperties(extraProperties, pluginOptions) args.pluginOptions = pluginOptions.toTypedArray() getLogger().kotlinDebug("args.pluginOptions = ${args.pluginOptions.joinToString(File.pathSeparator)}") @@ -162,6 +152,24 @@ public open class KotlinCompile() : AbstractKotlinCompile) { + val kaptAnnotationsFile = extraProperties.getOrNull("kaptAnnotationsFile") + if (kaptAnnotationsFile != null) { + if (kaptAnnotationsFile.exists()) kaptAnnotationsFile.delete() + pluginOptions.add("plugin:$ANNOTATIONS_PLUGIN_NAME:output=" + kaptAnnotationsFile) + } + + val kaptClassFileStubsDir = extraProperties.getOrNull("kaptStubsDir") + if (kaptClassFileStubsDir != null) { + pluginOptions.add("plugin:$ANNOTATIONS_PLUGIN_NAME:stubs=" + kaptClassFileStubsDir) + } + + val supportInheritedAnnotations = extraProperties.getOrNull("kaptInheritedAnnotations") + if (supportInheritedAnnotations != null && supportInheritedAnnotations) { + pluginOptions.add("plugin:$ANNOTATIONS_PLUGIN_NAME:inherited=true") + } + } + private fun getJavaSourceRoots(): Set = getSource() .filter { it.isJavaFile() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KaptExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KaptExtension.kt index 024feeb6ed6..6dda5469d6c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KaptExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KaptExtension.kt @@ -23,6 +23,8 @@ public open class KaptExtension { public open var generateStubs: Boolean = false + public open var inheritedAnnotations: Boolean = true + private var closure: Closure<*>? = null public open fun arguments(closure: Closure<*>) { 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 55de4ff3b47..bc462afbd93 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 @@ -536,7 +536,7 @@ private class SubpluginEnvironment( } } - val extraProperties = compileTask.getExtensions().getExtraProperties() + val extraProperties = compileTask.extraProperties extraProperties.set("compilerPluginClasspaths", realPluginClasspaths.toTypedArray()) extraProperties.set("compilerPluginArguments", pluginArguments.toTypedArray()) } @@ -563,7 +563,7 @@ open class GradleUtils(val scriptHandler: ScriptHandler, val project: ProjectInt } private fun AbstractCompile.storeKaptAnnotationsFile(kapt: AnnotationProcessingManager) { - getExtensions().getExtraProperties().set("kaptAnnotationsFile", kapt.getAnnotationFile()) + extraProperties.set("kaptAnnotationsFile", kapt.getAnnotationFile()) } private fun Project.getAptDirsForSourceSet(kotlinTask: AbstractCompile, sourceSetName: String): Pair { @@ -607,7 +607,7 @@ private fun Project.initKapt( kotlinTask.getLogger().kotlinDebug("kapt: Using class file stubs") val stubsDir = File(getBuildDir(), "tmp/kapt/$variantName/classFileStubs") - kotlinTask.getExtensions().getExtraProperties().set("stubsDir", stubsDir) + kotlinTask.extraProperties.set("kaptStubsDir", stubsDir) javaTask.setClasspath(javaTask.getClasspath() + files(stubsDir)) @@ -621,6 +621,10 @@ private fun Project.initKapt( kotlinTask.getLogger().kotlinDebug("kapt: Class file stubs are not used") } + if (kaptExtension.inheritedAnnotations) { + kotlinTask.extraProperties.set("kaptInheritedAnnotations", true) + } + kotlinTask.doFirst { kaptManager.generateJavaHackFile() } @@ -682,6 +686,9 @@ private fun loadAndroidPluginVersion(): String? { } } +private val AbstractCompile.extraProperties: ExtraPropertiesExtension + get() = getExtensions().getExtraProperties() + //Copied from StringUtil.compareVersionNumbers private fun compareVersionNumbers(v1: String?, v2: String?): Int { if (v1 == null && v2 == null) {