diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt index c25fe1db617..95ec34ac379 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt @@ -56,9 +56,7 @@ abstract class KotlinJsIrSubTarget( internal fun configure() { target.compilations.all { val npmProject = it.npmProject - it.kotlinOptions { - freeCompilerArgs += "$PER_MODULE_OUTPUT_NAME=${npmProject.name}" - } + it.compilerOptions.options.freeCompilerArgs.add("$PER_MODULE_OUTPUT_NAME=${npmProject.name}") } configureTests() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt index 1bbc0bcd746..0cac5ab9634 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt @@ -37,8 +37,7 @@ internal open class BaseKotlin2JsCompileConfig( configureAdditionalFreeCompilerArguments(task, compilation) - task.compilerOptions.moduleName.convention(compilation.moduleName) - task.moduleName.set(providers.provider { compilation.moduleName }) + task.moduleName.set(task.compilerOptions.moduleName) @Suppress("DEPRECATION") task.outputFileProperty.value( diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/ProjectCompilerOptionsTests.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/ProjectCompilerOptionsTests.kt index ccb83c4530d..7baaf6a4053 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/ProjectCompilerOptionsTests.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/ProjectCompilerOptionsTests.kt @@ -11,11 +11,13 @@ import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget import org.jetbrains.kotlin.gradle.plugin.mpp.external.createCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.external.createExternalKotlinTarget +import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile as KotlinJvmCompileTask import org.jetbrains.kotlin.gradle.tasks.withType import org.jetbrains.kotlin.gradle.util.* import org.jetbrains.kotlin.gradle.utils.named +import org.jetbrains.kotlin.test.util.JUnit4Assertions.assertTrue import kotlin.test.Test import kotlin.test.assertEquals @@ -322,6 +324,53 @@ class ProjectCompilerOptionsTests { assertEquals("my-custom-module-name", project.kotlinJvmTask("compileKotlinJvm").compilerOptions.moduleName.orNull) } + @Test + fun testJsOptionsIsConfigured() { + val project = buildProjectWithMPP() + project.runLifecycleAwareTest { + with(multiplatformExtension) { + js { + compilerOptions { + moduleName.set("js-module-name") + freeCompilerArgs.add("-Xstrict-implicit-export-types") + } + } + } + } + + val kotlinJsCompileTask = project.kotlinJsTask("compileKotlinJs") + assertEquals("js-module-name", kotlinJsCompileTask.compilerOptions.moduleName.orNull) + assertTrue( + kotlinJsCompileTask + .compilerOptions + .freeCompilerArgs.get() + .contains("-Xstrict-implicit-export-types") + ) + } + + @Test + fun testJsBrowserConfigDoesNotOverrideFreeCompilerArgsFromTarget() { + val project = buildProjectWithMPP() + project.runLifecycleAwareTest { + with(multiplatformExtension) { + js { + binaries.executable() + browser() + compilerOptions { + freeCompilerArgs.addAll("-Xstrict-implicit-export-types", "-Xexplicit-api=warning") + } + } + } + } + + val kotlinJsCompileTask = project.kotlinJsTask("compileKotlinJs") + assertTrue( + (kotlinJsCompileTask as Kotlin2JsCompile) + .enhancedFreeCompilerArgs.get() + .containsAll(listOf("-Xstrict-implicit-export-types", "-Xexplicit-api=warning")) + ) + } + private fun Project.kotlinNativeTask(name: String): KotlinCompilationTask = tasks .named>(name) .get()