From 64c2b4b076b6c0dc8ccef06134b9d42a8e8f8ffe Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Tue, 24 Dec 2019 18:53:28 +0300 Subject: [PATCH] [Gradle, JS] Add callbacks on configuring producing target for JS IR --- .../gradle/targets/js/ir/KotlinBrowserJsIr.kt | 10 ++++++++++ .../gradle/targets/js/ir/KotlinJsIrSubTarget.kt | 8 ++++++-- .../gradle/targets/js/ir/KotlinJsIrTarget.kt | 15 +++++++++++---- .../kotlin/gradle/targets/js/ir/KotlinNodeJsIr.kt | 10 ++++++++++ 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt index 0c1d6f9c60d..d7475c6471d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt @@ -32,6 +32,8 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : private lateinit var buildVariants: NamedDomainObjectContainer + private val producingConfiguredHandlers: MutableList Unit> = mutableListOf() + override val testTaskDescription: String get() = "Run all ${target.name} tests inside browser using karma and webpack" @@ -203,6 +205,14 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : } } + fun whenProducingConfigured(body: KotlinBrowserJsIr.() -> Unit) { + if (producingConfigured) { + this.body() + } else { + producingConfiguredHandlers += body + } + } + companion object { const val PRODUCTION = "production" const val DEVELOPMENT = "development" diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt index 0103d190ea8..0806471f62a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt @@ -36,12 +36,13 @@ abstract class KotlinJsIrSubTarget( final override lateinit var testRuns: NamedDomainObjectContainer private set - fun configure() { + protected val producingConfigured: Boolean = false + + private fun configure() { NpmResolverPlugin.apply(project) configureBuildVariants() configureTests() - configureMain() target.compilations.all { val npmProject = it.npmProject @@ -50,6 +51,9 @@ abstract class KotlinJsIrSubTarget( } override fun produceKotlinLibrary() { + configure() +// configureMain() + target.compilations .matching { it.name == KotlinCompilation.TEST_COMPILATION_NAME } .all { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt index 505f2756eb9..88cbe5cfcf4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt @@ -43,8 +43,11 @@ open class KotlinJsIrTarget @Inject constructor(project: Project, platformType: private val browserLazyDelegate = lazy { project.objects.newInstance(KotlinBrowserJsIr::class.java, this).also { - it.configure() - browserConfiguredHandlers.forEach { handler -> handler(it) } + browserConfiguredHandlers.forEach { handler -> + it.whenProducingConfigured { + handler(this) + } + } browserConfiguredHandlers.clear() } } @@ -61,8 +64,12 @@ open class KotlinJsIrTarget @Inject constructor(project: Project, platformType: private val nodejsLazyDelegate = lazy { project.objects.newInstance(KotlinNodeJsIr::class.java, this).also { - it.configure() - nodejsConfiguredHandlers.forEach { handler -> handler(it) } + nodejsConfiguredHandlers.forEach { handler -> + it.whenProducingConfigured { + handler(this) + } + } + nodejsConfiguredHandlers.clear() } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinNodeJsIr.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinNodeJsIr.kt index ba68160ccec..a3d71b74d33 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinNodeJsIr.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinNodeJsIr.kt @@ -17,6 +17,8 @@ open class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) : override val testTaskDescription: String get() = "Run all ${target.name} tests inside nodejs using the builtin test framework" + private val producingConfiguredHandlers: MutableList Unit> = mutableListOf() + private val runTaskName = disambiguateCamelCased("run") override fun runTask(body: NodeJsExec.() -> Unit) { @@ -40,4 +42,12 @@ open class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) : override fun configureBuildVariants() { } + + fun whenProducingConfigured(body: KotlinNodeJsIr.() -> Unit) { + if (producingConfigured) { + this.body() + } else { + producingConfiguredHandlers += body + } + } } \ No newline at end of file