Add kotlin-annotation-processing dependency automatically in kotlinApt configurations

This commit is contained in:
Yan Zhulanow
2015-05-15 18:54:38 +03:00
parent 964e57a8f8
commit 803bfd6097
3 changed files with 55 additions and 24 deletions
@@ -280,6 +280,9 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t
val aptConfigurations = hashMapOf<String, Configuration>()
val projectVersion = loadKotlinVersionFromResource(log)
val kotlinAnnotationProcessingDep = "org.jetbrains.kotlin:kotlin-annotation-processing:$projectVersion"
ext.getSourceSets().all(Action<AndroidSourceSet> { 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<String, Set<File>>
aptConfigurations: Map<String, Configuration>
) {
val logger = project.getLogger()
val kotlinOptions = getExtension<Any?>(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 {
@@ -25,7 +25,7 @@ abstract class KotlinBasePluginWrapper: Plugin<Project> {
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<Project> {
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
@@ -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
}