From 57b99bbc0c68e0a4cf06c1f6cacac3ecd3aeea2f Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Mon, 6 Apr 2020 19:42:49 +0300 Subject: [PATCH] [Gradle, JS] Allow to create another binaries.executable #KT-KT-38055 fixed --- .../targets/js/ir/KotlinJsBinaryContainer.kt | 42 ++++++++++++------- .../targets/js/ir/KotlinJsIrSubTarget.kt | 3 +- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt index 462fafe1a5e..792fb357b60 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt @@ -97,25 +97,39 @@ constructor( jsBinaryType: JsBinaryType, create: (compilation: KotlinJsCompilation, name: String, type: KotlinJsBinaryType) -> T ) { - types.forEach { buildVariantKind -> - val name = generateBinaryName( + types.forEach { + createBinary( compilation, - buildVariantKind, - jsBinaryType + it, + jsBinaryType, + create ) + } + } - require(name !in binaryNames) { - "Cannot create binary $name: binary with such a name already exists" - } + private fun createBinary( + compilation: KotlinJsCompilation, + type: KotlinJsBinaryType, + jsBinaryType: JsBinaryType, + create: (compilation: KotlinJsCompilation, name: String, type: KotlinJsBinaryType) -> T + ) { + val name = generateBinaryName( + compilation, + type, + jsBinaryType + ) - binaryNames.add(name) + if (name in binaryNames) { + return + } - val binary = create(compilation, name, buildVariantKind) - add(binary) - // Allow accessing binaries as properties of the container in Groovy DSL. - if (this is ExtensionAware) { - extensions.add(binary.name, binary) - } + binaryNames.add(name) + + val binary = create(compilation, name, type) + add(binary) + // Allow accessing binaries as properties of the container in Groovy DSL. + if (this is ExtensionAware) { + extensions.add(binary.name, binary) } } 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 63738db12f3..b886945973f 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 @@ -57,8 +57,9 @@ abstract class KotlinJsIrSubTarget( } } - internal fun produceExecutable() { + internal val produceExecutable: () -> Unit by lazy { configureMain() + return@lazy { Unit } } override fun testTask(body: KotlinJsTest.() -> Unit) {