diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt index df91c11f49b..53e323c535c 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt @@ -63,6 +63,7 @@ class K2JVMCompilerArguments : CommonCompilerArguments() { ) var scriptTemplates: Array? by FreezableVar(null) + @GradleOption(DefaultValues.StringNullDefault::class) @Argument(value = "-module-name", valueDescription = "", description = "Name of the generated .kotlin_module file") var moduleName: String? by NullableStringFreezableVar(null) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SimpleKotlinGradleIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SimpleKotlinGradleIT.kt index f30115534f1..9cb76dd0ed7 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SimpleKotlinGradleIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SimpleKotlinGradleIT.kt @@ -73,6 +73,16 @@ class SimpleKotlinGradleIT : BaseGradleIT() { } } + @Test + fun testModuleName() { + Project("moduleName").build("build") { + assertSuccessful() + assertFileExists("build/classes/kotlin/main/META-INF/FLAG.kotlin_module") + assertNoSuchFile("build/classes/kotlin/main/META-INF/moduleName.kotlin_module") + assertNotContains("Argument -module-name is passed multiple times") + } + } + @Test fun testCustomJdk() { Project("customJdk").build("build") { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/moduleName/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/moduleName/build.gradle new file mode 100644 index 00000000000..a716e5864a3 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/moduleName/build.gradle @@ -0,0 +1,32 @@ +buildscript { + repositories { + mavenLocal() + mavenCentral() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +apply plugin: "kotlin" + +sourceSets { + main { + kotlin { + srcDir 'src' + } + } +} + +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" +} + +compileKotlin { + kotlinOptions.moduleName = "FLAG" +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/moduleName/src/helloWorld.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/moduleName/src/helloWorld.kt new file mode 100644 index 00000000000..08e9432cacb --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/moduleName/src/helloWorld.kt @@ -0,0 +1,3 @@ +interface A { + fun foo(): Int = 1 +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptions.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptions.kt index e3aa3c9b9de..165b3fc7be4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptions.kt @@ -29,6 +29,12 @@ interface KotlinJvmOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonOption */ var jvmTarget: kotlin.String + /** + * Name of the generated .kotlin_module file + * Default value: null + */ + var moduleName: kotlin.String? + /** * Don't automatically include the Java runtime into the classpath * Default value: false diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptionsBase.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptionsBase.kt index fb700b609ea..54c336764d2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptionsBase.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptionsBase.kt @@ -67,6 +67,13 @@ internal abstract class KotlinJvmOptionsBase : org.jetbrains.kotlin.gradle.dsl.K jvmTargetField = value } + private var moduleNameField: kotlin.String?? = null + override var moduleName: kotlin.String? + get() = moduleNameField ?: null + set(value) { + moduleNameField = value + } + private var noJdkField: kotlin.Boolean? = null override var noJdk: kotlin.Boolean get() = noJdkField ?: false @@ -105,6 +112,7 @@ internal abstract class KotlinJvmOptionsBase : org.jetbrains.kotlin.gradle.dsl.K javaParametersField?.let { args.javaParameters = it } jdkHomeField?.let { args.jdkHome = it } jvmTargetField?.let { args.jvmTarget = it } + moduleNameField?.let { args.moduleName = it } noJdkField?.let { args.noJdk = it } noReflectField?.let { args.noReflect = it } noStdlibField?.let { args.noStdlib = it } @@ -122,6 +130,7 @@ internal fun org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments.fi javaParameters = false jdkHome = null jvmTarget = "1.6" + moduleName = null noJdk = false noReflect = true noStdlib = true