Wizard: do not allow to choose Frontend Application template & JS Library at the same time
#KT-40371 fixed
This commit is contained in:
+9
@@ -10,6 +10,7 @@ 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.core.entity.settings.ModuleConfiguratorSettingReference
|
||||
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
|
||||
@@ -19,6 +20,7 @@ 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
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.SimpleJsClientTemplate
|
||||
|
||||
interface JSConfigurator : ModuleConfiguratorWithModuleType, ModuleConfiguratorWithSettings {
|
||||
override val moduleType: ModuleType get() = ModuleType.js
|
||||
@@ -60,6 +62,13 @@ interface JSConfigurator : ModuleConfiguratorWithModuleType, ModuleConfiguratorW
|
||||
GenerationPhase.PROJECT_GENERATION
|
||||
) {
|
||||
defaultValue = value(JsTargetKind.APPLICATION)
|
||||
filter = filter@{ reference, kindCandidate ->
|
||||
when {
|
||||
reference !is ModuleConfiguratorSettingReference<*, *> -> false
|
||||
kindCandidate == JsTargetKind.LIBRARY && reference.module?.template is SimpleJsClientTemplate -> false
|
||||
else -> true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val cssSupport by booleanSetting(
|
||||
|
||||
+4
-1
@@ -25,7 +25,10 @@ class NativeConsoleApplicationTemplate : Template() {
|
||||
override val moduleTypes: Set<ModuleType> = setOf(ModuleType.native)
|
||||
override val id: String = "nativeConsoleApp"
|
||||
|
||||
override fun isApplicableTo(module: Module): Boolean =
|
||||
override fun isApplicableTo(
|
||||
reader: Reader,
|
||||
module: Module
|
||||
): Boolean =
|
||||
module.configurator.safeAs<NativeTargetConfigurator>()?.isDesktopTarget == true
|
||||
|
||||
override fun updateTargetIr(module: ModuleIR, targetConfigurationIR: TargetConfigurationIR): TargetConfigurationIR =
|
||||
|
||||
+16
-5
@@ -17,8 +17,6 @@ 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.library.MavenArtifact
|
||||
import org.jetbrains.kotlin.tools.projectWizard.library.NpmArtifact
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JsBrowserTargetConfigurator
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JsSingleplatformModuleConfigurator
|
||||
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
|
||||
@@ -29,7 +27,9 @@ import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.Templa
|
||||
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.interceptTemplate
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.Versions
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.withSettingsOf
|
||||
|
||||
class SimpleJsClientTemplate : Template() {
|
||||
override val title: String = KotlinNewProjectWizardBundle.message("module.template.js.simple.title")
|
||||
@@ -40,9 +40,20 @@ class SimpleJsClientTemplate : Template() {
|
||||
@NonNls
|
||||
override val id: String = "simpleJsClient"
|
||||
|
||||
override fun isApplicableTo(module: Module): Boolean =
|
||||
module.configurator == JsBrowserTargetConfigurator
|
||||
|| module.configurator == JsSingleplatformModuleConfigurator
|
||||
override fun isApplicableTo(
|
||||
reader: Reader,
|
||||
module: Module
|
||||
): Boolean = when (module.configurator) {
|
||||
JsBrowserTargetConfigurator -> true
|
||||
JsSingleplatformModuleConfigurator -> {
|
||||
with(reader) {
|
||||
withSettingsOf(module, module.configurator) {
|
||||
JSConfigurator.kind.reference.notRequiredSettingValue == JsTargetKind.APPLICATION
|
||||
}
|
||||
}
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
|
||||
val renderEngine by enumSetting<RenderEngine>(
|
||||
KotlinNewProjectWizardBundle.message("module.template.js.simple.setting.rendering.engine"),
|
||||
|
||||
+4
-1
@@ -77,7 +77,10 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor, DisplayableSet
|
||||
|
||||
override val text: String get() = title
|
||||
|
||||
open fun isApplicableTo(module: Module): Boolean = true
|
||||
open fun isApplicableTo(
|
||||
reader: Reader,
|
||||
module: Module
|
||||
): Boolean = true
|
||||
|
||||
open val settings: List<TemplateSetting<*, *>> = emptyList()
|
||||
open val interceptionPoints: List<InterceptionPoint<Any>> = emptyList()
|
||||
|
||||
Reference in New Issue
Block a user