Kind and css support to single platform JS

#KT-39770 fixed
This commit is contained in:
Ilya Goncharov
2020-06-19 13:33:19 +03:00
parent 5676d31a1c
commit c2e97a7287
3 changed files with 74 additions and 51 deletions
@@ -9,20 +9,75 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import org.jetbrains.annotations.NonNls import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
import org.jetbrains.kotlin.tools.projectWizard.core.Reader 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.BuildSystemIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinBuildSystemPluginIR 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.GradleIRListBuilder
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.irsList 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.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData 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.Module
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
interface JSConfigurator : ModuleConfiguratorWithModuleType { interface JSConfigurator : ModuleConfiguratorWithModuleType, ModuleConfiguratorWithSettings {
override val moduleType: ModuleType get() = ModuleType.js override val moduleType: ModuleType get() = ModuleType.js
override fun getConfiguratorSettings(): List<ModuleConfiguratorSetting<*, *>> =
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<JsTargetKind>(
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<ModuleConfiguratorSetting<*, *>> =
super<ModuleConfiguratorWithTests>.getConfiguratorSettings() +
super<JSConfigurator>.getConfiguratorSettings() +
JSConfigurator.cssSupport
override val moduleKind = ModuleKind.singleplatformJs override val moduleKind = ModuleKind.singleplatformJs
@NonNls @NonNls
@@ -49,16 +104,16 @@ object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWi
): List<BuildSystemIR> = irsList { ): List<BuildSystemIR> = irsList {
"kotlin" { "kotlin" {
"js" { "js" {
+"browser" { browserSubTarget(module, reader)
applicationCssSupport()
testCssSupport()
}
+"binaries.executable()"
} }
} }
} }
} }
fun GradleIRListBuilder.applicationSupport() {
+"binaries.executable()"
}
fun GradleIRListBuilder.applicationCssSupport() { fun GradleIRListBuilder.applicationCssSupport() {
"webpackTask" { "webpackTask" {
+"cssSupport.enabled = true" +"cssSupport.enabled = true"
@@ -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.irsList
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.DefaultTargetConfigurationIR 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.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.phases.GenerationPhase
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.buildSystemType 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.buildSystem.isGradle
@@ -69,32 +70,7 @@ internal fun Module.createTargetAccessIr(moduleSubType: ModuleSubType) =
) )
interface JsTargetConfigurator : JSConfigurator, TargetConfigurator, SingleCoexistenceTargetConfigurator, ModuleConfiguratorWithSettings { interface JsTargetConfigurator : JSConfigurator, TargetConfigurator, SingleCoexistenceTargetConfigurator, ModuleConfiguratorWithSettings
companion object : ModuleConfiguratorSettings() {
val kind by enumSetting<JsTargetKind>(
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<ModuleConfiguratorSetting<*, *>> =
super.getConfiguratorSettings() + kind + cssSupport
fun Reader.isApplication(module: Module): Boolean =
settingsValue(module, kind) == JsTargetKind.APPLICATION
fun Reader.hasCssSupport(module: Module): Boolean =
settingsValue(module, cssSupport)
}
enum class JsTargetKind(override val text: String) : DisplayableSettingItem { enum class JsTargetKind(override val text: String) : DisplayableSettingItem {
LIBRARY(KotlinNewProjectWizardBundle.message("module.configurator.js.target.settings.kind.library")), 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 { object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWithTests {
override fun getConfiguratorSettings(): List<ModuleConfiguratorSetting<*, *>> = override fun getConfiguratorSettings(): List<ModuleConfiguratorSetting<*, *>> =
super<ModuleConfiguratorWithTests>.getConfiguratorSettings() + super<ModuleConfiguratorWithTests>.getConfiguratorSettings() +
super<JsTargetConfigurator>.getConfiguratorSettings() super<JsTargetConfigurator>.getConfiguratorSettings() +
cssSupport
@NonNls @NonNls
override val id = "jsBrowser" override val id = "jsBrowser"
@@ -122,17 +99,7 @@ object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWit
+DefaultTargetConfigurationIR( +DefaultTargetConfigurationIR(
module.createTargetAccessIr(ModuleSubType.js) module.createTargetAccessIr(ModuleSubType.js)
) { ) {
"browser" { browserSubTarget(module, this@createTargetIrs)
if (isApplication(module)) {
+"binaries.executable()"
}
if (hasCssSupport(module)) {
if (isApplication(module)) {
applicationCssSupport()
}
testCssSupport()
}
}
} }
} }
} }
@@ -153,11 +120,7 @@ object JsNodeTargetConfigurator : JsTargetConfigurator {
+DefaultTargetConfigurationIR( +DefaultTargetConfigurationIR(
module.createTargetAccessIr(ModuleSubType.js) module.createTargetAccessIr(ModuleSubType.js)
) { ) {
"nodejs" { nodejsSubTarget(module, this@createTargetIrs)
if (isApplication(module)) {
+"binaries.executable()"
}
}
} }
} }
} }
@@ -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 package org.jetbrains.kotlin.tools.projectWizard.projectTemplates
import org.jetbrains.annotations.NonNls import org.jetbrains.annotations.NonNls
@@ -207,7 +212,7 @@ object MultiplatformLibraryProjectTemplate : ProjectTemplate() {
ModuleType.common.createDefaultTarget(), ModuleType.common.createDefaultTarget(),
ModuleType.jvm.createDefaultTarget(), ModuleType.jvm.createDefaultTarget(),
ModuleType.js.createDefaultTarget().withConfiguratorSettings(JsBrowserTargetConfigurator) { ModuleType.js.createDefaultTarget().withConfiguratorSettings(JsBrowserTargetConfigurator) {
JsTargetConfigurator.kind withValue JsTargetKind.LIBRARY JSConfigurator.kind withValue JsTargetKind.LIBRARY
}, },
ModuleType.native.createDefaultTarget() ModuleType.native.createDefaultTarget()
) )