From 491eb5e3663f82b749e56d42ece521c75e3ee4a8 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Mon, 24 Aug 2020 15:52:43 +0300 Subject: [PATCH] [JS, Wizard] Move subtarget settings in separate object ^KT-41417 fixed --- .../JsModuleConfigurator.kt | 80 +++++++++++-------- .../moduleConfigurators/TargetConfigurator.kt | 4 +- 2 files changed, 48 insertions(+), 36 deletions(-) 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 6a3876dcd56..85bf480d7f7 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 @@ -17,6 +17,11 @@ 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.GradleIRListBuilder import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.irsList +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.BrowserJsSinglePlatformModuleConfigurator.settingsValue +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JSConfigurator.Companion.isApplication +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JsBrowserBasedConfigurator.Companion.browserSubTarget +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JsBrowserBasedConfigurator.Companion.cssSupport +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JsNodeBasedConfigurator.Companion.nodejsSubTarget import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GradlePlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType @@ -40,38 +45,6 @@ interface JSConfigurator : ModuleConfiguratorWithModuleType, ModuleConfiguratorW override fun getConfiguratorSettings(): List> = super.getConfiguratorSettings() + kind - fun Reader.isApplication(module: Module): Boolean = - settingsValue(module, kind) == JsTargetKind.APPLICATION - - fun Reader.hasCssSupport(module: Module): Boolean = - settingsValue(module, cssSupport) - - fun GradleIRListBuilder.browserSubTarget(module: Module, reader: Reader) { - "browser" { - if (reader.isApplication(module)) { - applicationSupport() - } - if (reader.hasCssSupport(module)) { - if (reader.isApplication(module)) { - applicationCssSupport() - } - } - if (this@JSConfigurator is ModuleConfiguratorWithTests - && reader.settingValue(module, ModuleConfiguratorWithTests.testFramework) != KotlinTestFramework.NONE - ) { - testTask(cssSupport = reader.hasCssSupport(module)) - } - } - } - - fun GradleIRListBuilder.nodejsSubTarget(module: Module, reader: Reader) { - "nodejs" { - if (reader.isApplication(module)) { - applicationSupport() - } - } - } - companion object : ModuleConfiguratorSettings() { val kind by enumSetting( KotlinNewProjectWizardBundle.message("module.configurator.js.target.settings.kind"), @@ -87,12 +60,49 @@ interface JSConfigurator : ModuleConfiguratorWithModuleType, ModuleConfiguratorW } } - val cssSupport by booleanSetting( + fun Reader.isApplication(module: Module): Boolean = + settingsValue(module, kind) == JsTargetKind.APPLICATION + } +} + +interface JsBrowserBasedConfigurator { + companion object : ModuleConfiguratorSettings() { + val cssSupport by JSConfigurator.booleanSetting( KotlinNewProjectWizardBundle.message("module.configurator.js.css"), GenerationPhase.PROJECT_GENERATION ) { defaultValue = value(true) } + + private fun Reader.hasCssSupport(module: Module): Boolean = + settingsValue(module, cssSupport) + + fun GradleIRListBuilder.browserSubTarget(module: Module, reader: Reader) { + "browser" { + if (reader.isApplication(module)) { + applicationSupport() + if (reader.hasCssSupport(module)) { + applicationCssSupport() + } + } + if (reader.settingValue(module, ModuleConfiguratorWithTests.testFramework) != KotlinTestFramework.NONE + ) { + testTask(cssSupport = reader.hasCssSupport(module)) + } + } + } + } +} + +interface JsNodeBasedConfigurator { + companion object : ModuleConfiguratorSettings() { + fun GradleIRListBuilder.nodejsSubTarget(module: Module, reader: Reader) { + "nodejs" { + if (reader.isApplication(module)) { + applicationSupport() + } + } + } } } @@ -133,7 +143,7 @@ abstract class JsSinglePlatformModuleConfigurator : protected abstract fun GradleIRListBuilder.subTarget(module: Module, reader: Reader) } -object BrowserJsSinglePlatformModuleConfigurator : JsSinglePlatformModuleConfigurator() { +object BrowserJsSinglePlatformModuleConfigurator : JsSinglePlatformModuleConfigurator(), JsBrowserBasedConfigurator { @NonNls override val id = "jsBrowserSinglePlatform" @@ -141,7 +151,7 @@ object BrowserJsSinglePlatformModuleConfigurator : JsSinglePlatformModuleConfigu override fun getConfiguratorSettings(): List> { return super.getConfiguratorSettings() + - JSConfigurator.cssSupport + cssSupport } override fun GradleIRListBuilder.subTarget(module: Module, reader: Reader) { 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 2e68c168f34..f8cc14fc72b 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 @@ -16,7 +16,9 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleStri import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.irsList 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.JSConfigurator.Companion.cssSupport +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JsBrowserBasedConfigurator.Companion.browserSubTarget +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JsBrowserBasedConfigurator.Companion.cssSupport +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JsNodeBasedConfigurator.Companion.nodejsSubTarget 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