[Gradle, JS] Check only once set producing type

This commit is contained in:
Ilya Goncharov
2020-01-27 15:12:51 +03:00
parent 9f3601412b
commit 831757018c
3 changed files with 40 additions and 6 deletions

View File

@@ -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
}

View File

@@ -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()
}

View File

@@ -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<KotlinJsIrReportAggregatingTestRun>
internal set
var producingType: KotlinJsProducingType? = null
val testTaskName get() = testRuns.getByName(KotlinTargetWithTests.DEFAULT_TEST_RUN_NAME).testTaskName
val testTask: TaskProvider<KotlinTestReport>
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()
}