From 831757018cc50f689dcac0763856f7426f591849 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Mon, 27 Jan 2020 15:12:51 +0300 Subject: [PATCH] [Gradle, JS] Check only once set producing type --- .../gradle/targets/js/KotlinJsProducingType.kt | 11 +++++++++++ .../kotlin/gradle/targets/js/KotlinJsTarget.kt | 17 ++++++++++++++--- .../gradle/targets/js/ir/KotlinJsIrTarget.kt | 18 +++++++++++++++--- 3 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsProducingType.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsProducingType.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsProducingType.kt new file mode 100644 index 00000000000..bc05fe4ff91 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsProducingType.kt @@ -0,0 +1,11 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle.targets.js + +enum class KotlinJsProducingType { + KOTLIN_LIBRARY, + EXECUTABLE +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt index bb7e1690160..745256d3fb6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt @@ -69,6 +69,8 @@ constructor( } } + var producingType: KotlinJsProducingType? = null + var irTarget: KotlinJsIrTarget? = null val testTaskName get() = testRuns.getByName(KotlinTargetWithTests.DEFAULT_TEST_RUN_NAME).testTaskName @@ -124,18 +126,27 @@ constructor( } override fun produceKotlinLibrary() { - produce { + produce(KotlinJsProducingType.KOTLIN_LIBRARY) { produceKotlinLibrary() } } override fun produceExecutable() { - produce { + produce(KotlinJsProducingType.EXECUTABLE) { produceExecutable() } } - private fun produce(producer: KotlinJsSubTarget.() -> Unit) { + private fun produce( + producingType: KotlinJsProducingType, + producer: KotlinJsSubTarget.() -> Unit + ) { + check(this.producingType == null || this.producingType == producingType) { + "Only one producing type supported. Try to set $producingType but previously ${this.producingType} found" + } + + this.producingType = producingType + whenBrowserConfigured { (this as KotlinJsSubTarget).producer() } 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 190069f43b6..41a13d00087 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 @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget import org.jetbrains.kotlin.gradle.targets.js.JsIrAggregatingExecutionSource import org.jetbrains.kotlin.gradle.targets.js.KotlinJsIrReportAggregatingTestRun +import org.jetbrains.kotlin.gradle.targets.js.KotlinJsProducingType import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsIrBrowserDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsIrNodeDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsIrTargetDsl @@ -31,6 +32,8 @@ open class KotlinJsIrTarget @Inject constructor(project: Project, platformType: override lateinit var testRuns: NamedDomainObjectContainer internal set + var producingType: KotlinJsProducingType? = null + val testTaskName get() = testRuns.getByName(KotlinTargetWithTests.DEFAULT_TEST_RUN_NAME).testTaskName val testTask: TaskProvider get() = checkNotNull(project.locateTask(testTaskName)) @@ -83,18 +86,27 @@ open class KotlinJsIrTarget @Inject constructor(project: Project, platformType: } override fun produceKotlinLibrary() { - produce { + produce(KotlinJsProducingType.KOTLIN_LIBRARY) { produceKotlinLibrary() } } override fun produceExecutable() { - produce { + produce(KotlinJsProducingType.EXECUTABLE) { produceExecutable() } } - private fun produce(producer: KotlinJsSubTarget.() -> Unit) { + private fun produce( + producingType: KotlinJsProducingType, + producer: KotlinJsSubTarget.() -> Unit + ) { + check(this.producingType == null || this.producingType == producingType) { + "Only one producing type supported. Try to set $producingType but previously ${this.producingType} found" + } + + this.producingType = producingType + whenBrowserConfigured { (this as KotlinJsSubTarget).producer() }