From 2d900e22343f99abe89fdf33530242ecba8b980e Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 13 Feb 2020 17:24:45 +0300 Subject: [PATCH] [Gradle, JS] Legacy tooling work with binaries and throw error on it --- .../gradle/targets/js/KotlinJsTarget.kt | 14 ++++++++++---- .../targets/js/ir/KotlinJsBinaryContainer.kt | 19 +++++++++++++------ 2 files changed, 23 insertions(+), 10 deletions(-) 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 89e39db6fa2..abd686435fa 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,6 +8,7 @@ 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.* @@ -16,8 +17,8 @@ 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.KotlinOnlyTarget 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 @@ -27,6 +28,7 @@ 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.dsl.* +import org.jetbrains.kotlin.gradle.targets.js.ir.JsBinary import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsBinaryContainer import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinBrowserJs @@ -45,7 +47,7 @@ constructor( project: Project, platformType: KotlinPlatformType ) : - KotlinOnlyTarget(project, platformType), + KotlinBinaryContainer(project, platformType), KotlinTargetWithTests, KotlinJsTargetDsl, KotlinJsSubTargetContainerDsl { @@ -93,8 +95,12 @@ constructor( var producingType: KotlinJsProducingType? = null @Deprecated("Use produceExecutable instead", ReplaceWith("produceExecutable()")) - override val binaries: KotlinJsBinaryContainer = - throw IllegalStateException("binaries is useless for legacy compiler. Use produceExecutable instead") + override val binaries: KotlinJsBinaryContainer + get() = project.objects.newInstance( + KotlinJsBinaryContainer::class.java, + this, + WrapUtil.toDomainObjectSet(JsBinary::class.java) + ) var irTarget: KotlinJsIrTarget? = null 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 32b50983082..8096c5f5439 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 @@ -11,6 +11,7 @@ import org.gradle.api.plugins.ExtensionAware import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinBinaryContainer +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind.DEVELOPMENT import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind.PRODUCTION @@ -22,7 +23,7 @@ import javax.inject.Inject open class KotlinJsBinaryContainer @Inject constructor( - val target: KotlinBinaryContainer, + val target: KotlinBinaryContainer, backingContainer: DomainObjectSet ) : DomainObjectSet by backingContainer { val project: Project @@ -30,12 +31,18 @@ constructor( private val binaryNames = mutableSetOf() - private val defaultCompilation: KotlinJsIrCompilation + private val defaultCompilation: KotlinJsCompilation get() = target.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME) fun executable( - compilation: KotlinJsIrCompilation = defaultCompilation + compilation: KotlinJsCompilation = defaultCompilation ) { + if (compilation !is KotlinJsIrCompilation) { + throw IllegalArgumentException( + "Unable to create executable for $compilation. Use IR compiler (kotlin.js.compiler=true) instead." + ) + } + (target as KotlinJsSubTargetContainerDsl).whenBrowserConfigured { (this as KotlinJsIrSubTarget).produceExecutable() } @@ -47,7 +54,7 @@ constructor( compilation.binaries.executableInternal(compilation) } - internal fun executableInternal(compilation: KotlinJsIrCompilation) = createBinaries( + internal fun executableInternal(compilation: KotlinJsCompilation) = createBinaries( compilation = compilation, jsBinaryType = JsBinaryType.EXECUTABLE, create = ::Executable @@ -60,7 +67,7 @@ constructor( .single() private fun createBinaries( - compilation: KotlinJsIrCompilation, + compilation: KotlinJsCompilation, buildVariantKinds: Collection = listOf(PRODUCTION, DEVELOPMENT), jsBinaryType: JsBinaryType, create: (target: KotlinTarget, name: String, buildVariantKind: BuildVariantKind) -> T @@ -87,7 +94,7 @@ constructor( companion object { internal fun generateBinaryName( - compilation: KotlinJsIrCompilation, + compilation: KotlinJsCompilation, buildVariantKind: BuildVariantKind, jsBinaryType: JsBinaryType ) =