diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt index 8f20da521ba..e7c33e4b30e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt @@ -8,11 +8,14 @@ // Old package for compatibility package org.jetbrains.kotlin.gradle.plugin.mpp +import org.gradle.util.WrapUtil import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget +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.npm.PackageJson import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile import org.jetbrains.kotlin.gradle.utils.* @@ -21,6 +24,13 @@ open class KotlinJsCompilation( target: KotlinTarget, name: String ) : AbstractKotlinCompilationToRunnableFiles(target, name), KotlinCompilationWithResources { + internal val binaries: KotlinJsBinaryContainer = + target.project.objects.newInstance( + KotlinJsBinaryContainer::class.java, + target, + WrapUtil.toDomainObjectSet(JsBinary::class.java) + ) + override val processResourcesTaskName: String get() = disambiguateName("processResources") 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 c56c38db314..f8c54d63717 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,18 +8,19 @@ 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.Companion.MAIN_COMPILATION_NAME import org.jetbrains.kotlin.gradle.plugin.mpp.* -import org.jetbrains.kotlin.gradle.targets.js.dsl.* -import org.jetbrains.kotlin.gradle.targets.js.ir.JsBinary +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.KotlinJsBinaryContainer import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinBrowserJs -import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinJsSubTarget import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinNodeJs import org.jetbrains.kotlin.gradle.tasks.locateTask import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport @@ -79,17 +80,13 @@ constructor( } } - var producingType: KotlinJsProducingType? = null - - @Deprecated("Use produceExecutable instead", ReplaceWith("produceExecutable()")) override val binaries: KotlinJsBinaryContainer get() { - return irTarget?.binaries - ?: project.objects.newInstance( - KotlinJsBinaryContainer::class.java, - this, - WrapUtil.toDomainObjectSet(JsBinary::class.java) - ) + irTarget?.let { throw IllegalStateException("Unfortunately you can't use binaries in 'both' mode") } + return compilations.withType(KotlinJsCompilation::class.java) + .named(MAIN_COMPILATION_NAME) + .map { it.binaries } + .get() } var irTarget: KotlinJsIrTarget? = null @@ -150,35 +147,6 @@ constructor( irTarget?.nodejs(body) } - override fun produceExecutable() { - produce(KotlinJsProducingType.EXECUTABLE) { - (this as KotlinJsSubTarget).produceExecutable() - } - } - - 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" - } - - 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 e45e518839c..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,8 +49,6 @@ interface KotlinJsTargetDsl : KotlinTarget { } } - 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 2e15e799e32..e28ffb83a86 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,10 +11,12 @@ import org.gradle.api.plugins.ExtensionAware import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinTargetWithBinaries +import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget 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 import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetContainerDsl +import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinJsSubTarget import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import javax.inject.Inject @@ -36,20 +38,24 @@ constructor( fun executable( compilation: KotlinJsCompilation = defaultCompilation ) { - if (compilation !is KotlinJsIrCompilation) { - project.logger.warn( - "binaries.executable configuration is useless with IR compiler." + - "Use produceExecutable() instead" - ) - return - } - (target as KotlinJsSubTargetContainerDsl).whenBrowserConfigured { - (this as KotlinJsIrSubTarget).produceExecutable() + if (target is KotlinJsIrTarget) { + (this as KotlinJsIrSubTarget).produceExecutable() + } + + if (target is KotlinJsTarget) { + (this as KotlinJsSubTarget).produceExecutable() + } } - target.whenNodejsConfigured { - (this as KotlinJsIrSubTarget).produceExecutable() + (target as KotlinJsSubTargetContainerDsl).whenNodejsConfigured { + if (target is KotlinJsIrTarget) { + (this as KotlinJsIrSubTarget).produceExecutable() + } + + if (target is KotlinJsTarget) { + (this as KotlinJsSubTarget).produceExecutable() + } } compilation.binaries.executableInternal(compilation) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt index 2c1a56a95f6..f707c041bf8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.gradle.targets.js.ir import org.gradle.api.file.SourceDirectorySet -import org.gradle.util.WrapUtil import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation @@ -17,13 +16,6 @@ class KotlinJsIrCompilation( name: String ) : KotlinJsCompilation(target, name) { - internal val binaries: KotlinJsBinaryContainer = - target.project.objects.newInstance( - KotlinJsBinaryContainer::class.java, - target, - WrapUtil.toDomainObjectSet(JsBinary::class.java) - ) - internal val allSources: MutableSet = mutableSetOf() override fun addSourcesToCompileTask(sourceSet: KotlinSourceSet, addAsCommonSources: Lazy) { 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 19a03879afc..03f101b654e 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 @@ -97,11 +97,6 @@ constructor( body(nodejs) } - @Deprecated("Use binaries.executable instead", ReplaceWith("binaries.executable()")) - override fun produceExecutable() { - project.logger.warn("produceExecutable configuration is useless with IR compiler") - } - override fun whenBrowserConfigured(body: KotlinJsBrowserDsl.() -> Unit) { if (browserLazyDelegate.isInitialized()) { browser(body)