Wizard: add option to enable Java support for JVM targets

#KT-36179 fixed
This commit is contained in:
Ilya Kirillov
2020-03-10 14:24:20 +03:00
parent 691ee7412a
commit a16cb7b74d
10 changed files with 142 additions and 17 deletions
@@ -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/");
@@ -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')
}
}
}
}
@@ -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"))
}
}
}
}
@@ -0,0 +1 @@
rootProject.name = 'generatedProject'
@@ -0,0 +1 @@
rootProject.name = "generatedProject"
@@ -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
@@ -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/");
@@ -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
}
@@ -36,7 +36,9 @@ object NativeForCurrentSystemTarget : NativeTargetConfigurator, SingleCoexistenc
override val text = "For Current System"
override fun ReadingContext.createTargetIrs(module: Module): List<BuildSystemIR> {
override fun ReadingContext.createTargetIrs(
module: Module
): List<BuildSystemIR> {
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()
)
}
}
@@ -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<TargetConfigurator>): Boolean = true
fun ReadingContext.createTargetIrs(module: Module): List<BuildSystemIR>
fun ReadingContext.createInnerTargetIrs(module: Module): List<BuildSystemIR> = emptyList()
fun createInnerTargetIrs(
readingContext: ReadingContext,
module: Module
): List<BuildSystemIR> = 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<BuildSystemIR> = buildList {
override fun ReadingContext.createTargetIrs(
module: Module
): List<BuildSystemIR> = 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<BuildSystemIR> = buildList {
override fun ReadingContext.createTargetIrs(
module: Module
): List<BuildSystemIR> = 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<BuildSystemIR> = buildList {
override fun ReadingContext.createTargetIrs(
module: Module
): List<BuildSystemIR> = 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<BuildSystemIR> = 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<BuildSystemIR> = 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<ModuleConfiguratorSetting<*, *>> =
super.getConfiguratorSettings() +
Settings.javaSupport
object Settings : ModuleConfiguratorSettings() {
val javaSupport by booleanSetting("Java language support", GenerationPhase.PROJECT_GENERATION) {
defaultValue = value(false)
}
}
}