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 2aaf211c7cc..5a04180ae89 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 @@ -9,20 +9,75 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators import org.jetbrains.annotations.NonNls import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.core.Reader +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.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.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind -interface JSConfigurator : ModuleConfiguratorWithModuleType { +interface JSConfigurator : ModuleConfiguratorWithModuleType, ModuleConfiguratorWithSettings { override val moduleType: ModuleType get() = ModuleType.js + + 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() + } + testCssSupport() + } + } + } + + 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"), + GenerationPhase.PROJECT_GENERATION + ) { + defaultValue = value(JsTargetKind.APPLICATION) + } + + val cssSupport by booleanSetting( + KotlinNewProjectWizardBundle.message("module.configurator.js.css"), + GenerationPhase.PROJECT_GENERATION + ) { + defaultValue = value(true) + } + } } -object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWithTests, SinglePlatformModuleConfigurator, ModuleConfiguratorWithSettings { +object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWithTests, SinglePlatformModuleConfigurator, + ModuleConfiguratorWithSettings { + override fun getConfiguratorSettings(): List> = + super.getConfiguratorSettings() + + super.getConfiguratorSettings() + + JSConfigurator.cssSupport + override val moduleKind = ModuleKind.singleplatformJs @NonNls @@ -49,16 +104,16 @@ object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWi ): List = irsList { "kotlin" { "js" { - +"browser" { - applicationCssSupport() - testCssSupport() - } - +"binaries.executable()" + browserSubTarget(module, reader) } } } } +fun GradleIRListBuilder.applicationSupport() { + +"binaries.executable()" +} + fun GradleIRListBuilder.applicationCssSupport() { "webpackTask" { +"cssSupport.enabled = true" 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 35099456e0d..d7cce22ec4e 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,6 +16,7 @@ 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.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.buildSystemType import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle @@ -69,32 +70,7 @@ internal fun Module.createTargetAccessIr(moduleSubType: ModuleSubType) = ) -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) - } - - val cssSupport by booleanSetting( - KotlinNewProjectWizardBundle.message("module.configurator.js.css"), - GenerationPhase.PROJECT_GENERATION - ) { - defaultValue = value(true) - } - } - - override fun getConfiguratorSettings(): List> = - super.getConfiguratorSettings() + kind + cssSupport - - fun Reader.isApplication(module: Module): Boolean = - settingsValue(module, kind) == JsTargetKind.APPLICATION - - fun Reader.hasCssSupport(module: Module): Boolean = - settingsValue(module, cssSupport) -} +interface JsTargetConfigurator : JSConfigurator, TargetConfigurator, SingleCoexistenceTargetConfigurator, ModuleConfiguratorWithSettings enum class JsTargetKind(override val text: String) : DisplayableSettingItem { LIBRARY(KotlinNewProjectWizardBundle.message("module.configurator.js.target.settings.kind.library")), @@ -104,7 +80,8 @@ enum class JsTargetKind(override val text: String) : DisplayableSettingItem { object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWithTests { override fun getConfiguratorSettings(): List> = super.getConfiguratorSettings() + - super.getConfiguratorSettings() + super.getConfiguratorSettings() + + cssSupport @NonNls override val id = "jsBrowser" @@ -122,17 +99,7 @@ object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWit +DefaultTargetConfigurationIR( module.createTargetAccessIr(ModuleSubType.js) ) { - "browser" { - if (isApplication(module)) { - +"binaries.executable()" - } - if (hasCssSupport(module)) { - if (isApplication(module)) { - applicationCssSupport() - } - testCssSupport() - } - } + browserSubTarget(module, this@createTargetIrs) } } } @@ -153,11 +120,7 @@ object JsNodeTargetConfigurator : JsTargetConfigurator { +DefaultTargetConfigurationIR( module.createTargetAccessIr(ModuleSubType.js) ) { - "nodejs" { - if (isApplication(module)) { - +"binaries.executable()" - } - } + nodejsSubTarget(module, this@createTargetIrs) } } } 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 8cb2379b7ae..36f8ec34737 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 @@ -1,3 +1,8 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + package org.jetbrains.kotlin.tools.projectWizard.projectTemplates import org.jetbrains.annotations.NonNls @@ -207,7 +212,7 @@ object MultiplatformLibraryProjectTemplate : ProjectTemplate() { ModuleType.common.createDefaultTarget(), ModuleType.jvm.createDefaultTarget(), ModuleType.js.createDefaultTarget().withConfiguratorSettings(JsBrowserTargetConfigurator) { - JsTargetConfigurator.kind withValue JsTargetKind.LIBRARY + JSConfigurator.kind withValue JsTargetKind.LIBRARY }, ModuleType.native.createDefaultTarget() )