From 367699a853b3332520690b39f97192260d0152a8 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 9 Apr 2020 18:01:10 +0300 Subject: [PATCH] Wizard: fix js Gradle dsl #KT-38121 fixed --- .../jsNodeAndBrowserTargets/build.gradle | 4 +- .../jsNodeAndBrowserTargets/build.gradle.kts | 4 +- .../simpleMultiplatform/build.gradle | 2 +- .../simpleMultiplatform/build.gradle.kts | 2 +- .../singleplatformJs/expected/build.gradle | 7 +++- .../expected/build.gradle.kts | 7 +++- .../frontendApplication/build.gradle | 7 +++- .../frontendApplication/build.gradle.kts | 7 +++- .../fullStackWebApplication/build.gradle | 2 +- .../fullStackWebApplication/build.gradle.kts | 2 +- .../KotlinNewProjectWizardBundle.properties | 4 ++ .../JsModuleConfigurator.kt | 8 +++- .../moduleConfigurators/ModuleConfigurator.kt | 3 ++ .../moduleConfigurators/TargetConfigurator.kt | 41 +++++++++++++++++-- .../projectTemplates/ProjectTemplate.kt | 4 +- 15 files changed, 86 insertions(+), 18 deletions(-) diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jsNodeAndBrowserTargets/build.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jsNodeAndBrowserTargets/build.gradle index bd95afe80c6..813539bd3fd 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jsNodeAndBrowserTargets/build.gradle +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jsNodeAndBrowserTargets/build.gradle @@ -13,12 +13,12 @@ repositories { kotlin { js('nodeJs') { nodejs { - + binaries.executable() } } js('browser') { browser { - + binaries.executable() } } sourceSets { diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jsNodeAndBrowserTargets/build.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jsNodeAndBrowserTargets/build.gradle.kts index f2fa76929f5..1442f3df750 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jsNodeAndBrowserTargets/build.gradle.kts +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jsNodeAndBrowserTargets/build.gradle.kts @@ -13,12 +13,12 @@ repositories { kotlin { js("nodeJs") { nodejs { - + binaries.executable() } } js("browser") { browser { - + binaries.executable() } } sourceSets { diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/simpleMultiplatform/build.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/simpleMultiplatform/build.gradle index 43196b7ab15..50dff789315 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/simpleMultiplatform/build.gradle +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/simpleMultiplatform/build.gradle @@ -18,7 +18,7 @@ kotlin { } js('a') { browser { - + binaries.executable() } } sourceSets { diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/simpleMultiplatform/build.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/simpleMultiplatform/build.gradle.kts index a94bd88b938..d701f0929d0 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/simpleMultiplatform/build.gradle.kts +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/simpleMultiplatform/build.gradle.kts @@ -18,7 +18,7 @@ kotlin { } js("a") { browser { - + binaries.executable() } } sourceSets { diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/singleplatformJs/expected/build.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/singleplatformJs/expected/build.gradle index 5de1e6ec62a..8e69b5e6dcb 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/singleplatformJs/expected/build.gradle +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/singleplatformJs/expected/build.gradle @@ -14,4 +14,9 @@ dependencies { testImplementation 'org.jetbrains.kotlin:kotlin-test-js' implementation 'org.jetbrains.kotlin:kotlin-stdlib-js' } -kotlin.target.browser { } \ No newline at end of file +kotlin { + js { + browser {} + binaries.executable() + } +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/singleplatformJs/expected/build.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/singleplatformJs/expected/build.gradle.kts index 4e03dc3f541..d42e14f06d8 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/singleplatformJs/expected/build.gradle.kts +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/singleplatformJs/expected/build.gradle.kts @@ -14,4 +14,9 @@ dependencies { testImplementation(kotlin("test-js")) implementation(kotlin("stdlib-js")) } -kotlin.target.browser { } \ No newline at end of file +kotlin { + js { + browser {} + binaries.executable() + } +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/frontendApplication/build.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/frontendApplication/build.gradle index 6ba9ac47f29..626036d7e31 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/frontendApplication/build.gradle +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/frontendApplication/build.gradle @@ -27,4 +27,9 @@ dependencies { implementation npm('styled-components','5.0.0') implementation npm('inline-style-prefixer','5.1.0') } -kotlin.target.browser { } \ No newline at end of file +kotlin { + js { + browser {} + binaries.executable() + } +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/frontendApplication/build.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/frontendApplication/build.gradle.kts index a299f1c7a9f..ffa3ca9f3b0 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/frontendApplication/build.gradle.kts +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/frontendApplication/build.gradle.kts @@ -27,4 +27,9 @@ dependencies { implementation(npm("styled-components","5.0.0")) implementation(npm("inline-style-prefixer","5.1.0")) } -kotlin.target.browser { } \ No newline at end of file +kotlin { + js { + browser {} + binaries.executable() + } +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/fullStackWebApplication/build.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/fullStackWebApplication/build.gradle index 7dfe7c67208..28801a8db71 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/fullStackWebApplication/build.gradle +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/fullStackWebApplication/build.gradle @@ -29,7 +29,7 @@ kotlin { } js { browser { - + binaries.executable() } } sourceSets { diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/fullStackWebApplication/build.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/fullStackWebApplication/build.gradle.kts index 706210fa794..18a2b479610 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/fullStackWebApplication/build.gradle.kts +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/fullStackWebApplication/build.gradle.kts @@ -29,7 +29,7 @@ kotlin { } js { browser { - + binaries.executable() } } sourceSets { diff --git a/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties b/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties index 03840f4cb6a..884e2b82d2e 100644 --- a/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties +++ b/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties @@ -87,6 +87,10 @@ module.configurator.ios.requires.xcode=Requires Xcode module.configurator.js.browser=Browser module.configurator.js.node=Node.js +module.configurator.js.target.settings.kind=Target kind +module.configurator.js.target.settings.kind.library=Library +module.configurator.js.target.settings.kind.application=Application + module.configurator.tests.setting.framework=Test framework module.configurator.tests.setting.framework.junit4=JUnit 4 module.configurator.tests.setting.framework.junit5=JUnit 5 diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt index c0fdc5dff1f..44a41ae9aa0 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.buildList import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinBuildSystemPluginIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.RawGradleIR +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.rawIR import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module @@ -48,7 +49,12 @@ object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWi module: Module ): List = buildList { +RawGradleIR { - +"kotlin.target.browser { }" + sectionCall("kotlin", needIndent = true) { + sectionCall("js", needIndent = true) { + +"browser {}"; nlIndented() + +"binaries.executable()" + } + } } } } \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt index be3ae21fbf8..d063eceae9d 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt @@ -173,6 +173,9 @@ interface ModuleConfiguratorWithSettings : ModuleConfigurator { } } } + + fun > Reader.settingsValue(module: Module, setting: ModuleConfiguratorSetting): V = + withSettingsOf(module) { setting.reference.settingValue } } val ModuleConfigurator.settings 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 ea5c78d25bc..7e8752679de 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 @@ -12,10 +12,12 @@ 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.moduleConfigurators.JsBrowserTargetConfigurator.isApplication 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 +import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind @@ -64,9 +66,33 @@ private fun Module.createTargetAccessIr(moduleSubType: ModuleSubType) = ) -interface JsTargetConfigurator : JSConfigurator, TargetConfigurator, SingleCoexistenceTargetConfigurator +interface JsTargetConfigurator : JSConfigurator, TargetConfigurator, SingleCoexistenceTargetConfigurator, ModuleConfiguratorWithSettings { + companion object : ModuleConfiguratorSettings() { + val kind by enumSetting( + KotlinNewProjectWizardBundle.message("module.configurator.js.target.settings.kind"), + GenerationPhase.PROJECT_GENERATION + ) { + defaultValue = value(JsTargetKind.APPLICATION) + } + } + + override fun getConfiguratorSettings(): List> = + super.getConfiguratorSettings() + kind + + fun Reader.isApplication(module: Module): Boolean = + settingsValue(module, kind) == JsTargetKind.APPLICATION +} + +enum class JsTargetKind(override val text: String) : DisplayableSettingItem { + LIBRARY(KotlinNewProjectWizardBundle.message("module.configurator.js.target.settings.kind.library")), + APPLICATION(KotlinNewProjectWizardBundle.message("module.configurator.js.target.settings.kind.application")) +} object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWithTests { + override fun getConfiguratorSettings(): List> = + super.getConfiguratorSettings() + + super.getConfiguratorSettings() + @NonNls override val id = "jsBrowser" @@ -75,7 +101,6 @@ object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWit override val text = KotlinNewProjectWizardBundle.message("module.configurator.js.browser") - override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JS override fun Reader.createTargetIrs( @@ -85,7 +110,11 @@ object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWit module.createTargetAccessIr(ModuleSubType.js), buildPersistenceList { +RawGradleIR { - sectionCall("browser") {} + sectionCall("browser", needIndent = true) { + if (isApplication(module)) { + +"binaries.executable()" + } + } } } ) @@ -109,7 +138,11 @@ object JsNodeTargetConfigurator : JsTargetConfigurator { module.createTargetAccessIr(ModuleSubType.js), buildPersistenceList { +RawGradleIR { - sectionCall("nodejs") {} + sectionCall("nodejs", needIndent = true) { + if (isApplication(module)) { + +"binaries.executable()" + } + } } } ) diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt index 6bd0215086f..8087e2573d4 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt @@ -203,7 +203,9 @@ object MultiplatformLibraryProjectTemplate : ProjectTemplate() { listOf( ModuleType.common.createDefaultTarget(), ModuleType.jvm.createDefaultTarget(), - ModuleType.js.createDefaultTarget(), + ModuleType.js.createDefaultTarget().withConfiguratorSettings(JsBrowserTargetConfigurator) { + JsTargetConfigurator.kind withValue JsTargetKind.LIBRARY + }, ModuleType.native.createDefaultTarget() ) )