diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/IdeWizard.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/IdeWizard.kt index c9936b353e5..9b57c07a0ea 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/IdeWizard.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/IdeWizard.kt @@ -1,15 +1,14 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard import org.jetbrains.kotlin.tools.projectWizard.core.PluginsCreator -import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingReference -import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingType -import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingType +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardService import org.jetbrains.kotlin.tools.projectWizard.core.service.ServicesManager import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.projectTemplates.ProjectTemplatesPlugin -import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin import org.jetbrains.kotlin.tools.projectWizard.wizard.service.IdeaWizardService import kotlin.properties.ReadWriteProperty import kotlin.reflect.KProperty diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/Component.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/Component.kt index 06d64612c21..f7656fb510b 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/Component.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/Component.kt @@ -2,9 +2,12 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext -import org.jetbrains.kotlin.tools.projectWizard.core.entity.* import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext import org.jetbrains.kotlin.tools.projectWizard.core.context.SettingsWritingContext +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSettingPropertyReference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingType +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference abstract class Component : Displayable { private val subComponents = mutableListOf() diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/PomWizardStepComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/PomWizardStepComponent.kt index 81bbaccfc7f..105ee22d64e 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/PomWizardStepComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/PomWizardStepComponent.kt @@ -1,8 +1,7 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui import com.intellij.ui.components.panels.VerticalLayout -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext -import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.StringSettingComponent diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/UIComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/UIComponent.kt index 70f9aa6e6a2..d85fee13f5c 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/UIComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/UIComponent.kt @@ -8,6 +8,8 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components import com.intellij.openapi.Disposable import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingType import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.DynamicComponent import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.FocusableComponent diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/BuildSystemTypeSettingComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/BuildSystemTypeSettingComponent.kt index f063290f88c..0ff37d22402 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/BuildSystemTypeSettingComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/BuildSystemTypeSettingComponent.kt @@ -4,14 +4,13 @@ import com.intellij.icons.AllIcons import icons.GradleIcons import icons.OpenapiIcons import org.jetbrains.kotlin.idea.KotlinIcons -import org.jetbrains.kotlin.tools.projectWizard.core.entity.DropDownSettingType -import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingReference -import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.DropDownSettingType +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext -import org.jetbrains.kotlin.tools.projectWizard.wizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components.DropDownComponent import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.UIComponentDelegatingSettingComponent @@ -25,7 +24,7 @@ class BuildSystemTypeSettingComponent( override val uiComponent: DropDownComponent = DropDownComponent( ideContext, setting.type.values, - labelText = KotlinNewProjectWizardBundle.message("setting.build.system.label"), + labelText = "Build System", filter = { value -> read { setting.type.filter(this, reference, value) } }, validator = setting.validator, iconProvider = BuildSystemType::icon, diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/FirstWizardStepComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/FirstWizardStepComponent.kt index 3ca4b9c9ff9..1bad4f5b6d4 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/FirstWizardStepComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/FirstWizardStepComponent.kt @@ -1,11 +1,9 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.firstStep import TemplateTag -import com.intellij.ide.plugins.newui.VerticalLayout -import com.intellij.ui.JBColor import com.intellij.util.ui.JBUI -import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingReference -import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.projectTemplates.ProjectTemplatesPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.projectTemplates.applyProjectTemplate diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt index 3001cc475e5..dc2da2e90cf 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt @@ -1,7 +1,7 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.firstStep -import org.jetbrains.kotlin.tools.projectWizard.core.entity.DropDownSettingType -import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.DropDownSettingType +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference import org.jetbrains.kotlin.tools.projectWizard.plugins.projectTemplates.ProjectTemplatesPlugin import org.jetbrains.kotlin.tools.projectWizard.projectTemplates.ProjectTemplate import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorComponent.kt index 64bc978a719..85bde2665d0 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorComponent.kt @@ -2,10 +2,9 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep.modulesEdi import com.intellij.ui.JBColor import org.jetbrains.kotlin.idea.projectWizard.UiEditorUsageStats -import org.jetbrains.kotlin.tools.projectWizard.core.entity.ListSettingType -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ListSettingType import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult -import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/DefaultSettingComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/DefaultSettingComponent.kt index 0d4ef833a3b..6028e07cd32 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/DefaultSettingComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/DefaultSettingComponent.kt @@ -1,8 +1,8 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting import com.intellij.openapi.ui.ComboBox -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.* import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/SettingComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/SettingComponent.kt index 542e24501b5..21dab3cbb3f 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/SettingComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/SettingComponent.kt @@ -1,8 +1,8 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting -import org.jetbrains.kotlin.tools.projectWizard.core.entity.Setting -import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingReference -import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingType +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.Setting +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingType import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.Displayable import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.DynamicComponent diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/SettingsList.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/SettingsList.kt index 35b560e6c9a..c9d7b56be3a 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/SettingsList.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/SettingsList.kt @@ -1,11 +1,10 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting import com.intellij.ui.components.panels.VerticalLayout -import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingReference import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult import org.jetbrains.kotlin.tools.projectWizard.core.entity.isSpecificError +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext -import org.jetbrains.kotlin.tools.projectWizard.wizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.DynamicComponent import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.FocusableComponent import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.PanelWithStatusText @@ -19,7 +18,7 @@ class SettingsList( settings: List>, private val ideContext: IdeContext ) : DynamicComponent(ideContext), ErrorAwareComponent { - private val panel = PanelWithStatusText(VerticalLayout(5), KotlinNewProjectWizardBundle.message("editor.no.configurable.settings")) + private val panel = PanelWithStatusText(VerticalLayout(5), "This module has no settings to configure") var settingComponents: List> = emptyList() private set diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/UIComponentDelegatingSettingComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/UIComponentDelegatingSettingComponent.kt index ee177298a7b..3246fa4911d 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/UIComponentDelegatingSettingComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/UIComponentDelegatingSettingComponent.kt @@ -5,8 +5,8 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting -import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingReference -import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingType +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingType import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components.UIComponent import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components.valueForSetting diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/src/org/jetbrains/kotlin/tools/projectWizard/YamlSettingsParser.kt b/libraries/tools/new-project-wizard/new-project-wizard-cli/src/org/jetbrains/kotlin/tools/projectWizard/YamlSettingsParser.kt index fae84abd516..67618f2459d 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/src/org/jetbrains/kotlin/tools/projectWizard/YamlSettingsParser.kt +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/src/org/jetbrains/kotlin/tools/projectWizard/YamlSettingsParser.kt @@ -2,7 +2,9 @@ package org.jetbrains.kotlin.tools.projectWizard import org.jetbrains.kotlin.tools.projectWizard.wizard.core.YamlParsingError import org.jetbrains.kotlin.tools.projectWizard.core.* -import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetting +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSettingReference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference import org.yaml.snakeyaml.Yaml import org.yaml.snakeyaml.parser.ParserException import java.nio.file.Path diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/src/org/jetbrains/kotlin/tools/projectWizard/wizard/YamlWizard.kt b/libraries/tools/new-project-wizard/new-project-wizard-cli/src/org/jetbrains/kotlin/tools/projectWizard/wizard/YamlWizard.kt index 58c59f4afbc..e6504cb0bf7 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/src/org/jetbrains/kotlin/tools/projectWizard/wizard/YamlWizard.kt +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/src/org/jetbrains/kotlin/tools/projectWizard/wizard/YamlWizard.kt @@ -5,9 +5,9 @@ import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.context.SettingsWritingContext import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask -import org.jetbrains.kotlin.tools.projectWizard.core.entity.PluginSetting -import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingReference -import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetting +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference import org.jetbrains.kotlin.tools.projectWizard.core.service.IdeaIndependentWizardService import org.jetbrains.kotlin.tools.projectWizard.core.service.Services import org.jetbrains.kotlin.tools.projectWizard.core.service.ServicesManager diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/AbstractYamlBuildFileGenerationTest.kt b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/AbstractYamlBuildFileGenerationTest.kt index 56e94ce8d54..04195618392 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/AbstractYamlBuildFileGenerationTest.kt +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/AbstractYamlBuildFileGenerationTest.kt @@ -13,6 +13,6 @@ import java.nio.file.Path abstract class AbstractYamlBuildFileGenerationTest : AbstractBuildFileGenerationTest() { override fun createWizard(directory: Path, buildSystem: BuildSystem, projectDirectory: Path): Wizard { val yaml = readSettingsYaml(directory, buildSystem) ?: error("settings.yaml should exists in $directory") - return YamlWizard(yaml, projectDirectory.toString(), Plugins.allPlugins, isUnitTestMode = true) + return YamlWizard(yaml, projectDirectory, Plugins.allPlugins, isUnitTestMode = true) } } \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/ProjectTemplateBasedTestWizard.kt b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/ProjectTemplateBasedTestWizard.kt index 4e1e4b0f7f8..9222cd4c403 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/ProjectTemplateBasedTestWizard.kt +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/ProjectTemplateBasedTestWizard.kt @@ -10,7 +10,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.compute import org.jetbrains.kotlin.tools.projectWizard.core.computeM import org.jetbrains.kotlin.tools.projectWizard.core.context.SettingsWritingContext import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask -import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference import org.jetbrains.kotlin.tools.projectWizard.core.service.ServicesManager import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardService import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemP import org.jetbrains.kotlin.tools.projectWizard.plugins.projectTemplates.applyProjectTemplate import org.jetbrains.kotlin.tools.projectWizard.projectTemplates.ProjectTemplate import org.jetbrains.kotlin.tools.projectWizard.wizard.Wizard -import org.jetbrains.kotlin.tools.projectWizard.wizard.YamlWizard import org.jetbrains.kotlin.tools.projectWizard.wizard.parseYaml import java.nio.file.Path diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/SettingsOwner.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/SettingsOwner.kt index 5574b0607c4..f7c064bc19e 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/SettingsOwner.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/SettingsOwner.kt @@ -1,7 +1,7 @@ package org.jetbrains.kotlin.tools.projectWizard import org.jetbrains.kotlin.tools.projectWizard.core.Parser -import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.* import org.jetbrains.kotlin.tools.projectWizard.core.enumParser import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Context.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Context.kt index bca3c4873b8..b3a343c57a2 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Context.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Context.kt @@ -1,6 +1,8 @@ package org.jetbrains.kotlin.tools.projectWizard.core import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.AnySetting +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingContext import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import kotlin.reflect.KClass import kotlin.reflect.full.isSubclassOf @@ -21,7 +23,8 @@ class Context(private val pluginsCreator: PluginsCreator, val eventManager: Even } } - val settingContext = SettingContext(eventManager::fireListeners) + val settingContext = + SettingContext(eventManager::fireListeners) val propertyContext = PropertyContext() val taskContext = TaskContext() val plugins = pluginsCreator(this).onEach(::initPlugin) diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/EventManager.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/EventManager.kt index 6065eba2545..6967f338572 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/EventManager.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/EventManager.kt @@ -1,6 +1,7 @@ package org.jetbrains.kotlin.tools.projectWizard.core -import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingReference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference + class EventManager { private val listeners = mutableListOf<(SettingReference<*, *>?) -> Unit>() diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Parser.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Parser.kt index c2df344b143..3a6cf0e4cdc 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Parser.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Parser.kt @@ -1,6 +1,6 @@ package org.jetbrains.kotlin.tools.projectWizard.core -import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingReference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem import org.jetbrains.kotlin.tools.projectWizard.templates.Template import java.nio.file.Paths diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Plugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Plugin.kt index 2a97719329e..a765510e726 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Plugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Plugin.kt @@ -2,6 +2,7 @@ package org.jetbrains.kotlin.tools.projectWizard.core import org.jetbrains.kotlin.tools.projectWizard.SettingsOwner import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.* import org.jetbrains.kotlin.tools.projectWizard.enumSettingImpl import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem @@ -10,7 +11,6 @@ import java.nio.file.Path import kotlin.properties.ReadOnlyProperty import kotlin.reflect.KClass import kotlin.reflect.KProperty -import kotlin.reflect.KProperty1 import kotlin.reflect.full.isSubclassOf import kotlin.reflect.full.memberProperties @@ -33,7 +33,8 @@ abstract class Plugin(override val context: Context) : EntityBase(), @Suppress("UNCHECKED_CAST") val reference = property as PluginSettingPropertyReference context.settingContext.getPluginSetting(reference)?.let { return it } - val setting = PluginSetting(create(reference.path).buildInternal()) + val setting = + PluginSetting(create(reference.path).buildInternal()) context.settingContext.setPluginSetting(reference, setting) return setting } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/context/ReadingContext.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/context/ReadingContext.kt index 28eebf220a1..4d6478ec5b2 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/context/ReadingContext.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/context/ReadingContext.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.tools.projectWizard.core.context import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.core.Plugin import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.* import org.jetbrains.kotlin.tools.projectWizard.core.safeAs import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardService import org.jetbrains.kotlin.tools.projectWizard.core.service.ServicesManager @@ -52,7 +53,7 @@ open class ReadingContext( private fun Setting>.getSavedValueForSetting(): V? { if (!isSavable || this !is PluginSetting<*, *>) return null - val serializer = type.serializer.safeAs>() ?: return null + val serializer = type.serializer.safeAs>() ?: return null val savedValue = service().getSettingValue(path) ?: return null return serializer.fromString(savedValue) } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/context/SettingsWritingContext.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/context/SettingsWritingContext.kt index d59f01780cc..d9618600881 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/context/SettingsWritingContext.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/context/SettingsWritingContext.kt @@ -6,8 +6,8 @@ package org.jetbrains.kotlin.tools.projectWizard.core.context import org.jetbrains.kotlin.tools.projectWizard.core.Context -import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingReference -import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingType +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingType import org.jetbrains.kotlin.tools.projectWizard.core.service.ServicesManager diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Setting.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Setting.kt deleted file mode 100644 index 0a2efde78dd..00000000000 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Setting.kt +++ /dev/null @@ -1,446 +0,0 @@ -package org.jetbrains.kotlin.tools.projectWizard.core.entity - -import org.jetbrains.kotlin.tools.projectWizard.Identificator -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext -import org.jetbrains.kotlin.tools.projectWizard.core.* -import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.ModuleConfigurator -import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase -import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem -import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module -import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version -import org.jetbrains.kotlin.tools.projectWizard.templates.Template -import java.nio.file.Files -import java.nio.file.Path -import java.nio.file.Paths -import kotlin.reflect.KClass -import kotlin.reflect.KProperty1 - -sealed class SettingReference> { - abstract val path: String - abstract val type: KClass - - abstract fun ReadingContext.getSetting(): Setting - - final override fun toString() = path - final override fun equals(other: Any?) = other.safeAs>()?.path == path - final override fun hashCode() = path.hashCode() -} - -data class PluginSettingReference>( - override val path: String, - override val type: KClass<@UnsafeVariance T> -) : SettingReference() { - - constructor(kProperty: KProperty1>, type: KClass) : - this(kProperty.path, type) - - @Suppress("UNCHECKED_CAST") - constructor(setting: PluginSetting) : - this(setting.path, setting.type::class as KClass) - - override fun ReadingContext.getSetting(): Setting = pluginSetting -} - -inline val > PluginSetting.reference: PluginSettingReference - get() = PluginSettingReference(path, T::class) - -sealed class ModuleConfiguratorSettingReference> : SettingReference() { - abstract val descriptor: ModuleConfigurator - abstract val moduleId: Identificator - abstract val setting: ModuleConfiguratorSetting - - override val path: String - get() = "${descriptor.id}/$moduleId/${setting.path}" - - override val type: KClass - get() = setting.type::class - - override fun ReadingContext.getSetting(): Setting = setting - abstract val module: Module? -} - -data class ModuleBasedConfiguratorSettingReference>( - override val descriptor: ModuleConfigurator, - override val module: Module, - override val setting: ModuleConfiguratorSetting -) : ModuleConfiguratorSettingReference() { - override val moduleId: Identificator - get() = module.identificator -} - -data class IdBasedConfiguratorSettingReference>( - override val descriptor: ModuleConfigurator, - override val moduleId: Identificator, - override val setting: ModuleConfiguratorSetting -) : ModuleConfiguratorSettingReference() { - override val module: Module? = null -} - -sealed class TemplateSettingReference> : SettingReference() { - abstract val descriptor: Template - abstract val setting: TemplateSetting - abstract val sourcesetId: Identificator - - override val path: String - get() = "${descriptor.id}/$sourcesetId/${setting.path}" - - override val type: KClass - get() = setting.type::class - - override fun ReadingContext.getSetting(): Setting = setting - abstract val module: Module? -} - -data class ModuleBasedTemplateSettingReference>( - override val descriptor: Template, - override val module: Module, - override val setting: TemplateSetting -) : TemplateSettingReference() { - override val sourcesetId: Identificator - get() = module.identificator -} - -data class IdBasedTemplateSettingReference>( - override val descriptor: Template, - override val sourcesetId: Identificator, - override val setting: TemplateSetting -) : TemplateSettingReference() { - override val module: Module? = null -} - -inline val > PluginSettingPropertyReference.reference: PluginSettingReference - get() = PluginSettingReference(this, T::class) - -typealias PluginSettingPropertyReference = KProperty1> -typealias SettingPropertyReference = KProperty1> - -class SettingContext(val onUpdated: (SettingReference<*, *>) -> Unit) { - private val values = mutableMapOf() - private val pluginSettings = mutableMapOf>() - - @Suppress("UNCHECKED_CAST") - operator fun > get( - reference: SettingReference - ): V? = values[reference.path] as? V - - operator fun > set( - reference: SettingReference, - newValue: V - ) { - values[reference.path] = newValue - onUpdated(reference) - } - - - val allPluginSettings: Collection> - get() = pluginSettings.values - - @Suppress("UNCHECKED_CAST") - fun > getPluginSetting(pluginSettingReference: PluginSettingReference) = - pluginSettings[pluginSettingReference.path] as PluginSetting - - @Suppress("UNCHECKED_CAST") - fun > getPluginSetting(pluginSettingReference: PluginSettingPropertyReference) = - pluginSettings[pluginSettingReference.path] as? PluginSetting - - @Suppress("UNCHECKED_CAST") - fun > setPluginSetting( - pluginSettingReference: PluginSettingPropertyReference, - setting: PluginSetting - ) { - pluginSettings[pluginSettingReference.path] = setting - } - - @Suppress("UNCHECKED_CAST") - fun > pluginSettingValue(setting: PluginSetting): V? = - values[setting.path] as? V -} - - -typealias AnySetting = Setting<*, *> - -interface Setting> : Entity, ActivityCheckerOwner, Validatable { - val title: String - val defaultValue: SettingDefaultValue? - val isRequired: Boolean - val isSavable: Boolean - var neededAtPhase: GenerationPhase - val type: T -} - -data class InternalSetting>( - override val path: String, - override val title: String, - override val defaultValue: SettingDefaultValue?, - override val isAvailable: Checker, - override val isRequired: Boolean, - override val isSavable: Boolean, - override var neededAtPhase: GenerationPhase, - override val validator: SettingValidator<@UnsafeVariance V>, - override val type: T -) : Setting, EntityWithValue() - -sealed class SettingImpl> : Setting - -class PluginSetting>( - internal: InternalSetting -) : SettingImpl(), Setting by internal - -class ModuleConfiguratorSetting>( - internal: InternalSetting -) : SettingImpl(), Setting by internal - -class TemplateSetting>( - internal: InternalSetting -) : SettingImpl(), Setting by internal - - -sealed class SettingDefaultValue { - data class Value(val value: V) : SettingDefaultValue() - data class Dynamic( - val getter: ReadingContext.(SettingReference>) -> V - ) : SettingDefaultValue() -} - - -abstract class SettingBuilder>( - private val path: String, - private val title: String, - private val neededAtPhase: GenerationPhase -) { - var isAvailable: ReadingContext.() -> Boolean = { true } - open var defaultValue: SettingDefaultValue? = null - var isSavable: Boolean = false - var isRequired: Boolean? = null - - fun value(value: V) = SettingDefaultValue.Value(value) - fun dynamic(getter: ReadingContext.(SettingReference>) -> V) = SettingDefaultValue.Dynamic(getter) - - protected var validator = SettingValidator { ValidationResult.OK } - - fun validate(validator: SettingValidator) { - this.validator = this.validator and validator - } - - fun validate(validator: ReadingContext.(V) -> ValidationResult) { - this.validator = this.validator and settingValidator(validator) - } - - - abstract val type: T - - fun buildInternal() = InternalSetting( - path = path, - title = title, - defaultValue = defaultValue, - isAvailable = isAvailable, - isRequired = isRequired ?: (defaultValue == null), - isSavable = isSavable, - neededAtPhase = neededAtPhase, - validator = validator, - type = type - ) -} - - -sealed class SettingSerializer() - -object NonSerializable : SettingSerializer() - -data class SerializerImpl( - val fromString: (String) -> V?, - val toString: (V) -> String = Any::toString -) : SettingSerializer() - -sealed class SettingType { - abstract fun parse(context: ParsingContext, value: Any, name: String): TaskResult - open val serializer: SettingSerializer = NonSerializable -} - -object StringSettingType : SettingType() { - override fun parse(context: ParsingContext, value: Any, name: String) = - value.parseAs(name) - - override val serializer: SettingSerializer = SerializerImpl(fromString = { it }) - - class Builder( - path: String, - private val title: String, - neededAtPhase: GenerationPhase - ) : SettingBuilder(path, title, neededAtPhase) { - fun shouldNotBeBlank() { - validate(StringValidators.shouldNotBeBlank(title.capitalize())) - } - - override val type = StringSettingType - } -} - -object BooleanSettingType : SettingType() { - override fun parse(context: ParsingContext, value: Any, name: String) = - value.parseAs(name) - - override val serializer: SettingSerializer = SerializerImpl(fromString = { it.toBoolean() }) - - class Builder( - path: String, - title: String, - neededAtPhase: GenerationPhase - ) : SettingBuilder(path, title, neededAtPhase) { - override val type = BooleanSettingType - } - -} - -class DropDownSettingType( - val values: List, - val filter: DropDownSettingTypeFilter, - val parser: Parser -) : SettingType() { - override fun parse(context: ParsingContext, value: Any, name: String): TaskResult = with(context) { - computeM { - parser.parse(this, value, name) - } - } - - override val serializer: SettingSerializer = SerializerImpl(fromString = { value -> - ComputeContext.runInComputeContextWithState(ParsingState.EMPTY) { - parser.parse(this, value, "") - }.asNullable?.first - }) - - class Builder( - path: String, - title: String, - neededAtPhase: GenerationPhase, - private val parser: Parser - ) : SettingBuilder>(path, title, neededAtPhase) { - var values = emptyList() - - var filter: DropDownSettingTypeFilter = { _, _ -> true } - - override val type - get() = DropDownSettingType(values, filter, parser) - - - init { - defaultValue = dynamic { reference -> - values.first { - @Suppress("UNCHECKED_CAST") - filter(reference as SettingReference>, it) - } - } - } - } -} - -typealias DropDownSettingTypeFilter = - ReadingContext.(SettingReference>, V) -> Boolean - - -class ValueSettingType( - private val parser: Parser -) : SettingType() { - override fun parse(context: ParsingContext, value: Any, name: String): TaskResult = with(context) { - computeM { - parser.parse(this, value, name) - } - } - - class Builder( - private val path: String, - title: String, - neededAtPhase: GenerationPhase, - private val parser: Parser - ) : SettingBuilder>(path, title, neededAtPhase) { - init { - validate { value -> - if (value is Validatable<*>) (value.validator as SettingValidator).validate(this, value) - else ValidationResult.OK - } - } - - override val type - get() = ValueSettingType(parser) - } -} - -object VersionSettingType : SettingType() { - override fun parse(context: ParsingContext, value: Any, name: String): TaskResult = with(context) { - computeM { - Version.parser.parse(this, value, name) - } - } - - class Builder( - path: String, - title: String, - neededAtPhase: GenerationPhase - ) : SettingBuilder(path, title, neededAtPhase) { - override val type - get() = VersionSettingType - } -} - -class ListSettingType(private val parser: Parser) : SettingType>() { - override fun parse(context: ParsingContext, value: Any, name: String): TaskResult> = with(context) { - computeM { - val (list) = value.parseAs>(name) - list.mapComputeM { parser.parse(this, it, name) }.sequence() - } - } - - class Builder( - path: String, - title: String, - neededAtPhase: GenerationPhase, - parser: Parser - ) : SettingBuilder, ListSettingType>(path, title, neededAtPhase) { - init { - validate { values -> - values.fold(ValidationResult.OK as ValidationResult) { result, value -> - result and when (value) { - is Validatable<*> -> (value.validator as SettingValidator).validate(this, value).withTargetIfNull(value) - else -> ValidationResult.OK - } - } - } - } - - override val type = ListSettingType(parser) - } -} - -object PathSettingType : SettingType() { - override fun parse(context: ParsingContext, value: Any, name: String): TaskResult = with(context) { - computeM { - pathParser.parse(this, value, name) - } - } - - override val serializer: SettingSerializer = SerializerImpl(fromString = { Paths.get(it) }) - - class Builder( - path: String, - private val title: String, - neededAtPhase: GenerationPhase - ) : SettingBuilder(path, title, neededAtPhase) { - - init { - validate { pathValue -> - if (pathValue.toString().isBlank()) - ValidationResult.ValidationError("${title.capitalize()} should not be blank") - else ValidationResult.OK - } - } - - fun shouldExists() = validate { pathValue -> - if (isUnitTestMode) return@validate ValidationResult.OK - if (!Files.exists(pathValue)) - ValidationResult.ValidationError("File for ${title.capitalize()} should exists") - else ValidationResult.OK - } - - override val type = PathSettingType - } -} diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/Setting.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/Setting.kt new file mode 100644 index 00000000000..975b628200c --- /dev/null +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/Setting.kt @@ -0,0 +1,73 @@ +/* + * 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.core.entity.settings + +import org.jetbrains.kotlin.tools.projectWizard.core.ActivityCheckerOwner +import org.jetbrains.kotlin.tools.projectWizard.core.Checker +import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.entity.Entity +import org.jetbrains.kotlin.tools.projectWizard.core.entity.EntityWithValue +import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingValidator +import org.jetbrains.kotlin.tools.projectWizard.core.entity.Validatable +import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase + + +typealias AnySetting = Setting<*, *> + +interface Setting> : Entity, ActivityCheckerOwner, Validatable { + val title: String + val defaultValue: SettingDefaultValue? + val isRequired: Boolean + val isSavable: Boolean + var neededAtPhase: GenerationPhase + val type: T +} + +data class InternalSetting>( + override val path: String, + override val title: String, + override val defaultValue: SettingDefaultValue?, + override val isAvailable: Checker, + override val isRequired: Boolean, + override val isSavable: Boolean, + override var neededAtPhase: GenerationPhase, + override val validator: SettingValidator<@UnsafeVariance V>, + override val type: T +) : Setting, EntityWithValue() + +sealed class SettingImpl> : + Setting + +class PluginSetting>( + internal: InternalSetting +) : SettingImpl(), Setting by internal + +class ModuleConfiguratorSetting>( + internal: InternalSetting +) : SettingImpl(), Setting by internal + +class TemplateSetting>( + internal: InternalSetting +) : SettingImpl(), Setting by internal + + +sealed class SettingDefaultValue { + data class Value(val value: V) : SettingDefaultValue() + data class Dynamic( + val getter: ReadingContext.(SettingReference>) -> V + ) : SettingDefaultValue() +} + + +sealed class SettingSerializer { + object None : SettingSerializer() + data class Serializer( + val fromString: (String) -> V?, + val toString: (V) -> String = Any::toString + ) : SettingSerializer() +} + + diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingBuilder.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingBuilder.kt new file mode 100644 index 00000000000..fa6d4784796 --- /dev/null +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingBuilder.kt @@ -0,0 +1,55 @@ +/* + * 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.core.entity.settings + +import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingValidator +import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settingValidator +import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase + +abstract class SettingBuilder>( + private val path: String, + private val title: String, + private val neededAtPhase: GenerationPhase +) { + var isAvailable: ReadingContext.() -> Boolean = { true } + open var defaultValue: SettingDefaultValue? = null + var isSavable: Boolean = false + var isRequired: Boolean? = null + + fun value(value: V) = SettingDefaultValue.Value(value) + fun dynamic(getter: ReadingContext.(SettingReference>) -> V) = + SettingDefaultValue.Dynamic(getter) + + protected var validator = + SettingValidator { ValidationResult.OK } + + fun validate(validator: SettingValidator) { + this.validator = this.validator and validator + } + + fun validate(validator: ReadingContext.(V) -> ValidationResult) { + this.validator = this.validator and settingValidator( + validator + ) + } + + + abstract val type: T + + fun buildInternal() = InternalSetting( + path = path, + title = title, + defaultValue = defaultValue, + isAvailable = isAvailable, + isRequired = isRequired ?: (defaultValue == null), + isSavable = isSavable, + neededAtPhase = neededAtPhase, + validator = validator, + type = type + ) +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingContext.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingContext.kt new file mode 100644 index 00000000000..61f974a26c9 --- /dev/null +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingContext.kt @@ -0,0 +1,50 @@ +/* + * 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.core.entity.settings + +import org.jetbrains.kotlin.tools.projectWizard.core.entity.path + +class SettingContext(val onUpdated: (SettingReference<*, *>) -> Unit) { + private val values = mutableMapOf() + private val pluginSettings = mutableMapOf>() + + @Suppress("UNCHECKED_CAST") + operator fun > get( + reference: SettingReference + ): V? = values[reference.path] as? V + + operator fun > set( + reference: SettingReference, + newValue: V + ) { + values[reference.path] = newValue + onUpdated(reference) + } + + + val allPluginSettings: Collection> + get() = pluginSettings.values + + @Suppress("UNCHECKED_CAST") + fun > getPluginSetting(pluginSettingReference: PluginSettingReference) = + pluginSettings[pluginSettingReference.path] as PluginSetting + + @Suppress("UNCHECKED_CAST") + fun > getPluginSetting(pluginSettingReference: PluginSettingPropertyReference) = + pluginSettings[pluginSettingReference.path] as? PluginSetting + + @Suppress("UNCHECKED_CAST") + fun > setPluginSetting( + pluginSettingReference: PluginSettingPropertyReference, + setting: PluginSetting + ) { + pluginSettings[pluginSettingReference.path] = setting + } + + @Suppress("UNCHECKED_CAST") + fun > pluginSettingValue(setting: PluginSetting): V? = + values[setting.path] as? V +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingReference.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingReference.kt new file mode 100644 index 00000000000..7083c92e667 --- /dev/null +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingReference.kt @@ -0,0 +1,116 @@ +/* + * 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.core.entity.settings + +import org.jetbrains.kotlin.tools.projectWizard.Identificator +import org.jetbrains.kotlin.tools.projectWizard.core.Plugin +import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.safeAs +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.ModuleConfigurator +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module +import org.jetbrains.kotlin.tools.projectWizard.templates.Template +import kotlin.reflect.KClass +import kotlin.reflect.KProperty1 + + +sealed class SettingReference> { + abstract val path: String + abstract val type: KClass + + abstract fun ReadingContext.getSetting(): Setting + + final override fun toString() = path + final override fun equals(other: Any?) = other.safeAs>()?.path == path + final override fun hashCode() = path.hashCode() +} + +data class PluginSettingReference>( + override val path: String, + override val type: KClass<@UnsafeVariance T> +) : SettingReference() { + + constructor(kProperty: KProperty1>, type: KClass) : + this(kProperty.path, type) + + @Suppress("UNCHECKED_CAST") + constructor(setting: PluginSetting) : + this(setting.path, setting.type::class as KClass) + + override fun ReadingContext.getSetting(): Setting = pluginSetting +} + +inline val > PluginSetting.reference: PluginSettingReference + get() = PluginSettingReference(path, T::class) + +sealed class ModuleConfiguratorSettingReference> : SettingReference() { + abstract val descriptor: ModuleConfigurator + abstract val moduleId: Identificator + abstract val setting: ModuleConfiguratorSetting + + override val path: String + get() = "${descriptor.id}/$moduleId/${setting.path}" + + override val type: KClass + get() = setting.type::class + + override fun ReadingContext.getSetting(): Setting = setting + abstract val module: Module? +} + +data class ModuleBasedConfiguratorSettingReference>( + override val descriptor: ModuleConfigurator, + override val module: Module, + override val setting: ModuleConfiguratorSetting +) : ModuleConfiguratorSettingReference() { + override val moduleId: Identificator + get() = module.identificator +} + +data class IdBasedConfiguratorSettingReference>( + override val descriptor: ModuleConfigurator, + override val moduleId: Identificator, + override val setting: ModuleConfiguratorSetting +) : ModuleConfiguratorSettingReference() { + override val module: Module? = null +} + +sealed class TemplateSettingReference> : SettingReference() { + abstract val descriptor: Template + abstract val setting: TemplateSetting + abstract val sourcesetId: Identificator + + override val path: String + get() = "${descriptor.id}/$sourcesetId/${setting.path}" + + override val type: KClass + get() = setting.type::class + + override fun ReadingContext.getSetting(): Setting = setting + abstract val module: Module? +} + +data class ModuleBasedTemplateSettingReference>( + override val descriptor: Template, + override val module: Module, + override val setting: TemplateSetting +) : TemplateSettingReference() { + override val sourcesetId: Identificator + get() = module.identificator +} + +data class IdBasedTemplateSettingReference>( + override val descriptor: Template, + override val sourcesetId: Identificator, + override val setting: TemplateSetting +) : TemplateSettingReference() { + override val module: Module? = null +} + +inline val > PluginSettingPropertyReference.reference: PluginSettingReference + get() = PluginSettingReference(this, T::class) + +typealias PluginSettingPropertyReference = KProperty1> diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingType.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingType.kt new file mode 100644 index 00000000000..775e253fa86 --- /dev/null +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingType.kt @@ -0,0 +1,217 @@ +/* + * 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.core.entity.settings + +import org.jetbrains.kotlin.tools.projectWizard.core.* +import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase +import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem +import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.Paths + +sealed class SettingType { + abstract fun parse(context: ParsingContext, value: Any, name: String): TaskResult + open val serializer: SettingSerializer = SettingSerializer.None +} + +object StringSettingType : SettingType() { + override fun parse(context: ParsingContext, value: Any, name: String) = + value.parseAs(name) + + override val serializer: SettingSerializer = + SettingSerializer.Serializer(fromString = { it }) + + class Builder( + path: String, + private val title: String, + neededAtPhase: GenerationPhase + ) : SettingBuilder(path, title, neededAtPhase) { + fun shouldNotBeBlank() { + validate(StringValidators.shouldNotBeBlank(title.capitalize())) + } + + override val type = StringSettingType + } +} + +object BooleanSettingType : SettingType() { + override fun parse(context: ParsingContext, value: Any, name: String) = + value.parseAs(name) + + override val serializer: SettingSerializer = + SettingSerializer.Serializer(fromString = { it.toBoolean() }) + + class Builder( + path: String, + title: String, + neededAtPhase: GenerationPhase + ) : SettingBuilder(path, title, neededAtPhase) { + override val type = BooleanSettingType + } + +} + +class DropDownSettingType( + val values: List, + val filter: DropDownSettingTypeFilter, + val parser: Parser +) : SettingType() { + override fun parse(context: ParsingContext, value: Any, name: String): TaskResult = with(context) { + computeM { + parser.parse(this, value, name) + } + } + + override val serializer: SettingSerializer = + SettingSerializer.Serializer(fromString = { value -> + ComputeContext.runInComputeContextWithState( + ParsingState.EMPTY + ) { + parser.parse(this, value, "") + }.asNullable?.first + }) + + class Builder( + path: String, + title: String, + neededAtPhase: GenerationPhase, + private val parser: Parser + ) : SettingBuilder>(path, title, neededAtPhase) { + var values = emptyList() + + var filter: DropDownSettingTypeFilter = { _, _ -> true } + + override val type + get() = DropDownSettingType( + values, + filter, + parser + ) + + + init { + defaultValue = dynamic { reference -> + values.first { + @Suppress("UNCHECKED_CAST") + filter(reference as SettingReference>, it) + } + } + } + } +} + +class ValueSettingType( + private val parser: Parser +) : SettingType() { + override fun parse(context: ParsingContext, value: Any, name: String): TaskResult = with(context) { + computeM { + parser.parse(this, value, name) + } + } + + class Builder( + private val path: String, + title: String, + neededAtPhase: GenerationPhase, + private val parser: Parser + ) : SettingBuilder>(path, title, neededAtPhase) { + init { + validate { value -> + if (value is Validatable<*>) (value.validator as SettingValidator).validate(this, value) + else ValidationResult.OK + } + } + + override val type + get() = ValueSettingType(parser) + } +} + +object VersionSettingType : SettingType() { + override fun parse(context: ParsingContext, value: Any, name: String): TaskResult = with(context) { + computeM { + Version.parser.parse(this, value, name) + } + } + + class Builder( + path: String, + title: String, + neededAtPhase: GenerationPhase + ) : SettingBuilder(path, title, neededAtPhase) { + override val type + get() = VersionSettingType + } +} + +class ListSettingType(private val parser: Parser) : SettingType>() { + override fun parse(context: ParsingContext, value: Any, name: String): TaskResult> = with(context) { + computeM { + val (list) = value.parseAs>(name) + list.mapComputeM { parser.parse(this, it, name) }.sequence() + } + } + + class Builder( + path: String, + title: String, + neededAtPhase: GenerationPhase, + parser: Parser + ) : SettingBuilder, ListSettingType>(path, title, neededAtPhase) { + init { + validate { values -> + values.fold(ValidationResult.OK as ValidationResult) { result, value -> + result and when (value) { + is Validatable<*> -> (value.validator as SettingValidator).validate(this, value).withTargetIfNull(value) + else -> ValidationResult.OK + } + } + } + } + + override val type = ListSettingType(parser) + } +} + +object PathSettingType : SettingType() { + override fun parse(context: ParsingContext, value: Any, name: String): TaskResult = with(context) { + computeM { + pathParser.parse(this, value, name) + } + } + + override val serializer: SettingSerializer = + SettingSerializer.Serializer(fromString = { Paths.get(it) }) + + class Builder( + path: String, + private val title: String, + neededAtPhase: GenerationPhase + ) : SettingBuilder(path, title, neededAtPhase) { + + init { + validate { pathValue -> + if (pathValue.toString().isBlank()) + ValidationResult.ValidationError("${title.capitalize()} should not be blank") + else ValidationResult.OK + } + } + + fun shouldExists() = validate { pathValue -> + if (isUnitTestMode) return@validate ValidationResult.OK + if (!Files.exists(pathValue)) + ValidationResult.ValidationError("File for ${title.capitalize()} should exists") + else ValidationResult.OK + } + + override val type = PathSettingType + } +} + +typealias DropDownSettingTypeFilter = ReadingContext.(SettingReference>, V) -> Boolean \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidModuleConfigurator.kt index 866256d1fc7..6f3342594a2 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidModuleConfigurator.kt @@ -9,16 +9,16 @@ import org.jetbrains.kotlin.tools.projectWizard.Versions import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext import org.jetbrains.kotlin.tools.projectWizard.core.* -import org.jetbrains.kotlin.tools.projectWizard.core.entity.PluginSettingReference -import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingType -import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingType import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.AndroidConfigIR import org.jetbrains.kotlin.tools.projectWizard.plugins.AndroidPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurationData import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.javaPackage -import org.jetbrains.kotlin.tools.projectWizard.core.entity.ModuleConfiguratorSetting +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ModuleConfiguratorSetting +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSettingReference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference import org.jetbrains.kotlin.tools.projectWizard.core.service.kotlinVersionKind import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt index 74c26054a40..870416b2c22 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt @@ -7,7 +7,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.cached import org.jetbrains.kotlin.tools.projectWizard.core.context.SettingsWritingContext -import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.* import org.jetbrains.kotlin.tools.projectWizard.enumSettingImpl import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinBuildSystemPluginIR diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt index 2c76e7579eb..f95e57e73fb 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt @@ -6,7 +6,8 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext -import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +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.core.safeAs import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.DependencyType diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt index 67f9c247c19..d518109864d 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt @@ -1,7 +1,7 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext -import org.jetbrains.kotlin.tools.projectWizard.core.entity.ModuleConfiguratorSetting +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ModuleConfiguratorSetting import org.jetbrains.kotlin.tools.projectWizard.core.safeAs import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinBuildSystemPluginIR diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/StructurePlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/StructurePlugin.kt index 45772ca89cd..c7a511767ec 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/StructurePlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/StructurePlugin.kt @@ -4,7 +4,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators -import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.PomIR import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt index ff345051920..f1f38ee5dd9 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt @@ -4,7 +4,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult -import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference import org.jetbrains.kotlin.tools.projectWizard.core.service.BuildSystemAvailabilityWizardService import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService import org.jetbrains.kotlin.tools.projectWizard.core.service.ProjectImportingWizardService @@ -113,7 +113,7 @@ data class BuildFileData( enum class BuildSystemType(override val text: String) : DisplayableSettingItem { GradleKotlinDsl("Gradle (Kotlin DSL)"), GradleGroovyDsl("Gradle (Groovy DSL)"), - Jps("IDEA Build System"), + Jps("IDEA Build System"), Maven("Maven") ; diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GradlePlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GradlePlugin.kt index 1e08c6e6ff9..91f3beb20fd 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GradlePlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GradlePlugin.kt @@ -2,7 +2,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.* -import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.PluginManagementRepositoryIR 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 d6f09cb00ec..6c72888eb97 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 @@ -3,7 +3,7 @@ package org.jetbrains.kotlin.tools.projectWizard.projectTemplates import TemplateTag import org.intellij.lang.annotations.Language import org.jetbrains.kotlin.tools.projectWizard.core.buildList -import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.* import org.jetbrains.kotlin.tools.projectWizard.core.safeAs import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.* import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt index e545d808909..861aacec438 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt @@ -3,10 +3,13 @@ package org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem import org.jetbrains.kotlin.tools.projectWizard.GeneratedIdentificator import org.jetbrains.kotlin.tools.projectWizard.Identificator import org.jetbrains.kotlin.tools.projectWizard.IdentificatorOwner -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.context.SettingsWritingContext import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ModuleConfiguratorSetting +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetting +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingType +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.* import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem import org.jetbrains.kotlin.tools.projectWizard.templates.Template diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/KtorServerTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/KtorServerTemplate.kt index 9a1129a9799..1278ff5aa4f 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/KtorServerTemplate.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/KtorServerTemplate.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.tools.projectWizard.templates import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext import org.jetbrains.kotlin.tools.projectWizard.core.asPath import org.jetbrains.kotlin.tools.projectWizard.core.buildList -import org.jetbrains.kotlin.tools.projectWizard.core.entity.TemplateSetting +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.TemplateSetting import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.TargetConfigurationIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.addWithJavaIntoJvmTarget diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt index 92d96a2f9a4..d8d993fd829 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt @@ -10,7 +10,7 @@ import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext import org.jetbrains.kotlin.tools.projectWizard.core.* -import org.jetbrains.kotlin.tools.projectWizard.core.entity.TemplateSetting +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.TemplateSetting import org.jetbrains.kotlin.tools.projectWizard.core.safeAs import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.* diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/Template.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/Template.kt index 3a02917198b..78baf29228c 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/Template.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/Template.kt @@ -7,7 +7,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.context.SettingsWritingContext -import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.* import org.jetbrains.kotlin.tools.projectWizard.enumSettingImpl import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.DependencyIR diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/Wizard.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/Wizard.kt index daa76c6abf6..096fae5dedb 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/Wizard.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/Wizard.kt @@ -5,6 +5,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.context.SettingsWritingContext import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.* import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardService import org.jetbrains.kotlin.tools.projectWizard.core.service.ServicesManager import org.jetbrains.kotlin.tools.projectWizard.core.service.SettingSavingWizardService @@ -59,7 +60,7 @@ abstract class Wizard(createPlugins: PluginsCreator, val servicesManager: Servic if (setting.neededAtPhase !in phases) continue if (!setting.isSavable) continue if (!setting.isAvailable(valuesReadingContext)) continue - val serializer = setting.type.serializer as? SerializerImpl ?: continue + val serializer = setting.type.serializer as? SettingSerializer.Serializer ?: continue service().saveSettingValue( setting.path, serializer.toString(setting.reference.settingValue)