From 2fed8aa7b8781fe9adba321e0e5876f7990dd06c Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 13 Feb 2020 13:06:58 +0300 Subject: [PATCH] [Gradle, JS] NodeJs on binaries --- .../targets/js/ir/KotlinJsBinaryContainer.kt | 26 +++++++++++-------- .../targets/js/ir/KotlinJsIrSubTarget.kt | 22 +++++++--------- .../gradle/targets/js/ir/KotlinNodeJsIr.kt | 9 +++++-- 3 files changed, 32 insertions(+), 25 deletions(-) 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 95307d368fd..05ae0edaba7 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 @@ -27,7 +27,8 @@ constructor( val project: Project get() = target.project - private val nameToBinary = mutableMapOf() + private val binaryNames = mutableSetOf() + private val compilationToBinaries = mutableMapOf>() private val defaultCompilation: KotlinJsCompilation get() = target.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME) @@ -50,15 +51,12 @@ constructor( ) internal fun getBinary( - buildVariantKind: BuildVariantKind, - jsBinaryType: JsBinaryType + compilation: KotlinJsCompilation, + buildVariantKind: BuildVariantKind ): JsBinary = - nameToBinary.getValue( - generateBinaryName( - buildVariantKind, - jsBinaryType - ) - ) + compilationToBinaries.getValue( + compilation + ).single { it.type == buildVariantKind } private fun createBinaries( @@ -73,13 +71,19 @@ constructor( jsBinaryType ) - require(name !in nameToBinary) { + require(name !in binaryNames) { "Cannot create binary $name: binary with such a name already exists" } val binary = create(name, buildVariantKind, compilation) add(binary) - nameToBinary[binary.name] = binary + with(compilationToBinaries[compilation]) { + if (this != null) { + add(binary) + } else { + compilationToBinaries[compilation] = mutableSetOf(binary) + } + } // Allow accessing binaries as properties of the container in Groovy DSL. if (this is ExtensionAware) { extensions.add(binary.name, binary) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt index ce0a30d4db0..8bab9c7cc35 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt @@ -36,6 +36,9 @@ abstract class KotlinJsIrSubTarget( final override lateinit var testRuns: NamedDomainObjectContainer private set + protected val binaries: KotlinJsBinaryContainer + get() = target.binaries + internal fun configure() { target.binaries.testExecutable() @@ -44,15 +47,10 @@ abstract class KotlinJsIrSubTarget( configureBuildVariants() configureTests() - target.compilations.all { - val npmProject = it.npmProject - listOf( - it.productionLinkTask, - it.developmentLinkTask - ).forEach { taskProvider -> - taskProvider.configure { - it.kotlinOptions.outputFile = npmProject.dir.resolve(npmProject.main).canonicalPath - } + binaries.all { binary -> + val npmProject = binary.compilation.npmProject + binary.linkTask.configure { + it.kotlinOptions.outputFile = npmProject.dir.resolve(npmProject.main).canonicalPath } } } @@ -97,9 +95,9 @@ abstract class KotlinJsIrSubTarget( testJs.group = LifecycleBasePlugin.VERIFICATION_GROUP testJs.description = testTaskDescription - val testExecutableTask = target.binaries.getBinary( - BuildVariantKind.DEVELOPMENT, - JsBinaryType.TEST + val testExecutableTask = binaries.getBinary( + compilation, + BuildVariantKind.DEVELOPMENT ).linkTask testJs.inputFileProperty.set( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinNodeJsIr.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinNodeJsIr.kt index 5823ab9ed4f..f84589327be 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinNodeJsIr.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinNodeJsIr.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.gradle.targets.js.ir import org.gradle.language.base.plugins.LifecycleBasePlugin +import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsExec import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest @@ -30,8 +31,10 @@ open class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) : override fun configureRun( compilation: KotlinJsIrCompilation ) { + val developmentExecutable = binaries.getBinary(compilation, BuildVariantKind.DEVELOPMENT) + val runTaskHolder = NodeJsExec.create(compilation, disambiguateCamelCased(RUN_TASK_NAME)) { - inputFileProperty.set(compilation.developmentLinkTask.map { it.outputFileProperty.get() }) + inputFileProperty.set(developmentExecutable.linkTask.map { it.outputFileProperty.get() }) } target.runTask.dependsOn(runTaskHolder) } @@ -39,8 +42,10 @@ open class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) : override fun configureBuild( compilation: KotlinJsIrCompilation ) { + val productionExecutable = binaries.getBinary(compilation, BuildVariantKind.PRODUCTION) + val assembleTask = project.tasks.getByName(LifecycleBasePlugin.ASSEMBLE_TASK_NAME) - assembleTask.dependsOn(compilation.productionLinkTask) + assembleTask.dependsOn(productionExecutable.linkTask) } override fun configureBuildVariants() {