diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt index fc01f9e5bae..1ef9e87a8dd 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt @@ -346,4 +346,23 @@ class KotlinGradleIT: BaseGradleIT() { assertFileExists("libJs/build/classes/test/libJs_test.js") } } + + @Test + fun testFreeCompilerArgs() { + val project = Project("kotlinProject", GRADLE_VERSION) + project.setupWorkingDir() + + File(project.projectDir, "build.gradle").modify { + // lazy eval is important + val customModuleName = "\${project.name}" + it + """ + compileKotlin { + kotlinOptions.freeCompilerArgs = [ "-module-name", "$customModuleName" ] + }""" + } + + project.build("build") { + assertSuccessful() + } + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptionsImpl.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptionsImpl.kt index 88d8ddaf1a5..ac7b19c650b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptionsImpl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptionsImpl.kt @@ -19,11 +19,13 @@ package org.jetbrains.kotlin.gradle.dsl import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments import org.jetbrains.kotlin.cli.js.K2JSCompiler -internal class KotlinJsOptionsImpl() : KotlinJsOptionsBase() { +internal class KotlinJsOptionsImpl : KotlinJsOptionsBase() { override var freeCompilerArgs: List = listOf() override fun updateArguments(args: K2JSCompilerArguments) { super.updateArguments(args) - K2JSCompiler().parseArguments(freeCompilerArgs.toTypedArray(), args) + // cast to List is important because in Groovy a GString can be inside of a list + val freeArgsArray = (freeCompilerArgs as List).map(Any::toString).toTypedArray() + K2JSCompiler().parseArguments(freeArgsArray, args) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptionsImpl.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptionsImpl.kt index ba5c336ee4b..72ed22d34b8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptionsImpl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptionsImpl.kt @@ -24,6 +24,8 @@ internal class KotlinJvmOptionsImpl : KotlinJvmOptionsBase() { override fun updateArguments(args: K2JVMCompilerArguments) { super.updateArguments(args) - K2JVMCompiler().parseArguments(freeCompilerArgs.toTypedArray(), args) + // cast to List is important because in Groovy a GString can be inside of a list + val freeArgsArray = (freeCompilerArgs as List).map(Any::toString).toTypedArray() + K2JVMCompiler().parseArguments(freeArgsArray, args) } }