From 803bfd6097dc4b7266aa588e78e10dbbf7981ca9 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Fri, 15 May 2015 18:54:38 +0300 Subject: [PATCH] Add kotlin-annotation-processing dependency automatically in kotlinApt configurations --- .../kotlin/gradle/plugin/KotlinPlugin.kt | 22 ++++++++--- .../gradle/plugin/KotlinPluginWrapper.kt | 19 +--------- .../gradle/plugin/kotlinPluginVersion.kt | 38 +++++++++++++++++++ 3 files changed, 55 insertions(+), 24 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/kotlinPluginVersion.kt 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 20f9b774fb5..70d5dce5281 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 @@ -280,6 +280,9 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t val aptConfigurations = hashMapOf() + val projectVersion = loadKotlinVersionFromResource(log) + val kotlinAnnotationProcessingDep = "org.jetbrains.kotlin:kotlin-annotation-processing:$projectVersion" + ext.getSourceSets().all(Action { sourceSet -> if (sourceSet is HasConvention) { val sourceSetName = sourceSet.getName() @@ -292,7 +295,9 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t "kotlinApt${sourceSet.getName().capitalize()}" } else "kotlinApt" - aptConfigurations.put(sourceSet.getName(), project.getConfigurations().create(aptConfigurationName)) + val aptConfiguration = project.getConfigurations().create(aptConfigurationName) + aptConfiguration.getDependencies().add(project.getDependencies().create(kotlinAnnotationProcessingDep)) + aptConfigurations.put(sourceSet.getName(), aptConfiguration) /*TODO: before 0.11 gradle android plugin there was: sourceSet.getAllJava().source(kotlinDirSet) @@ -313,10 +318,8 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t val plugin = (project.getPlugins().findPlugin("android") ?: project.getPlugins().findPlugin("android-library")) as BasePlugin - val aptConfigurationDependencyFiles = aptConfigurations.mapValues { it.getValue().resolve() } - processVariantData(plugin.getVariantManager().getVariantDataList(), project, - ext, plugin, aptConfigurationDependencyFiles) + ext, plugin, aptConfigurations) } } @@ -329,7 +332,7 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t project: Project, androidExt: BaseExtension, androidPlugin: BasePlugin, - aptConfigurations: Map> + aptConfigurations: Map ) { val logger = project.getLogger() val kotlinOptions = getExtension(androidExt, "kotlinOptions") @@ -386,7 +389,12 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t kotlinTask.source(kotlinSourceDirectorySet) kotlinSourceDirectorySet.addSourceDirectories(javaSrcDirs) - aptFiles.addAll(aptConfigurations[(provider as AndroidSourceSet).getName()]) + + val aptConfiguration = aptConfigurations[(provider as AndroidSourceSet).getName()] + // Ignore if there's only an annotation processor wrapper in dependencies (added by default) + if (aptConfiguration != null && aptConfiguration.getDependencies().size() > 1) { + aptFiles.addAll(aptConfiguration.resolve()) + } } subpluginEnvironment.addSubpluginArguments(project, kotlinTask) @@ -423,6 +431,8 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t val result = (obj as HasConvention).getConvention().getPlugins()[extensionName] return result as T } + + } private fun loadSubplugins(project: Project, logger: Logger): SubpluginEnvironment { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt index 8ef9d0fc980..1b0ab09a724 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt @@ -25,7 +25,7 @@ abstract class KotlinBasePluginWrapper: Plugin { return } - val kotlinPluginVersion = loadKotlinVersionFromResource() + val kotlinPluginVersion = loadKotlinVersionFromResource(log) project.getExtensions().getExtraProperties()?.set("kotlin.gradle.plugin.version", kotlinPluginVersion) val pluginClassLoader = createPluginIsolatedClassLoader(kotlinPluginVersion, sourceBuildScript) @@ -56,23 +56,6 @@ abstract class KotlinBasePluginWrapper: Plugin { return kotlinPluginClassloader } - private fun loadKotlinVersionFromResource(): String { - log.debug("Loading version information") - val props = Properties() - val propFileName = "project.properties" - val inputStream = this.javaClass.getClassLoader()!!.getResourceAsStream(propFileName) - - if (inputStream == null) { - throw FileNotFoundException("property file '" + propFileName + "' not found in the classpath") - } - - props.load(inputStream) - - val projectVersion = props["project.version"] as String - log.debug("Found project version [$projectVersion]") - return projectVersion - } - private fun findSourceBuildScript(project: Project): ScriptHandler? { log.debug("Looking for proper script handler") var curProject = project diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/kotlinPluginVersion.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/kotlinPluginVersion.kt new file mode 100644 index 00000000000..432f2780da8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/kotlinPluginVersion.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.gradle.plugin + +import org.gradle.api.logging.Logger +import java.io.FileNotFoundException +import java.util.* + +private fun Any.loadKotlinVersionFromResource(log: Logger): String { + log.debug("Loading version information") + val props = Properties() + val propFileName = "project.properties" + val inputStream = javaClass.getClassLoader()!!.getResourceAsStream(propFileName) + + if (inputStream == null) { + throw FileNotFoundException("property file '" + propFileName + "' not found in the classpath") + } + + props.load(inputStream) + + val projectVersion = props["project.version"] as String + log.debug("Found project version [$projectVersion]") + return projectVersion +} \ No newline at end of file