Kind and css support to single platform JS
#KT-39770 fixed
This commit is contained in:
+62
-7
@@ -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"
|
||||||
|
|||||||
+6
-43
@@ -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()"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-1
@@ -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()
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user