From 99d73d4c791e3e68b26e3a673f957efe8a0785c9 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Wed, 12 Feb 2020 12:30:33 +0300 Subject: [PATCH] [Gradle, JS] binaries API instead of produce* --- .../plugin/mpp/KotlinBinaryContainer.kt | 2 +- .../gradle/targets/js/KotlinJsTarget.kt | 73 ++++++++----------- .../targets/js/dsl/KotlinJsTargetDsl.kt | 4 - .../targets/js/ir/KotlinJsBinaryContainer.kt | 4 +- .../gradle/targets/js/ir/KotlinJsIrTarget.kt | 8 -- 5 files changed, 35 insertions(+), 56 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinBinaryContainer.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinBinaryContainer.kt index 89ec4ca4f29..4dcc7281f07 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinBinaryContainer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinBinaryContainer.kt @@ -12,7 +12,7 @@ import org.gradle.util.ConfigureUtil import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType -abstract class KotlinBinaryContainer, R : DomainObjectSet<*>>( +abstract class KotlinBinaryContainer, out R : DomainObjectSet<*>>( project: Project, platformType: KotlinPlatformType ) : KotlinOnlyTarget(project, platformType) { 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 8a960c49164..bbc106586d5 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 @@ -8,10 +8,23 @@ package org.jetbrains.kotlin.gradle.targets.js import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.tasks.TaskProvider +import org.gradle.util.WrapUtil import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator.Companion.runTaskNameSuffix +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation +import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType +import org.jetbrains.kotlin.gradle.plugin.KotlinTargetComponent +import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinBinaryContainer +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation +import org.jetbrains.kotlin.gradle.plugin.mpp.PRIMARY_SINGLE_COMPONENT_NAME +import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl +import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl +import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetContainerDsl +import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl +import org.jetbrains.kotlin.gradle.targets.js.ir.JsBinary import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.targets.js.dsl.* import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsBinaryContainer @@ -32,7 +45,7 @@ constructor( project: Project, platformType: KotlinPlatformType ) : - KotlinOnlyTarget(project, platformType), + KotlinBinaryContainer(project, platformType), KotlinTargetWithTests, KotlinJsTargetDsl, KotlinJsSubTargetContainerDsl { @@ -77,7 +90,23 @@ constructor( } } - var producingType: KotlinJsProducingType? = null + override val binaries: KotlinJsBinaryContainer = + // Use newInstance to allow accessing binaries by their names in Groovy using the extension mechanism. + project.objects.newInstance( + KotlinJsBinaryContainer::class.java, + this, + WrapUtil.toDomainObjectSet(JsBinary::class.java).apply { + all { + whenBrowserConfigured { + (this as KotlinJsSubTarget).produceExecutable() + } + + whenNodejsConfigured { + (this as KotlinJsSubTarget).produceExecutable() + } + } + } + ) var irTarget: KotlinJsIrTarget? = null @@ -137,46 +166,6 @@ constructor( irTarget?.nodejs(body) } - override fun produceKotlinLibrary() { - produce(KotlinJsProducingType.KOTLIN_LIBRARY) - } - - override fun produceExecutable() { - produce(KotlinJsProducingType.EXECUTABLE) { - (this as KotlinJsSubTarget).produceExecutable() - } - } - - override val binaries: KotlinJsBinaryContainer - get() = TODO("Not yet implemented") - - private fun produce( - producingType: KotlinJsProducingType, - producer: KotlinJsSubTargetDsl.() -> Unit = {} - ) { - check(this.producingType == null || this.producingType == producingType) { - "Only one producing type supported. Try to set $producingType but previously ${this.producingType} found" - } - - if (this.producingType != null) { - return - } - - this.producingType = producingType - - whenBrowserConfigured { - if (this is KotlinBrowserJs) { - producer() - } - } - - whenNodejsConfigured { - if (this is KotlinNodeJs) { - producer() - } - } - } - override fun whenBrowserConfigured(body: KotlinJsBrowserDsl.() -> Unit) { if (browserLazyDelegate.isInitialized()) { browser(body) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl.kt index 9ff1ef85880..4e394af3d64 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl.kt @@ -49,10 +49,6 @@ interface KotlinJsTargetDsl : KotlinTarget { } } - fun produceKotlinLibrary() - - fun produceExecutable() - fun useCommonJs() val binaries: KotlinJsBinaryContainer 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 94a72920702..80d04555867 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 @@ -8,6 +8,8 @@ package org.jetbrains.kotlin.gradle.targets.js.ir import org.gradle.api.DomainObjectSet import org.gradle.api.Project import org.gradle.api.plugins.ExtensionAware +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinBinaryContainer +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import javax.inject.Inject @@ -15,7 +17,7 @@ import javax.inject.Inject open class KotlinJsBinaryContainer @Inject constructor( - val target: KotlinJsIrTarget, + val target: KotlinBinaryContainer, backingContainer: DomainObjectSet ) : DomainObjectSet by backingContainer { val project: Project 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 4398ab92c67..a062743c968 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 @@ -115,14 +115,6 @@ constructor( body(nodejs) } - override fun produceKotlinLibrary() { - // do nothing - } - - override fun produceExecutable() { - // do nothing - } - override fun whenBrowserConfigured(body: KotlinJsBrowserDsl.() -> Unit) { if (browserLazyDelegate.isInitialized()) { browser(body)