From 83f9835e005d613c4fd1941b9609bf7c2a8a5e7f Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 4 Jul 2017 16:54:28 +0300 Subject: [PATCH] Android Exensions: Add kotlin-android-extensions-runtime dependency automatically in Gradle plugin --- .../gradle/internal/AndroidSubplugin.kt | 29 +++++++++++++++++-- .../kotlin/gradle/plugin/KotlinPlugin.kt | 2 +- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidSubplugin.kt index 2fd96d9a496..b462c22c8ac 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidSubplugin.kt @@ -27,8 +27,8 @@ import org.gradle.api.Project import org.gradle.api.UnknownDomainObjectException import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.compile.AbstractCompile -import org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin -import org.jetbrains.kotlin.gradle.plugin.SubpluginOption +import org.jetbrains.kotlin.com.intellij.openapi.util.text.StringUtil.* +import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.w3c.dom.Document import java.io.File @@ -37,7 +37,30 @@ import javax.xml.parsers.DocumentBuilderFactory // Use apply plugin: 'kotlin-android-extensions' to enable Android Extensions in an Android project. // Just a marker plugin. class AndroidExtensionsSubpluginIndicator : Plugin { - override fun apply(target: Project?) {} + override fun apply(project: Project) { + val kotlinPluginWrapper = project.plugins.findPlugin(KotlinAndroidPluginWrapper::class.java) ?: run { + project.logger.error("'kotlin-android' plugin should be enabled before 'kotlin-android-extensions'") + return + } + + val kotlinPluginVersion = kotlinPluginWrapper.kotlinPluginVersion + + project.configurations.all { configuration -> + val name = configuration.name + if (name != "implementation" && name != "compile") return@all + + val androidPluginVersion = loadAndroidPluginVersion() ?: return@all + val requiredConfigurationName = when { + compareVersionNumbers(androidPluginVersion, "2.5") > 0 -> "implementation" + else -> "compile" + } + + if (name != requiredConfigurationName) return@all + + configuration.dependencies.add(project.dependencies.create( + "org.jetbrains.kotlin:kotlin-android-extensions-runtime:$kotlinPluginVersion")) + } + } } class AndroidSubplugin : KotlinGradleSubplugin { 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 dc666d68449..3e76ff82514 100755 --- 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 @@ -761,7 +761,7 @@ private fun Project.createKaptExtension() { } //copied from BasePlugin.getLocalVersion -private fun loadAndroidPluginVersion(): String? { +internal fun loadAndroidPluginVersion(): String? { try { val clazz = BasePlugin::class.java val className = clazz.simpleName + ".class"