From 98a2506eb0f0c422c4d4184644585c69bdf14c75 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Thu, 20 Jul 2017 21:04:14 +0300 Subject: [PATCH] Android Extensions: Add kotlin-android-extensions-runtime only if experimental flag is enabled --- .../internal/AndroidExtensionsExtension.kt | 20 ++++++++++++++++++- .../gradle/internal/AndroidSubplugin.kt | 10 +++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidExtensionsExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidExtensionsExtension.kt index 3f4a977430e..6bd92566d1a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidExtensionsExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidExtensionsExtension.kt @@ -16,6 +16,24 @@ package org.jetbrains.kotlin.gradle.internal -open class AndroidExtensionsExtension { +import groovy.lang.Closure +import org.gradle.util.Configurable + +open class AndroidExtensionsExtension : Configurable { + private lateinit var onEvaluatedHandler: (AndroidExtensionsExtension) -> Unit + + fun setEvaluatedHandler(handler: (AndroidExtensionsExtension) -> Unit) { + onEvaluatedHandler = handler + } + open var isExperimental: Boolean = false + + override fun configure(closure: Closure<*>): AndroidExtensionsExtension { + // ConfigureUtil is not used here to prevent infinite recursion + closure.resolveStrategy = Closure.DELEGATE_FIRST + closure.delegate = this + closure.call() + onEvaluatedHandler(this) + return this + } } \ No newline at end of file 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 b7413efa613..beba5d96b2b 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 @@ -38,8 +38,16 @@ import javax.xml.parsers.DocumentBuilderFactory // Use apply plugin: 'kotlin-android-extensions' to enable Android Extensions in an Android project. class AndroidExtensionsSubpluginIndicator : Plugin { override fun apply(project: Project) { - project.extensions.create("androidExtensions", AndroidExtensionsExtension::class.java) + val extension = project.extensions.create("androidExtensions", AndroidExtensionsExtension::class.java) + extension.setEvaluatedHandler { evaluatedExtension -> + if (evaluatedExtension.isExperimental) { + addAndroidExtensionsRuntimeIfNeeded(project) + } + } + } + + private fun addAndroidExtensionsRuntimeIfNeeded(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