Skip to content

Commit 75d226a

Browse files
committed
Android Extensions: Add kotlin-android-extensions-runtime only if experimental flag is enabled
1 parent d49ab02 commit 75d226a

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidExtensionsExtension.kt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,24 @@
1616

1717
package org.jetbrains.kotlin.gradle.internal
1818

19-
open class AndroidExtensionsExtension {
19+
import groovy.lang.Closure
20+
import org.gradle.util.Configurable
21+
22+
open class AndroidExtensionsExtension : Configurable<AndroidExtensionsExtension> {
23+
private lateinit var onEvaluatedHandler: (AndroidExtensionsExtension) -> Unit
24+
25+
fun setEvaluatedHandler(handler: (AndroidExtensionsExtension) -> Unit) {
26+
onEvaluatedHandler = handler
27+
}
28+
2029
open var isExperimental: Boolean = false
30+
31+
override fun configure(closure: Closure<*>): AndroidExtensionsExtension {
32+
// ConfigureUtil is not used here to prevent infinite recursion
33+
closure.resolveStrategy = Closure.DELEGATE_FIRST
34+
closure.delegate = this
35+
closure.call()
36+
onEvaluatedHandler(this)
37+
return this
38+
}
2139
}

libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AndroidSubplugin.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,16 @@ import javax.xml.parsers.DocumentBuilderFactory
3838
// Use apply plugin: 'kotlin-android-extensions' to enable Android Extensions in an Android project.
3939
class AndroidExtensionsSubpluginIndicator : Plugin<Project> {
4040
override fun apply(project: Project) {
41-
project.extensions.create("androidExtensions", AndroidExtensionsExtension::class.java)
41+
val extension = project.extensions.create("androidExtensions", AndroidExtensionsExtension::class.java)
4242

43+
extension.setEvaluatedHandler { evaluatedExtension ->
44+
if (evaluatedExtension.isExperimental) {
45+
addAndroidExtensionsRuntimeIfNeeded(project)
46+
}
47+
}
48+
}
49+
50+
private fun addAndroidExtensionsRuntimeIfNeeded(project: Project) {
4351
val kotlinPluginWrapper = project.plugins.findPlugin(KotlinAndroidPluginWrapper::class.java) ?: run {
4452
project.logger.error("'kotlin-android' plugin should be enabled before 'kotlin-android-extensions'")
4553
return

0 commit comments

Comments
 (0)