diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt index 8a4233ee194..b0c335982f2 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt @@ -485,6 +485,19 @@ class Kotlin2JsIrGradlePluginIT : AbstractKotlin2JsGradlePluginIT(true) { } } } + + @DisplayName("Multiple targets works without clash") + @GradleTest + fun testMultipleJsTargets(gradleVersion: GradleVersion) { + project("kotlin-js-multiple-targets", gradleVersion) { + buildGradleKts.modify(::transformBuildScriptWithPluginsDsl) + + build("assemble") { + assertTasksExecuted(":compileProductionExecutableKotlinServerSide") + assertTasksExecuted(":compileProductionExecutableKotlinClientSide") + } + } + } } @JsGradlePluginTests diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-multiple-targets/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-multiple-targets/build.gradle.kts new file mode 100644 index 00000000000..10b282ed7bb --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-multiple-targets/build.gradle.kts @@ -0,0 +1,30 @@ +plugins { + kotlin("multiplatform") +} + +repositories { + mavenCentral() + mavenLocal() +} + +kotlin { + js("clientSide") { + attributes { + attribute(Attribute.of("js.target", String::class.java), "clientSide") + } + browser { + + } + binaries.executable() + } + + js("serverSide") { + attributes { + attribute(Attribute.of("js.target", String::class.java), "serverSide") + } + nodejs { + + } + binaries.executable() + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-multiple-targets/src/clientSideMain/kotlin/App.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-multiple-targets/src/clientSideMain/kotlin/App.kt new file mode 100644 index 00000000000..67f3c078cef --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-multiple-targets/src/clientSideMain/kotlin/App.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2019 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 com.example + +fun main() { + println("Sheldon") +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-multiple-targets/src/serverSideMain/kotlin/main.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-multiple-targets/src/serverSideMain/kotlin/main.kt new file mode 100644 index 00000000000..e3b549218e8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-multiple-targets/src/serverSideMain/kotlin/main.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2019 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 com.example + +fun main() { + println("Leonard") +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt index 67c7e42b9f5..23d56150345 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt @@ -9,6 +9,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import groovy.lang.Closure +import org.gradle.api.attributes.AttributeContainer import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptions import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions @@ -53,6 +54,19 @@ open class KotlinJsCompilation @Inject internal constructor( override val processResourcesTaskName: String get() = disambiguateName("processResources") + val npmConfigurationName + get() = compilation.disambiguateName("npm") + + val publicPackageJsonConfigurationName + get() = compilation.disambiguateName("publicPackageJsonConfiguration") + + override val relatedConfigurationNames: List + get() = super.relatedConfigurationNames + npmConfigurationName + publicPackageJsonConfigurationName + + override fun getAttributes(): AttributeContainer { + return compilation.attributes + } + @Suppress("DEPRECATION") @Deprecated("Accessing task instance directly is deprecated", replaceWith = ReplaceWith("compileTaskProvider")) override val compileKotlinTask: Kotlin2JsCompile diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt index 7d2c299a8d7..d67b337b399 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt @@ -132,4 +132,4 @@ internal val JsBinary.executeTaskBaseName: String null ) -internal val COMPILE_SYNC = "compileSync" \ No newline at end of file +internal const val COMPILE_SYNC = "compileSync" \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt index ecdbb61bea1..c3df23e3581 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt @@ -103,7 +103,7 @@ class KotlinCompilationNpmResolver( override fun toString(): String = "KotlinCompilationNpmResolver(${npmProject.name})" - val aggregatedConfiguration: Configuration by lazy { + val aggregatedConfiguration: Configuration = run { createAggregatedConfiguration() } @@ -126,7 +126,7 @@ class KotlinCompilationNpmResolver( } private fun createAggregatedConfiguration(): Configuration { - val all = project.configurations.create(compilation.disambiguateName("npm")) + val all = project.configurations.create(compilation.npmConfigurationName) all.usesPlatformOf(target) all.attributes.attribute(Usage.USAGE_ATTRIBUTE, KotlinUsages.consumerRuntimeUsage(target)) @@ -156,7 +156,7 @@ class KotlinCompilationNpmResolver( } private fun createPublicPackageJsonConfiguration(): Configuration { - val all = project.configurations.create(compilation.disambiguateName("publicPackageJsonConfiguration")) + val all = project.configurations.create(compilation.publicPackageJsonConfigurationName) all.usesPlatformOf(target) all.attributes.attribute(Usage.USAGE_ATTRIBUTE, KotlinUsages.consumerRuntimeUsage(target))