diff --git a/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/YamlNewWizardProjectImportTestGenerated.java b/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/YamlNewWizardProjectImportTestGenerated.java index 4c4a1dbb5df..3dcf263710e 100644 --- a/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/YamlNewWizardProjectImportTestGenerated.java +++ b/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/YamlNewWizardProjectImportTestGenerated.java @@ -45,6 +45,11 @@ public class YamlNewWizardProjectImportTestGenerated extends AbstractYamlNewWiza runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTarget/"); } + @TestMetadata("jvmTargetWithJava") + public void testJvmTargetWithJava() throws Exception { + runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/"); + } + @TestMetadata("kotlinJvm") public void testKotlinJvm() throws Exception { runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/kotlinJvm/"); @@ -98,6 +103,11 @@ public class YamlNewWizardProjectImportTestGenerated extends AbstractYamlNewWiza runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTarget/"); } + @TestMetadata("jvmTargetWithJava") + public void testJvmTargetWithJava() throws Exception { + runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/"); + } + @TestMetadata("kotlinJvm") public void testKotlinJvm() throws Exception { runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/kotlinJvm/"); @@ -151,6 +161,11 @@ public class YamlNewWizardProjectImportTestGenerated extends AbstractYamlNewWiza runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTarget/"); } + @TestMetadata("jvmTargetWithJava") + public void testJvmTargetWithJava() throws Exception { + runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/"); + } + @TestMetadata("kotlinJvm") public void testKotlinJvm() throws Exception { runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/kotlinJvm/"); diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/build.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/build.gradle new file mode 100644 index 00000000000..1b98f9df0c3 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/build.gradle @@ -0,0 +1,29 @@ +plugins { + id 'org.jetbrains.kotlin.multiplatform' version '1.3.70' +} +group = 'testGroupId' +version = '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} +kotlin { + jvm { + compilations.all { + kotlinOptions.jvmTarget = '1.8' + } + withJava() + } + sourceSets { + jvmMain { + dependencies { + implementation kotlin('stdlib-jdk8') + } + } + jvmTest { + dependencies { + implementation kotlin('test-junit') + } + } + } +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/build.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/build.gradle.kts new file mode 100644 index 00000000000..91dc9330366 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/build.gradle.kts @@ -0,0 +1,29 @@ +plugins { + kotlin("multiplatform") version "1.3.70" +} +group = "testGroupId" +version = "1.0-SNAPSHOT" + +repositories { + mavenCentral() +} +kotlin { + jvm { + compilations.all { + kotlinOptions.jvmTarget = "1.8" + } + withJava() + } + sourceSets { + val jvmMain by getting { + dependencies { + implementation(kotlin("stdlib-jdk8")) + } + } + val jvmTest by getting { + dependencies { + implementation(kotlin("test-junit")) + } + } + } +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/settings.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/settings.gradle new file mode 100644 index 00000000000..c8f757733f2 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'generatedProject' \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/settings.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/settings.gradle.kts new file mode 100644 index 00000000000..b9c39b1ab0d --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "generatedProject" \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/settings.yaml b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/settings.yaml new file mode 100644 index 00000000000..b30e5144077 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/settings.yaml @@ -0,0 +1,12 @@ +kotlin: + projectKind: Multiplatform + modules: + - type: multiplatform + name: a + subModules: + - type: + targetJvmVersion: "1.8" + javaSupport: true + name: jvmTarget + testFramework: JUNIT4 + name: jvm \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/YamlBuildFileGenerationTestGenerated.java b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/YamlBuildFileGenerationTestGenerated.java index 0b68fcbbaf9..a205fa33cf0 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/YamlBuildFileGenerationTestGenerated.java +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/YamlBuildFileGenerationTestGenerated.java @@ -43,6 +43,11 @@ public class YamlBuildFileGenerationTestGenerated extends AbstractYamlBuildFileG runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTarget/"); } + @TestMetadata("jvmTargetWithJava") + public void testJvmTargetWithJava() throws Exception { + runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/"); + } + @TestMetadata("kotlinJvm") public void testKotlinJvm() throws Exception { runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/kotlinJvm/"); diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/gradle/multiplatform/ir.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/gradle/multiplatform/ir.kt index 817f72af8f9..1416b5b3203 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/gradle/multiplatform/ir.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/gradle/multiplatform/ir.kt @@ -31,7 +31,9 @@ interface TargetConfigurationIR : MultiplatformIR, IrsOwner { } fun TargetConfigurationIR.addWithJavaIntoJvmTarget() = when { - this is DefaultTargetConfigurationIR && targetAccess.type == ModuleSubType.jvm -> + this is DefaultTargetConfigurationIR + && targetAccess.type == ModuleSubType.jvm + && irs.none { it is GradleCallIr } -> withIrs(GradleCallIr("withJava")) else -> this } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/NativeTargetConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/NativeTargetConfigurator.kt index b03fb611477..c7074f95499 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/NativeTargetConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/NativeTargetConfigurator.kt @@ -36,7 +36,9 @@ object NativeForCurrentSystemTarget : NativeTargetConfigurator, SingleCoexistenc override val text = "For Current System" - override fun ReadingContext.createTargetIrs(module: Module): List { + override fun ReadingContext.createTargetIrs( + module: Module + ): List { val moduleName = module.name val variableName = "${moduleName}Target" @@ -71,7 +73,7 @@ object NativeForCurrentSystemTarget : NativeTargetConfigurator, SingleCoexistenc +NonDefaultTargetConfigurationIR( variableName = variableName, targetName = moduleName, - irs = createInnerTargetIrs(module).toPersistentList() + irs = createInnerTargetIrs(this@createTargetIrs, module).toPersistentList() ) } } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt index 5cd58ef0b04..8c22813cbda 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt @@ -5,10 +5,12 @@ import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.buildList import org.jetbrains.kotlin.tools.projectWizard.core.buildPersistenceList +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ModuleConfiguratorSetting import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.* import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.DefaultTargetConfigurationIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.TargetAccessIR +import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.buildSystemType import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType @@ -22,7 +24,10 @@ interface TargetConfigurator : ModuleConfiguratorWithModuleType { fun canCoexistsWith(other: List): Boolean = true fun ReadingContext.createTargetIrs(module: Module): List - fun ReadingContext.createInnerTargetIrs(module: Module): List = emptyList() + fun createInnerTargetIrs( + readingContext: ReadingContext, + module: Module + ): List = emptyList() } abstract class TargetConfiguratorWithTests : ModuleConfiguratorWithTests, TargetConfigurator @@ -41,10 +46,12 @@ interface SimpleTargetConfigurator : TargetConfigurator { override val suggestedModuleName: String? get() = moduleSubType.name - override fun ReadingContext.createTargetIrs(module: Module): List = buildList { + override fun ReadingContext.createTargetIrs( + module: Module + ): List = buildList { +DefaultTargetConfigurationIR( module.createTargetAccessIr(moduleSubType), - createInnerTargetIrs(module).toPersistentList() + createInnerTargetIrs(this@createTargetIrs, module).toPersistentList() ) } } @@ -65,7 +72,9 @@ object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWit override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JS - override fun ReadingContext.createTargetIrs(module: Module): List = buildList { + override fun ReadingContext.createTargetIrs( + module: Module + ): List = buildList { +DefaultTargetConfigurationIR( module.createTargetAccessIr(ModuleSubType.js), buildPersistenceList { @@ -83,7 +92,9 @@ object JsNodeTargetConfigurator : JsTargetConfigurator { override val suggestedModuleName = "nodeJs" - override fun ReadingContext.createTargetIrs(module: Module): List = buildList { + override fun ReadingContext.createTargetIrs( + module: Module + ): List = buildList { +DefaultTargetConfigurationIR( module.createTargetAccessIr(ModuleSubType.js), buildPersistenceList { @@ -111,17 +122,35 @@ object JvmTargetConfigurator : JvmModuleConfigurator, override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JUNIT4 - override fun ReadingContext.createInnerTargetIrs(module: Module): List = buildList { - val targetVersionValue = withSettingsOf(module) { JvmModuleConfigurator.targetJvmVersion.reference.settingValue.value } - when { - buildSystemType.isGradle -> { - +GradleSectionIR( - "compilations.all", - BodyIR( - GradleAssignmentIR("kotlinOptions.jvmTarget", GradleStringConstIR(targetVersionValue)) + override fun createInnerTargetIrs( + readingContext: ReadingContext, + module: Module + ): List = buildList { + with(readingContext) { + withSettingsOf(module) { + val targetVersionValue = JvmModuleConfigurator.targetJvmVersion.reference.settingValue.value + if (buildSystemType.isGradle) { + +GradleSectionIR( + "compilations.all", + BodyIR( + GradleAssignmentIR("kotlinOptions.jvmTarget", GradleStringConstIR(targetVersionValue)) + ) ) - ) + } + if (Settings.javaSupport.reference.settingValue) { + +GradleCallIr("withJava") + } } } } + + override fun getConfiguratorSettings(): List> = + super.getConfiguratorSettings() + + Settings.javaSupport + + object Settings : ModuleConfiguratorSettings() { + val javaSupport by booleanSetting("Java language support", GenerationPhase.PROJECT_GENERATION) { + defaultValue = value(false) + } + } }