From 691ee7412a92417c0b3d4f4922b0a49153793a5c Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 9 Mar 2020 21:02:13 +0300 Subject: [PATCH] Wizard: all context operations to read/write operations --- .../tools/projectWizard/wizard/IdeContext.kt | 22 -- .../tools/projectWizard/wizard/IdeWizard.kt | 15 +- .../wizard/NewProjectWizardModuleBuilder.kt | 10 +- .../IdeaKotlinVersionProviderService.kt | 1 - .../service/IdeaRunConfigurationsService.kt | 3 +- .../wizard/service/IdeaWizardService.kt | 1 - .../projectWizard/wizard/ui/Component.kt | 23 +- .../wizard/ui/DescriptionPanel.kt | 1 - .../wizard/ui/PomWizardStepComponent.kt | 10 +- .../wizard/ui/SingleSelectableListWithIcon.kt | 4 - .../tools/projectWizard/wizard/ui/SubStep.kt | 8 +- .../wizard/ui/WizardStepComponent.kt | 6 +- .../wizard/ui/components/CheckboxComponent.kt | 7 +- .../wizard/ui/components/DropDownComponent.kt | 7 +- .../ui/components/PathFieldComponent.kt | 7 +- .../ui/components/TextFieldComponent.kt | 7 +- .../wizard/ui/components/UIComponent.kt | 12 +- .../BuildSystemTypeSettingComponent.kt | 8 +- .../ui/firstStep/FirstWizardStepComponent.kt | 33 +-- .../ProjectTemplateSettingComponent.kt | 6 +- .../ui/secondStep/ModuleSettingsComponent.kt | 29 +-- .../secondStep/SecondStepWizardComponent.kt | 19 +- .../SourcesetDependenciesSettingsComponent.kt | 13 +- .../secondStep/SourcesetSettingsComponent.kt | 9 +- .../ui/secondStep/TemplatesComponent.kt | 44 ++-- .../CreateModuleOrTargetPopup.kt | 12 +- .../modulesEditor/ModulesEditorComponent.kt | 10 +- .../ModulesEditorToolbarDecorator.kt | 9 +- .../modulesEditor/NewModuleCreator.kt | 1 - .../secondStep/modulesEditor/TargetsModel.kt | 7 +- .../ui/setting/DefaultSettingComponent.kt | 51 ++-- .../wizard/ui/setting/SettingComponent.kt | 6 +- .../wizard/ui/setting/SettingsList.kt | 8 +- .../UIComponentDelegatingSettingComponent.kt | 6 +- .../AbstractNewWizardProjectImportTest.kt | 5 +- ...ojectTemplateNewWizardProjectImportTest.kt | 2 - .../KotlinVersionProviderTestWizardService.kt | 2 - .../tools/projectWizard/YamlSettingsParser.kt | 2 +- .../tools/projectWizard/wizard/YamlWizard.kt | 7 +- .../cli/ProjectTemplateBasedTestWizard.kt | 38 ++- .../tools/projectWizard/core/Checker.kt | 2 - .../tools/projectWizard/core/Context.kt | 227 ++++++++++++++++-- .../kotlin/tools/projectWizard/core/Plugin.kt | 30 +-- .../tools/projectWizard/core/TaskResult.kt | 8 - .../core/context/ReadingContext.kt | 74 ------ .../core/context/SettingsWritingContext.kt | 31 --- .../core/context/WritingContext.kt | 39 --- .../tools/projectWizard/core/entity/Entity.kt | 1 - .../projectWizard/core/entity/Property.kt | 10 - .../core/entity/SettingValidator.kt | 3 +- .../tools/projectWizard/core/entity/Task.kt | 21 +- .../core/entity/settings/Setting.kt | 3 +- .../core/entity/settings/SettingBuilder.kt | 3 +- .../core/entity/settings/SettingContext.kt | 32 ++- .../core/entity/settings/SettingReference.kt | 4 +- .../core/entity/settings/SettingType.kt | 2 +- .../BuildSystemAvailabilityWizardService.kt | 3 +- .../core/service/RunConfigurationsService.kt | 3 +- .../core/service/ServicesManager.kt | 7 +- .../kotlin/tools/projectWizard/core/utils.kt | 1 - .../ir/buildsystem/BuildFileIR.kt | 1 - .../projectWizard/ir/buildsystem/IrsOwner.kt | 4 +- .../projectWizard/ir/buildsystem/ModuleIR.kt | 3 - .../ir/buildsystem/gradle/GradleIR.kt | 5 +- .../AndroidModuleConfigurator.kt | 17 +- ...AndroidSinglePlatformModuleConfigurator.kt | 4 +- .../IOSModuleConfigurator.kt | 7 +- .../JsModuleConfigurator.kt | 3 +- .../moduleConfigurators/ModuleConfigurator.kt | 8 +- .../ModuleConfiguratorWithTests.kt | 3 +- .../NativeTargetConfigurator.kt | 3 +- .../moduleConfigurators/TargetConfigurator.kt | 3 +- .../moduleConfigurators/configurators.kt | 13 +- .../projectWizard/plugins/StructurePlugin.kt | 4 +- .../plugins/buildSystem/BuildSystemPlugin.kt | 4 +- .../buildSystem/gradle/GradlePlugin.kt | 2 +- .../plugins/kotlin/KotlinPlugin.kt | 10 +- .../plugins/kotlin/ModulesToIRsConverter.kt | 4 +- .../plugins/printer/GradlePrinter.kt | 3 - .../ProjectTemplatesPlugin.kt | 2 +- .../ConsoleJvmApplicationTemplatePlugin.kt | 4 +- .../plugins/templates/JsTemplatesPlugin.kt | 4 +- .../plugins/templates/KtorTemplatesPlugin.kt | 4 +- .../plugins/templates/TemplatePlugin.kt | 2 +- .../plugins/templates/TemplatesPlugin.kt | 2 +- .../settings/buildsystem/Module.kt | 2 +- .../settings/buildsystem/Sourceset.kt | 2 +- .../ConsoleJvmApplicationTemplate.kt | 8 +- .../templates/KtorServerTemplate.kt | 3 +- .../NativeConsoleApplicationTemplate.kt | 3 +- .../templates/SimpleJsClientTemplate.kt | 4 +- .../tools/projectWizard/templates/Template.kt | 6 +- .../projectWizard/templates/TemplateEngine.kt | 3 +- .../tools/projectWizard/wizard/Wizard.kt | 77 +++--- 94 files changed, 570 insertions(+), 632 deletions(-) delete mode 100644 idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/IdeContext.kt delete mode 100644 libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/context/ReadingContext.kt delete mode 100644 libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/context/SettingsWritingContext.kt delete mode 100644 libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/context/WritingContext.kt diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/IdeContext.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/IdeContext.kt deleted file mode 100644 index 6ce8e9db015..00000000000 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/IdeContext.kt +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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.wizard - -import org.jetbrains.kotlin.tools.projectWizard.core.Context -import org.jetbrains.kotlin.tools.projectWizard.core.context.SettingsWritingContext -import org.jetbrains.kotlin.tools.projectWizard.core.service.ServicesManager - - -class IdeContext(context: Context, servicesManager: ServicesManager, isUnitTestMode: Boolean) : - SettingsWritingContext( - context, - servicesManager, - isUnitTestMode - ) { - - val eventManager - get() = context.eventManager -} \ No newline at end of file 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 9b57c07a0ea..eb20261044e 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 @@ -4,8 +4,8 @@ import org.jetbrains.kotlin.tools.projectWizard.core.PluginsCreator 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.core.service.WizardService 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 @@ -25,8 +25,6 @@ class IdeWizard( }, isUnitTestMode ) { - val ideContext = IdeContext(context, servicesManager, isUnitTestMode) - init { initPluginSettingsDefaultValues() } @@ -43,12 +41,15 @@ class IdeWizard( private fun > setting(reference: SettingReference) = object : ReadWriteProperty { override fun setValue(thisRef: Any?, property: KProperty<*>, value: V?) { - context.settingContext[reference] = value ?: return + if (value == null) return + context.writeSettings { + reference.setValue(value) + } } - @Suppress("UNCHECKED_CAST") - override fun getValue(thisRef: Any?, property: KProperty<*>): V? = - context.settingContext[reference] + override fun getValue(thisRef: Any?, property: KProperty<*>): V? = context.read { + reference.notRequiredSettingValue + } } } diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt index b32ae88428c..1809b9393ce 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt @@ -132,7 +132,9 @@ class NewProjectWizardModuleBuilder : EmptyModuleBuilder() { } override fun validateModuleName(moduleName: String): Boolean { - when (val validationResult = projectNameValidator.validate(wizard.valuesReadingContext, moduleName)) { + when (val validationResult = wizard.context.read { + projectNameValidator.validate(this, moduleName) + }) { ValidationResult.OK -> return true is ValidationResult.ValidationError -> { val message = validationResult.messages.firstOrNull() ?: INVALID_PROJECT_NAME_MESSAGE @@ -143,7 +145,7 @@ class NewProjectWizardModuleBuilder : EmptyModuleBuilder() { private fun updateProjectNameAndPomDate(settingsStep: SettingsStep) { if (pomValuesAreSet) return - val suggestedProjectName = with(wizard.valuesReadingContext) { + val suggestedProjectName = wizard.context.read { ProjectTemplatesPlugin::template.settingValue.suggestedProjectName.decapitalize() } settingsStep.moduleNameLocationSettings?.apply { @@ -182,7 +184,7 @@ class NewProjectWizardModuleBuilder : EmptyModuleBuilder() { abstract class WizardStep(protected val wizard: IdeWizard, private val phase: GenerationPhase) : ModuleWizardStep() { override fun updateDataModel() = Unit // model is updated on every UI action override fun validate(): Boolean = - when (val result = with(wizard.valuesReadingContext) { with(wizard) { validate(setOf(phase)) } }) { + when (val result = wizard.context.read{ with(wizard) { validate(setOf(phase)) } }) { is Success<*> -> true is Failure -> { throw ConfigurationException(result.asHtml(), KotlinNewProjectWizardBundle.message("error.validation")) @@ -194,7 +196,7 @@ private class PomWizardStep( originalSettingStep: SettingsStep, wizard: IdeWizard ) : WizardStep(wizard, GenerationPhase.PROJECT_GENERATION) { - private val pomWizardStepComponent = PomWizardStepComponent(wizard.ideContext) + private val pomWizardStepComponent = PomWizardStepComponent(wizard.context) init { originalSettingStep.addSettingsComponent(component) diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaKotlinVersionProviderService.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaKotlinVersionProviderService.kt index ec3b112934e..5d23538d7db 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaKotlinVersionProviderService.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaKotlinVersionProviderService.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.tools.projectWizard.core.asNullable import org.jetbrains.kotlin.tools.projectWizard.core.compute import org.jetbrains.kotlin.tools.projectWizard.core.safe import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderService -import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderServiceImpl import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.runWithProgressBar import java.io.BufferedReader diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaRunConfigurationsService.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaRunConfigurationsService.kt index bfb959d7242..01f0d0f5a60 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaRunConfigurationsService.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaRunConfigurationsService.kt @@ -10,7 +10,8 @@ import com.intellij.openapi.externalSystem.service.execution.ExternalSystemRunCo import com.intellij.openapi.project.Project import org.jetbrains.kotlin.tools.projectWizard.WizardGradleRunConfiguration import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext + import org.jetbrains.kotlin.tools.projectWizard.core.service.RunConfigurationsService import org.jetbrains.kotlin.tools.projectWizard.core.service.isBuildSystemAvailable import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaWizardService.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaWizardService.kt index 44771ba4af4..674474d2bfa 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaWizardService.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaWizardService.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.service import com.intellij.openapi.module.ModifiableModuleModel import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.tools.projectWizard.core.service.FileFormattingService import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardService interface IdeaWizardService : WizardService 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 f7656fb510b..5f066d187b8 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 @@ -1,9 +1,10 @@ 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.wizard.IdeContext -import org.jetbrains.kotlin.tools.projectWizard.core.context.SettingsWritingContext + +import org.jetbrains.kotlin.tools.projectWizard.core.Context +import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.SettingsWritingContext +import org.jetbrains.kotlin.tools.projectWizard.core.WritingContext 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 @@ -21,7 +22,7 @@ abstract class Component : Displayable { } } -abstract class DynamicComponent(private val ideContext: IdeContext) : Component() { +abstract class DynamicComponent(private val context: Context) : Component() { private var isInitialized: Boolean = false override fun onInit() { @@ -40,19 +41,21 @@ abstract class DynamicComponent(private val ideContext: IdeContext) : Component( get() = reference.value init { - ideContext.eventManager.addSettingUpdaterEventListener { reference -> - if (isInitialized) onValueUpdated(reference) + write { + eventManager.addSettingUpdaterEventListener { reference -> + if (isInitialized) onValueUpdated(reference) + } } } protected fun read(reader: ReadingContext.() -> T): T = - reader(ideContext) + context.read(reader) protected fun write(writer: WritingContext.() -> T): T = - writer(ideContext) + context.write(writer) protected fun modify(modifier: SettingsWritingContext.() -> T): T = - modifier(ideContext) + context.writeSettings(modifier) open fun onValueUpdated(reference: SettingReference<*, *>?) {} } diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/DescriptionPanel.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/DescriptionPanel.kt index b6534ac3d9c..ea57f762c11 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/DescriptionPanel.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/DescriptionPanel.kt @@ -3,7 +3,6 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui import com.intellij.util.ui.HtmlPanel import com.intellij.util.ui.UIUtil import java.awt.Font -import javax.swing.event.HyperlinkEvent class DescriptionPanel(initialText: String? = null) : HtmlPanel() { private var bodyText: String? = initialText 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 105ee22d64e..a4157e2d8d0 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,30 +1,30 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui import com.intellij.ui.components.panels.VerticalLayout +import org.jetbrains.kotlin.tools.projectWizard.core.Context 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 import javax.swing.Box import javax.swing.JSeparator import javax.swing.SwingConstants -class PomWizardStepComponent(ideContext: IdeContext) : WizardStepComponent(ideContext) { +class PomWizardStepComponent(context: Context) : WizardStepComponent(context) { private val groupIdComponent = StringSettingComponent( StructurePlugin::groupId.reference, - ideContext, + context, showLabel = true ).asSubComponent() private val artifactIdComponent = StringSettingComponent( StructurePlugin::artifactId.reference, - ideContext, + context, showLabel = true ).asSubComponent() private val versionComponent = StringSettingComponent( StructurePlugin::version.reference, - ideContext, + context, showLabel = true ).asSubComponent() diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/SingleSelectableListWithIcon.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/SingleSelectableListWithIcon.kt index c4133d1b6bb..664fd9e0e41 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/SingleSelectableListWithIcon.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/SingleSelectableListWithIcon.kt @@ -2,13 +2,9 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui import com.intellij.ui.ColoredListCellRenderer import com.intellij.ui.components.JBList -import org.jetbrains.kotlin.tools.projectWizard.core.ignore import javax.swing.DefaultListModel import javax.swing.JList -import javax.swing.ListModel import javax.swing.ListSelectionModel -import javax.swing.event.ListDataEvent -import javax.swing.event.ListDataListener abstract class AbstractSingleSelectableListWithIcon(initialValues: List = emptyList()) : JBList() { protected abstract fun ColoredListCellRenderer.render(value: V) diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/SubStep.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/SubStep.kt index 9c24cb02812..47910fe52f0 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/SubStep.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/SubStep.kt @@ -1,13 +1,13 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext -import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext + +import org.jetbrains.kotlin.tools.projectWizard.core.Context import java.awt.BorderLayout import javax.swing.JComponent abstract class SubStep( - ideContext: IdeContext -) : DynamicComponent(ideContext) { + context: Context +) : DynamicComponent(context) { protected abstract fun buildContent(): JComponent final override val component: JComponent by lazy(LazyThreadSafetyMode.NONE) { diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/WizardStepComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/WizardStepComponent.kt index c06f377da5b..614ebe64683 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/WizardStepComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/WizardStepComponent.kt @@ -1,7 +1,7 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui -import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext +import org.jetbrains.kotlin.tools.projectWizard.core.Context abstract class WizardStepComponent( - ideContext: IdeContext -) : DynamicComponent(ideContext) \ No newline at end of file + context: Context +) : DynamicComponent(context) \ No newline at end of file diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/CheckboxComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/CheckboxComponent.kt index 728711a68d3..b9299181875 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/CheckboxComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/CheckboxComponent.kt @@ -1,18 +1,17 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components import com.intellij.ui.components.JBCheckBox -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingValidator -import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext class CheckboxComponent( - ideContext: IdeContext, + context: Context, labelText: String? = null, initialValue: Boolean? = null, validator: SettingValidator? = null, onValueUpdate: (Boolean) -> Unit = {} ) : UIComponent( - ideContext, + context, labelText, validator, onValueUpdate diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/DropDownComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/DropDownComponent.kt index 8a7da49063e..c16ff969307 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/DropDownComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/DropDownComponent.kt @@ -3,12 +3,11 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components import com.intellij.openapi.ui.ComboBox import com.intellij.ui.ColoredListCellRenderer import com.intellij.ui.SimpleTextAttributes -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.Context 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.settings.DisplayableSettingItem -import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext import org.jetbrains.kotlin.utils.addToStdlib.safeAs import java.awt.event.ItemEvent import javax.swing.DefaultComboBoxModel @@ -16,7 +15,7 @@ import javax.swing.Icon import javax.swing.JList class DropDownComponent( - ideContext: IdeContext, + context: Context, initialValues: List = emptyList(), labelText: String? = null, private val filter: (T) -> Boolean = { true }, @@ -24,7 +23,7 @@ class DropDownComponent( private val iconProvider: (T) -> Icon? = { null }, onValueUpdate: (T) -> Unit = {} ) : UIComponent( - ideContext, + context, labelText, validator, onValueUpdate diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/PathFieldComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/PathFieldComponent.kt index 1de5b5082ee..b54187e5dc6 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/PathFieldComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/PathFieldComponent.kt @@ -3,22 +3,21 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory import com.intellij.openapi.ui.TextBrowseFolderListener import com.intellij.openapi.ui.TextFieldWithBrowseButton -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingValidator -import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.textField import java.nio.file.Path import java.nio.file.Paths import javax.swing.JComponent class PathFieldComponent( - ideContext: IdeContext, + context: Context, labelText: String? = null, initialValue: Path? = null, validator: SettingValidator? = null, onValueUpdate: (Path) -> Unit = {} ) : UIComponent( - ideContext, + context, labelText, validator, onValueUpdate diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/TextFieldComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/TextFieldComponent.kt index aade3ad018a..10b1640c031 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/TextFieldComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/TextFieldComponent.kt @@ -1,19 +1,18 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components import com.intellij.ui.components.JBTextField -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingValidator -import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.textField class TextFieldComponent( - ideContext: IdeContext, + context: Context, labelText: String? = null, initialValue: String? = null, validator: SettingValidator? = null, onValueUpdate: (String) -> Unit = {} ) : UIComponent( - ideContext, + context, labelText, validator, onValueUpdate 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 d85fee13f5c..44dbb746ce3 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 @@ -6,11 +6,13 @@ 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.Context +import org.jetbrains.kotlin.tools.projectWizard.core.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.isSpecificError 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 import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.label @@ -21,11 +23,11 @@ import java.awt.BorderLayout import javax.swing.JComponent abstract class UIComponent( - ideContext: IdeContext, + context: Context, labelText: String? = null, private val validator: SettingValidator? = null, private val onValueUpdate: (V) -> Unit = {} -) : DynamicComponent(ideContext), ErrorAwareComponent, FocusableComponent, Disposable { +) : DynamicComponent(context), ErrorAwareComponent, FocusableComponent, Disposable { private val validationIndicator by lazy(LazyThreadSafetyMode.NONE) { if (validator != null) IdeaBasedComponentValidator(this, getValidatorTarget()) 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 0ff37d22402..bbfcbdccb01 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,25 +4,25 @@ import com.intellij.icons.AllIcons import icons.GradleIcons import icons.OpenapiIcons import org.jetbrains.kotlin.idea.KotlinIcons +import org.jetbrains.kotlin.tools.projectWizard.core.Context 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.ui.components.DropDownComponent import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.UIComponentDelegatingSettingComponent class BuildSystemTypeSettingComponent( - ideContext: IdeContext + context: Context ) : UIComponentDelegatingSettingComponent>( BuildSystemPlugin::type.reference, - ideContext + context ) { override val uiComponent: DropDownComponent = DropDownComponent( - ideContext, + context, setting.type.values, labelText = "Build System", filter = { value -> read { setting.type.filter(this, reference, value) } }, 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 1bad4f5b6d4..b07b1cf4d68 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 @@ -2,14 +2,12 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.firstStep import TemplateTag import com.intellij.util.ui.JBUI +import org.jetbrains.kotlin.tools.projectWizard.core.Context 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 import org.jetbrains.kotlin.tools.projectWizard.projectTemplates.ProjectTemplate -import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module -import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeWizard import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.* import java.awt.BorderLayout @@ -18,9 +16,9 @@ import javax.swing.BoxLayout import javax.swing.JComponent import java.awt.Component as AwtComponent -class FirstWizardStepComponent(wizard: IdeWizard) : WizardStepComponent(wizard.ideContext) { - private val buildSystemSubStep = BuildSystemSubStep(wizard.ideContext).asSubComponent() - private val templatesSubStep = TemplatesSubStep(wizard.ideContext).asSubComponent() +class FirstWizardStepComponent(wizard: IdeWizard) : WizardStepComponent(wizard.context) { + private val buildSystemSubStep = BuildSystemSubStep(wizard.context).asSubComponent() + private val templatesSubStep = TemplatesSubStep(wizard.context).asSubComponent() override val component: JComponent = panel { add(templatesSubStep.component, BorderLayout.CENTER) @@ -28,17 +26,17 @@ class FirstWizardStepComponent(wizard: IdeWizard) : WizardStepComponent(wizard.i } } -class BuildSystemSubStep(ideContext: IdeContext) : SubStep(ideContext) { - private val buildSystemSetting = BuildSystemTypeSettingComponent(ideContext).asSubComponent() +class BuildSystemSubStep(context: Context) : SubStep(context) { + private val buildSystemSetting = BuildSystemTypeSettingComponent(context).asSubComponent() override fun buildContent(): JComponent = panel { add(buildSystemSetting.component, BorderLayout.CENTER) } } -class TemplatesSubStep(ideContext: IdeContext) : SubStep(ideContext) { +class TemplatesSubStep(context: Context) : SubStep(context) { private val projectTemplateSettingComponent = - ProjectTemplateSettingComponent(ideContext) { projectTemplate -> + ProjectTemplateSettingComponent(context) { projectTemplate -> templateDescriptionComponent.setTemplate(projectTemplate) }.asSubComponent() @@ -61,21 +59,6 @@ class TemplatesSubStep(ideContext: IdeContext) : SubStep(ideContext) { } } - private fun allModules(): List { - val modules = mutableListOf() - - fun addModule(module: Module) { - modules += module - module.subModules.forEach(::addModule) - } - - read { - KotlinPlugin::modules.reference.notRequiredSettingValue - }?.forEach(::addModule) - - return modules - } - override fun onValueUpdated(reference: SettingReference<*, *>?) { super.onValueUpdated(reference) if (reference == ProjectTemplatesPlugin::template.reference) { 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 dc2da2e90cf..d87bcc0e9a8 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,10 +1,10 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.firstStep +import org.jetbrains.kotlin.tools.projectWizard.core.Context 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 import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.* import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.SettingComponent import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.ValidationIndicator @@ -13,11 +13,11 @@ import javax.swing.BorderFactory import javax.swing.JComponent class ProjectTemplateSettingComponent( - ideContext: IdeContext, + context: Context, private val onSelected: (ProjectTemplate) -> Unit ) : SettingComponent>( ProjectTemplatesPlugin::template.reference, - ideContext + context ) { override val validationIndicator: ValidationIndicator? get() = null diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/ModuleSettingsComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/ModuleSettingsComponent.kt index f2008cf4ff5..8cda08b9d4f 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/ModuleSettingsComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/ModuleSettingsComponent.kt @@ -2,6 +2,7 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep import com.intellij.ui.components.JBTabbedPane import org.jetbrains.kotlin.idea.projectWizard.UiEditorUsageStats +import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.getConfiguratorSettings @@ -10,8 +11,6 @@ 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.buildsystem.Module.Companion.ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind -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.components.TextFieldComponent import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.panel @@ -20,21 +19,19 @@ import java.awt.BorderLayout import javax.swing.JComponent class ModuleSettingsComponent( - ideContext: IdeContext, + context: Context, uiEditorUsagesStats: UiEditorUsageStats -) : DynamicComponent(ideContext) { - private val validateModuleName = run { - val entityName = KotlinNewProjectWizardBundle.message("editor.entity.module.name") - StringValidators.shouldNotBeBlank(entityName) and - StringValidators.shouldBeValidIdentifier(entityName, ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES) - } +) : DynamicComponent(context) { + private val validateModuleName = + StringValidators.shouldNotBeBlank("Module name") and + StringValidators.shouldBeValidIdentifier("Module Name", ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES) - private val moduleConfiguratorSettingsList = SettingsList(emptyList(), ideContext).asSubComponent() - private val templateComponent = TemplatesComponent(ideContext, uiEditorUsagesStats).asSubComponent() + private val moduleConfiguratorSettingsList = SettingsList(emptyList(), context).asSubComponent() + private val templateComponent = TemplatesComponent(context, uiEditorUsagesStats).asSubComponent() private val tabPanel = JBTabbedPane().apply { - add(KotlinNewProjectWizardBundle.message("editor.tab.template"), templateComponent.component) - add(KotlinNewProjectWizardBundle.message("editor.tab.module.settings"), moduleConfiguratorSettingsList.component) + add("Template", templateComponent.component) + add("Module Settings", moduleConfiguratorSettingsList.component) } fun selectSettingWithError(error: ValidationResult.ValidationError) { @@ -45,11 +42,11 @@ class ModuleSettingsComponent( } private val nameField = TextFieldComponent( - ideContext, - labelText = KotlinNewProjectWizardBundle.message("editor.field.name"), + context, + labelText = "Name", onValueUpdate = { value -> module?.name = value - ideContext.eventManager.fireListeners(null) + context.write { eventManager.fireListeners(null) } }, validator = validateModuleName ).asSubComponent() diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/SecondStepWizardComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/SecondStepWizardComponent.kt index 051008b2dcb..c2ab43f4f4f 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/SecondStepWizardComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/SecondStepWizardComponent.kt @@ -1,12 +1,11 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep import org.jetbrains.kotlin.idea.projectWizard.UiEditorUsageStats -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Sourceset -import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeWizard import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.* import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep.modulesEditor.ModulesEditorComponent @@ -17,9 +16,9 @@ import javax.swing.JComponent class SecondStepWizardComponent( wizard: IdeWizard, uiEditorUsagesStats: UiEditorUsageStats -) : WizardStepComponent(wizard.ideContext) { +) : WizardStepComponent(wizard.context) { private val moduleEditorSubStep = - ModulesEditorSubStep(wizard.ideContext, uiEditorUsagesStats, ::onNodeSelected) { + ModulesEditorSubStep(wizard.context, uiEditorUsagesStats, ::onNodeSelected) { templatesSubStep.selectSettingWithError(it) }.asSubComponent() private val templatesSubStep = ModuleSettingsSubStep(wizard, uiEditorUsagesStats).asSubComponent() @@ -36,13 +35,13 @@ class SecondStepWizardComponent( class ModulesEditorSubStep( - ideContext: IdeContext, + context: Context, uiEditorUsagesStats: UiEditorUsageStats, onNodeSelected: (data: DisplayableSettingItem?) -> Unit, selectSettingWithError: (ValidationResult.ValidationError) -> Unit -) : SubStep(ideContext) { +) : SubStep(context) { private val moduleSettingComponent = ModulesEditorComponent( - ideContext, + context, uiEditorUsagesStats, onNodeSelected, selectSettingWithError @@ -62,9 +61,9 @@ class ModulesEditorSubStep( class ModuleSettingsSubStep( wizard: IdeWizard, uiEditorUsagesStats: UiEditorUsageStats -) : SubStep(wizard.ideContext) { - private val sourcesetSettingsComponent = SourcesetSettingsComponent(wizard.ideContext).asSubComponent() - private val moduleSettingsComponent = ModuleSettingsComponent(wizard.ideContext, uiEditorUsagesStats).asSubComponent() +) : SubStep(wizard.context) { + private val sourcesetSettingsComponent = SourcesetSettingsComponent(wizard.context).asSubComponent() + private val moduleSettingsComponent = ModuleSettingsComponent(wizard.context, uiEditorUsagesStats).asSubComponent() private val nothingSelectedComponent = NothingSelectedComponent().asSubComponent() private val panel = panel { diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/SourcesetDependenciesSettingsComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/SourcesetDependenciesSettingsComponent.kt index 344c190309a..6c952f316ec 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/SourcesetDependenciesSettingsComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/SourcesetDependenciesSettingsComponent.kt @@ -5,13 +5,12 @@ import com.intellij.openapi.ui.DialogWrapper import com.intellij.ui.ColoredListCellRenderer import com.intellij.ui.SimpleTextAttributes import com.intellij.ui.ToolbarDecorator +import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.AndroidSinglePlatformModuleConfigurator import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.IOSSinglePlatformModuleConfigurator import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.withAllSubModules import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.* -import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext -import org.jetbrains.kotlin.tools.projectWizard.wizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.* import org.jetbrains.kotlin.utils.addToStdlib.safeAs import java.awt.BorderLayout @@ -19,8 +18,8 @@ import java.awt.Dimension import javax.swing.JComponent class SourcesetDependenciesSettingsComponent( - ideContext: IdeContext -) : DynamicComponent(ideContext) { + context: Context +) : DynamicComponent(context) { private val sourcesetDependenciesList = SourcesetDependenciesList() private val toolbarDecorator: ToolbarDecorator = ToolbarDecorator.createDecorator(sourcesetDependenciesList).apply { @@ -71,7 +70,7 @@ class SourcesetDependenciesSettingsComponent( private class ChooseModuleDialog(modules: List, parent: JComponent) : DialogWrapper(parent, false) { private val list = ImmutableSingleSelectableListWithIcon( values = modules, - emptyMessage = KotlinNewProjectWizardBundle.message("editor.no.dependencies.to.add"), + emptyMessage = "There are no dependencies to add", renderValue = { value -> renderModule(value) } @@ -80,7 +79,7 @@ private class ChooseModuleDialog(modules: List, parent: JComponent) : Di override fun createCenterPanel() = panel { preferredSize = Dimension(preferredSize.width, 300) add( - label(KotlinNewProjectWizardBundle.message("editor.select.dependency.modules")) + label("Please select the modules to add as dependencies:") .bordered( needLineBorder = false, needInnerEmptyBorder = false, @@ -95,7 +94,7 @@ private class ChooseModuleDialog(modules: List, parent: JComponent) : Di get() = list.selectedValue init { - title = KotlinNewProjectWizardBundle.message("editor.choose.modules") + title = "Choose Modules" init() } } diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/SourcesetSettingsComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/SourcesetSettingsComponent.kt index 1ece7022a8a..677f471ccd3 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/SourcesetSettingsComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/SourcesetSettingsComponent.kt @@ -1,16 +1,15 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep import com.intellij.ui.components.JBTabbedPane +import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Sourceset -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 -class SourcesetSettingsComponent(ideContext: IdeContext) : DynamicComponent(ideContext) { - private val dependenciesComponent = SourcesetDependenciesSettingsComponent(ideContext).asSubComponent() +class SourcesetSettingsComponent(context: Context) : DynamicComponent(context) { + private val dependenciesComponent = SourcesetDependenciesSettingsComponent(context).asSubComponent() override val component = JBTabbedPane().apply { - add(KotlinNewProjectWizardBundle.message("editor.dependencies"), dependenciesComponent.component) + add("Dependencies", dependenciesComponent.component) } var sourceset: Sourceset? = null diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/TemplatesComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/TemplatesComponent.kt index a2eeb2acda9..ba5f284d882 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/TemplatesComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/TemplatesComponent.kt @@ -9,15 +9,13 @@ import com.intellij.util.ui.StatusText import com.intellij.util.ui.UIUtil import org.jetbrains.kotlin.idea.KotlinIcons import org.jetbrains.kotlin.idea.projectWizard.UiEditorUsageStats -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.moduleType import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.templates.Template import org.jetbrains.kotlin.tools.projectWizard.templates.settings -import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext -import org.jetbrains.kotlin.tools.projectWizard.wizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.* import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.Component import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.ErrorAwareComponent @@ -28,23 +26,23 @@ import javax.swing.JComponent import javax.swing.JPanel class TemplatesComponent( - ideContext: IdeContext, + context: Context, uiEditorUsagesStats: UiEditorUsageStats -) : DynamicComponent(ideContext), ErrorAwareComponent { +) : DynamicComponent(context), ErrorAwareComponent { private val chooseTemplateComponent: ChooseTemplateComponent = - ChooseTemplateComponent(ideContext) { template -> + ChooseTemplateComponent(context) { template -> uiEditorUsagesStats.moduleTemplatesSet++ module?.template = template switchState(template) }.asSubComponent() - private val templateSettingsComponent = TemplateSettingsComponent(ideContext) { + private val templateSettingsComponent = TemplateSettingsComponent(context) { if (MessagesEx.showOkCancelDialog( component, - KotlinNewProjectWizardBundle.message("editor.remove.template.description"), - KotlinNewProjectWizardBundle.message("editor.remove.template.title"), - KotlinNewProjectWizardBundle.message("editor.remove.button.remove"), - KotlinNewProjectWizardBundle.message("editor.remove.button.cancel"), + "Do you want to remove selected template from module", + "Remove selected template", + "Remove", + "Cancel", null ) == Messages.OK ) { @@ -86,13 +84,13 @@ class TemplatesComponent( } class ChooseTemplateComponent( - ideContext: IdeContext, + context: Context, private val onTemplateChosen: (Template) -> Unit -) : DynamicComponent(ideContext) { +) : DynamicComponent(context) { private enum class State(val text: String) { - MODULE_SELECTED_AND_TEMPLATES_AVAILABLE(KotlinNewProjectWizardBundle.message("editor.template.can.configure.template")), - MODULE_SELECTED_AND_NO_TEMPLATES_AVAILABLE(KotlinNewProjectWizardBundle.message("editor.template.no.templates.available")), - NO_MODULE_SELECTED(KotlinNewProjectWizardBundle.message("editor.template.select.module")) + MODULE_SELECTED_AND_TEMPLATES_AVAILABLE("You can configure a template for selected module"), + MODULE_SELECTED_AND_NO_TEMPLATES_AVAILABLE("No templates available for selected module"), + NO_MODULE_SELECTED("Please select a module to configure") } override val component: JPanel = object : JPanel() { @@ -138,7 +136,7 @@ class ChooseTemplateComponent( statusText.clear() statusText.appendText(state.text) if (state == State.MODULE_SELECTED_AND_TEMPLATES_AVAILABLE) { - statusText.appendSecondaryText(KotlinNewProjectWizardBundle.message("editor.configure"), SimpleTextAttributes.LINK_ATTRIBUTES) { + statusText.appendSecondaryText("Configure", SimpleTextAttributes.LINK_ATTRIBUTES) { showDialog() } } @@ -148,7 +146,7 @@ class ChooseTemplateComponent( private fun showDialog() { val availableTemplates = availableTemplates if (availableTemplates.isEmpty()) { - MessagesEx.error(null, KotlinNewProjectWizardBundle.message("editor.template.no.templates.available")) + MessagesEx.error(null, "No templates available for the selected module") } else { val dialog = TemplateListDialog(availableTemplates, component) if (dialog.showAndGet()) { @@ -185,7 +183,7 @@ private class TemplateListDialog( get() = templatesList.selectedValue init { - title = KotlinNewProjectWizardBundle.message("editor.template.choose") + title = "Choose a template to configure" init() if (values.isNotEmpty()) { templateDescriptionComponent.updateSelectedTemplate(values.first()) @@ -209,7 +207,7 @@ class TemplateDescriptionComponent( onRemoveButtonClicked: () -> Unit = {} ) : Component() { private val removeButton = if (needRemoveButton) { - hyperlinkLabel(KotlinNewProjectWizardBundle.message("editor.template.remove"), onClick = onRemoveButtonClicked) + hyperlinkLabel("Remove template", onClick = onRemoveButtonClicked) } else null private val titleLabel = label("", bold = true) { @@ -249,9 +247,9 @@ class TemplateDescriptionComponent( } private class TemplateSettingsComponent( - ideContext: IdeContext, + context: Context, removeTemplate: () -> Unit -) : DynamicComponent(ideContext), ErrorAwareComponent { +) : DynamicComponent(context), ErrorAwareComponent { private val templateDescriptionComponent = TemplateDescriptionComponent( needRemoveButton = true, nonDefaultBackgroundColor = UIUtil.getEditorPaneBackground(), @@ -260,7 +258,7 @@ private class TemplateSettingsComponent( component.bordered(needTopEmptyBorder = false, needBottomEmptyBorder = false) } - private val settings = SettingsList(emptyList(), ideContext).apply { + private val settings = SettingsList(emptyList(), context).apply { component.bordered() } diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/CreateModuleOrTargetPopup.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/CreateModuleOrTargetPopup.kt index c09e32d82a0..179c55a8469 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/CreateModuleOrTargetPopup.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/CreateModuleOrTargetPopup.kt @@ -7,15 +7,11 @@ import com.intellij.openapi.ui.popup.util.BaseListPopupStep import com.intellij.ui.popup.PopupFactoryImpl import org.jetbrains.kotlin.tools.projectWizard.core.buildList import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.* -import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem -import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.* -import org.jetbrains.kotlin.tools.projectWizard.settings.fullText -import org.jetbrains.kotlin.tools.projectWizard.wizard.KotlinNewProjectWizardBundle -import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.asHtml +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.htmlText import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.icon -import org.jetbrains.kotlin.utils.addToStdlib.safeAs import javax.swing.Icon class CreateModuleOrTargetPopup private constructor( @@ -40,7 +36,7 @@ class CreateModuleOrTargetPopup private constructor( } private inner class ChooseModuleOrMppModuleStep : BaseListPopupStep( - KotlinNewProjectWizardBundle.message("step.module.type"), + "Module Type", buildList { if (allowMultiplatform) +MppModuleConfigurator +JvmSinglePlatformModuleConfigurator @@ -66,7 +62,7 @@ class CreateModuleOrTargetPopup private constructor( targetConfiguratorGroup: TargetConfiguratorGroupWithSubItems, showTitle: Boolean ) : BaseListPopupStep( - KotlinNewProjectWizardBundle.message("step.target").takeIf { showTitle }, + "Target".takeIf { showTitle }, targetConfiguratorGroup.subItems.filter { it.needToShow() } ) { override fun getIconFor(value: DisplayableSettingItem): Icon? = when (value) { 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 85bde2665d0..71b05e7d016 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,14 +2,14 @@ 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.settings.ListSettingType +import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ListSettingType 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 import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module -import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.panel import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.AlwaysShownValidationIndicator import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.SettingComponent @@ -19,11 +19,11 @@ import javax.swing.JComponent class ModulesEditorComponent( - ideContext: IdeContext, + context: Context, uiEditorUsagesStats: UiEditorUsageStats, oneEntrySelected: (data: DisplayableSettingItem?) -> Unit, selectSettingWithError: (ValidationResult.ValidationError) -> Unit -) : SettingComponent, ListSettingType>(KotlinPlugin::modules.reference, ideContext) { +) : SettingComponent, ListSettingType>(KotlinPlugin::modules.reference, context) { private val tree: ModulesEditorTree = ModulesEditorTree( onSelected = { oneEntrySelected(it) }, @@ -41,7 +41,7 @@ class ModulesEditorComponent( } ) - private val model = TargetsModel(tree, ::value, ideContext, uiEditorUsagesStats) + private val model = TargetsModel(tree, ::value, context, uiEditorUsagesStats) override fun onInit() { super.onInit() diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorToolbarDecorator.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorToolbarDecorator.kt index a97f6e56ddf..d8769a21311 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorToolbarDecorator.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorToolbarDecorator.kt @@ -4,9 +4,14 @@ import com.intellij.icons.AllIcons import com.intellij.openapi.actionSystem.ActionToolbarPosition import com.intellij.openapi.ui.Messages import com.intellij.ui.ToolbarDecorator -import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.* +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.AndroidSinglePlatformModuleConfigurator +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.IOSSinglePlatformModuleConfigurator +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JsSingleplatformModuleConfigurator +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.MppModuleConfigurator import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.withAllSubModules -import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.* +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.Sourceset import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.createPanelWithPopupHandler import org.jetbrains.kotlin.utils.addToStdlib.safeAs import javax.swing.JComponent diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/NewModuleCreator.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/NewModuleCreator.kt index 9189c3db2f4..5988c6a6816 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/NewModuleCreator.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/NewModuleCreator.kt @@ -1,7 +1,6 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep.modulesEditor import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.TargetConfigurator -import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.* class NewModuleCreator { diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/TargetsModel.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/TargetsModel.kt index 4f16dae80c2..4002398cf54 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/TargetsModel.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/TargetsModel.kt @@ -1,10 +1,9 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep.modulesEditor import org.jetbrains.kotlin.idea.projectWizard.UiEditorUsageStats -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind -import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeContext import org.jetbrains.kotlin.utils.addToStdlib.safeAs import javax.swing.tree.DefaultMutableTreeNode import javax.swing.tree.TreePath @@ -13,7 +12,7 @@ import kotlin.reflect.KMutableProperty0 class TargetsModel( private val tree: ModulesEditorTree, private val value: KMutableProperty0?>, - private val ideContext: IdeContext, + private val context: Context, private val uiEditorUsagesStats: UiEditorUsageStats ) { private val root get() = tree.model.root as DefaultMutableTreeNode @@ -66,7 +65,7 @@ class TargetsModel( fun add(module: Module) { uiEditorUsagesStats.modulesCreated++ addToTheTree(module, modifyValue = true, parent = tree.selectedNode ?: root) - with(ideContext) { + context.writeSettings { module.apply { initDefaultValuesForSettings() } } } 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 6028e07cd32..98ae74e946b 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,12 +1,15 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting import com.intellij.openapi.ui.ComboBox -import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.Context +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settingValidator 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 -import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components.* +import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components.CheckboxComponent +import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components.DropDownComponent +import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components.PathFieldComponent +import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components.TextFieldComponent import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.label import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.panel import java.awt.BorderLayout @@ -20,32 +23,32 @@ object DefaultSettingComponent { @Suppress("UNCHECKED_CAST") fun > create( setting: SettingReference, - ideContext: IdeContext + context: Context ): SettingComponent = when (setting.type) { VersionSettingType::class -> VersionSettingComponent( setting as SettingReference, - ideContext + context ) as SettingComponent BooleanSettingType::class -> BooleanSettingComponent( setting as SettingReference, - ideContext + context ) as SettingComponent DropDownSettingType::class -> DropdownSettingComponent( setting as SettingReference>, - ideContext + context ) as SettingComponent StringSettingType::class -> StringSettingComponent( setting as SettingReference, - ideContext + context ) as SettingComponent PathSettingType::class -> PathSettingComponent( setting as SettingReference, - ideContext + context ) as SettingComponent else -> TODO(setting.type.qualifiedName!!) } @@ -53,8 +56,8 @@ object DefaultSettingComponent { class VersionSettingComponent( reference: SettingReference, - ideContext: IdeContext -) : SettingComponent(reference, ideContext) { + context: Context +) : SettingComponent(reference, context) { private val settingLabel = label(setting.title) private val comboBox = ComboBox().apply { addItemListener { e -> @@ -91,17 +94,17 @@ class VersionSettingComponent( class DropdownSettingComponent( reference: SettingReference>, - ideContext: IdeContext + context: Context ) : UIComponentDelegatingSettingComponent>( reference, - ideContext + context ) { override val uiComponent = DropDownComponent( - ideContext = ideContext, + context = context, initialValues = setting.type.values, validator = setting.validator, filter = { value -> - setting.type.filter(ideContext, reference, value) + context.read { setting.type.filter(this, reference, value) } }, labelText = setting.title, onValueUpdate = { newValue -> value = newValue } @@ -110,13 +113,13 @@ class DropdownSettingComponent( class BooleanSettingComponent( reference: SettingReference, - ideContext: IdeContext + context: Context ) : UIComponentDelegatingSettingComponent( reference, - ideContext + context ) { override val uiComponent = CheckboxComponent( - ideContext = ideContext, + context = context, labelText = setting.title, initialValue = null, validator = setting.validator, @@ -126,14 +129,14 @@ class BooleanSettingComponent( class StringSettingComponent( reference: SettingReference, - ideContext: IdeContext, + context: Context, showLabel: Boolean = true ) : UIComponentDelegatingSettingComponent( reference, - ideContext + context ) { override val uiComponent = TextFieldComponent( - ideContext = ideContext, + context = context, initialValue = null, labelText = if (showLabel) setting.title else null, validator = setting.validator, @@ -143,13 +146,13 @@ class StringSettingComponent( class PathSettingComponent( reference: SettingReference, - ideContext: IdeContext + context: Context ) : UIComponentDelegatingSettingComponent( reference, - ideContext + context ) { override val uiComponent = PathFieldComponent( - ideContext = ideContext, + context = context, labelText = setting.title, validator = settingValidator { path -> setting.validator.validate(this, path) }, onValueUpdate = { newValue -> value = newValue } 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 21dab3cbb3f..23d3f1830a0 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,17 +1,17 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting +import org.jetbrains.kotlin.tools.projectWizard.core.Context 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 import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.FocusableComponent abstract class SettingComponent>( val reference: SettingReference, - ideContext: IdeContext -) : DynamicComponent(ideContext), Displayable, FocusableComponent { + context: Context +) : DynamicComponent(context), Displayable, FocusableComponent { var value: V? get() = reference.value set(value) { 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 c9d7b56be3a..07082198f62 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,10 +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.Context 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.ui.DynamicComponent import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.FocusableComponent import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.PanelWithStatusText @@ -16,8 +16,8 @@ interface ErrorAwareComponent { class SettingsList( settings: List>, - private val ideContext: IdeContext -) : DynamicComponent(ideContext), ErrorAwareComponent { + private val context: Context +) : DynamicComponent(context), ErrorAwareComponent { private val panel = PanelWithStatusText(VerticalLayout(5), "This module has no settings to configure") var settingComponents: List> = emptyList() @@ -38,7 +38,7 @@ class SettingsList( panel.isStatusTextVisible = settings.isEmpty() panel.removeAll() settingComponents = settings.map { setting -> - DefaultSettingComponent.create(setting, ideContext) + DefaultSettingComponent.create(setting, context) } settingComponents.forEach { setting -> setting.onInit(); panel.add(setting.component) } } 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 3246fa4911d..93811d4546a 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,17 +5,17 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting +import org.jetbrains.kotlin.tools.projectWizard.core.Context 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 import javax.swing.JComponent abstract class UIComponentDelegatingSettingComponent>( reference: SettingReference, - ideContext: IdeContext -) : SettingComponent(reference, ideContext) { + context: Context +) : SettingComponent(reference, context) { abstract val uiComponent: UIComponent // As there is one in UIComponent diff --git a/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/AbstractNewWizardProjectImportTest.kt b/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/AbstractNewWizardProjectImportTest.kt index 81f1f72e7ca..4614a9315a3 100644 --- a/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/AbstractNewWizardProjectImportTest.kt +++ b/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/AbstractNewWizardProjectImportTest.kt @@ -11,7 +11,10 @@ import com.intellij.openapi.projectRoots.SimpleJavaSdkType import com.intellij.testFramework.IdeaTestUtil import com.intellij.testFramework.PlatformTestCase import org.jetbrains.kotlin.test.testFramework.runWriteAction -import org.jetbrains.kotlin.tools.projectWizard.cli.* +import org.jetbrains.kotlin.tools.projectWizard.cli.BuildSystem +import org.jetbrains.kotlin.tools.projectWizard.cli.TestWizardService +import org.jetbrains.kotlin.tools.projectWizard.cli.assertSuccess +import org.jetbrains.kotlin.tools.projectWizard.cli.isGradle import org.jetbrains.kotlin.tools.projectWizard.core.service.Services import org.jetbrains.kotlin.tools.projectWizard.core.service.ServicesManager import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase diff --git a/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/AbstractProjectTemplateNewWizardProjectImportTest.kt b/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/AbstractProjectTemplateNewWizardProjectImportTest.kt index 3cf791ac4b6..a5126bc1dc2 100644 --- a/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/AbstractProjectTemplateNewWizardProjectImportTest.kt +++ b/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/AbstractProjectTemplateNewWizardProjectImportTest.kt @@ -7,8 +7,6 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard import org.jetbrains.kotlin.tools.projectWizard.cli.BuildSystem import org.jetbrains.kotlin.tools.projectWizard.cli.ProjectTemplateBasedTestWizard -import org.jetbrains.kotlin.tools.projectWizard.cli.readSettingsYaml -import org.jetbrains.kotlin.tools.projectWizard.plugins.Plugins import java.nio.file.Path abstract class AbstractProjectTemplateNewWizardProjectImportTest : AbstractNewWizardProjectImportTest() { diff --git a/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/services/KotlinVersionProviderTestWizardService.kt b/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/services/KotlinVersionProviderTestWizardService.kt index 3efc37d95bc..2c2cf450a83 100644 --- a/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/services/KotlinVersionProviderTestWizardService.kt +++ b/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/services/KotlinVersionProviderTestWizardService.kt @@ -7,9 +7,7 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.services import org.jetbrains.kotlin.tools.projectWizard.Versions import org.jetbrains.kotlin.tools.projectWizard.cli.TestWizardService -import org.jetbrains.kotlin.tools.projectWizard.core.service.FileFormattingService import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderService -import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderServiceImpl import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version class KotlinVersionProviderTestWizardService : KotlinVersionProviderService, TestWizardService { 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 67618f2459d..a5b9bdb3d63 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 @@ -1,10 +1,10 @@ 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.settings.PluginSetting import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSettingReference import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference +import org.jetbrains.kotlin.tools.projectWizard.wizard.core.YamlParsingError 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 e6504cb0bf7..07b4a8798c2 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 @@ -2,8 +2,6 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard import org.jetbrains.kotlin.tools.projectWizard.YamlSettingsParser 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.settings.PluginSetting import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference @@ -24,16 +22,15 @@ class YamlWizard( servicesManager: ServicesManager = CLI_SERVICES_MANAGER, isUnitTestMode: Boolean ) : Wizard(createPlugins, servicesManager, isUnitTestMode) { - private val settingsWritingContext = SettingsWritingContext(context, servicesManager, isUnitTestMode) override fun apply( services: List, phases: Set, onTaskExecuting: (PipelineTask) -> Unit ): TaskResult = computeM { - val (settingsValuesFromYaml) = valuesReadingContext.parseYaml(yaml, pluginSettings) + val (settingsValuesFromYaml) = context.read { parseYaml(yaml, pluginSettings) } - with(settingsWritingContext) { + context.writeSettings { settingsValuesFromYaml.forEach { (reference, value) -> reference.setValue(value) } StructurePlugin::projectPath.reference.setValue(projectPath) } 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 9222cd4c403..9ada2a60751 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 @@ -6,11 +6,11 @@ package org.jetbrains.kotlin.tools.projectWizard.cli import org.jetbrains.kotlin.tools.projectWizard.core.TaskResult -import org.jetbrains.kotlin.tools.projectWizard.core.compute +import org.jetbrains.kotlin.tools.projectWizard.core.UNIT_SUCCESS 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.settings.reference +import org.jetbrains.kotlin.tools.projectWizard.core.map 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 @@ -34,31 +34,29 @@ class ProjectTemplateBasedTestWizard( servicesManager, isUnitTestMode = true ) { - private val settingsWritingContext = SettingsWritingContext(context, servicesManager, isUnitTestMode = true) override fun apply( services: List, phases: Set, onTaskExecuting: (PipelineTask) -> Unit - ): TaskResult = - computeM { - super.apply(services, setOf(GenerationPhase.PREPARE), onTaskExecuting).ensure() - with(settingsWritingContext) { - applyProjectTemplate(projectTemplate) - BuildSystemPlugin::type.reference.setValue(buildSystem.buildSystemType) - StructurePlugin::projectPath.reference.setValue(projectDirectory) - StructurePlugin::name.reference.setValue(projectTemplate.id) - StructurePlugin::groupId.reference.setValue(GROUP_ID) - StructurePlugin::artifactId.reference.setValue(ARTIFACT_ID) - applyAdditionalSettingsFromYaml().ensure() - } - - super.apply(services, phases, onTaskExecuting) + ): TaskResult = computeM { + super.apply(services, setOf(GenerationPhase.PREPARE), onTaskExecuting).ensure() + context.writeSettings { + applyProjectTemplate(projectTemplate) + BuildSystemPlugin::type.reference.setValue(buildSystem.buildSystemType) + StructurePlugin::projectPath.reference.setValue(projectDirectory) + StructurePlugin::name.reference.setValue(projectTemplate.id) + StructurePlugin::groupId.reference.setValue(GROUP_ID) + StructurePlugin::artifactId.reference.setValue(ARTIFACT_ID) } + applyAdditionalSettingsFromYaml().ensure() - private fun SettingsWritingContext.applyAdditionalSettingsFromYaml() = compute { - if (additionalYamlSettings != null) { - val (additionalSettings) = parseYaml(additionalYamlSettings, pluginSettings) + super.apply(services, phases, onTaskExecuting) + } + + private fun applyAdditionalSettingsFromYaml() = context.writeSettings { + if (additionalYamlSettings == null) return@writeSettings UNIT_SUCCESS + parseYaml(additionalYamlSettings, pluginSettings).map { additionalSettings -> additionalSettings.forEach { (reference, value) -> reference.setValue(value) } } } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Checker.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Checker.kt index e22538e5ef6..d2e5b6b93a8 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Checker.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Checker.kt @@ -1,7 +1,5 @@ package org.jetbrains.kotlin.tools.projectWizard.core -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext - typealias Checker = ReadingContext.() -> Boolean val ALWAYS_AVAILABLE_CHECKER = checker { true } 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 b3a343c57a2..bd3fe85f0da 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,14 +1,95 @@ 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.core.entity.settings.* +import org.jetbrains.kotlin.tools.projectWizard.core.service.ServicesManager +import org.jetbrains.kotlin.tools.projectWizard.core.service.SettingSavingWizardService +import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardService import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase +import kotlin.properties.ReadOnlyProperty import kotlin.reflect.KClass +import kotlin.reflect.KProperty1 import kotlin.reflect.full.isSubclassOf import kotlin.reflect.full.memberProperties -class Context(private val pluginsCreator: PluginsCreator, val eventManager: EventManager) { + +class Context private constructor( + private val servicesManager: ServicesManager, + private val isUnitTestMode: Boolean, + private val settingContext: SettingContext, + private val propertyContext: PropertyContext, + private val taskContext: TaskContext +) { + private lateinit var plugins: List + + private val settingWritingContext = SettingsWritingContext() + + private val pluginSettings by lazy(LazyThreadSafetyMode.NONE) { + plugins.flatMap(Plugin::declaredSettings).distinctBy(PluginSetting<*, *>::path) + } + + fun read(reader: ReadingContext.() -> T): T = + settingWritingContext.reader() + + fun write(writer: WritingContext.() -> T): T = + settingWritingContext.writer() + + fun writeSettings(writer: SettingsWritingContext.() -> T): T = + settingWritingContext.writer() + + + constructor( + pluginsCreator: PluginsCreator, + servicesManager: ServicesManager, + isUnitTestMode: Boolean + ) : this( + servicesManager, + isUnitTestMode, + SettingContext(), + PropertyContext(), + TaskContext() + ) { + plugins = pluginsCreator(this).onEach(::initPlugin) + } + + fun withAdditionalServices(services: List) = + Context( + servicesManager.withAdditionalServices(services), + isUnitTestMode, + settingContext, + propertyContext, + taskContext + ).also { + it.plugins = plugins + } + + + fun > pluginSettingDelegate( + create: (path: String) -> SettingBuilder + ): ReadOnlyProperty> = + settingContext.settingDelegate(create) + + fun propertyDelegate( + init: Property.Builder.() -> Unit, + defaultValue: T + ) = entityDelegate(propertyContext) { name -> + Property.Builder(name, defaultValue).apply(init).build() + } + + fun pipelineTaskDelegate( + phase: GenerationPhase, + init: PipelineTask.Builder.() -> Unit + ) = entityDelegate(taskContext) { name -> + PipelineTask.Builder(name, phase).apply(init).build() + } + + fun task1Delegate( + init: Task1.Builder.() -> Unit + ) = entityDelegate(taskContext) { name -> + Task1.Builder(name).apply(init).build() + } + + private fun initPlugin(plugin: Plugin) { for (entityReference in plugin::class.memberProperties) { val type = entityReference.returnType.classifier.safeAs>() ?: continue @@ -23,32 +104,13 @@ class Context(private val pluginsCreator: PluginsCreator, val eventManager: Even } } - val settingContext = - SettingContext(eventManager::fireListeners) - val propertyContext = PropertyContext() - val taskContext = TaskContext() - val plugins = pluginsCreator(this).onEach(::initPlugin) - - @Suppress("UNUSED_PARAMETER") - fun getUnspecifiedSettings(phases: Set): List { - val required = plugins - .flatMap { plugin -> - plugin.declaredSettings.mapNotNull { setting -> - if (setting.neededAtPhase !in phases) return@mapNotNull null - if (setting.isRequired) setting else null - } - }.toSet() - val provided = settingContext.allPluginSettings.map { it.path }.toSet() - return required.filterNot { it.path in provided } - } private val pipelineLineTasks: List get() = plugins .flatMap { it.declaredTasks.filterIsInstance() } private fun task(reference: PipelineTaskReference) = - taskContext.getEntity(reference) as? PipelineTask - ?: error(reference.path) + taskContext.getEntity(reference) as? PipelineTask ?: error(reference.path) private val dependencyList: Map> get() { @@ -67,8 +129,123 @@ class Context(private val pluginsCreator: PluginsCreator, val eventManager: Even } } - fun copy() = Context(pluginsCreator, eventManager) - fun sortTasks(): TaskResult> = TaskSorter().sort(pipelineLineTasks, dependencyList) + + + open inner class ReadingContext { + val plugins: List + get() = this@Context.plugins + + val pluginSettings: List> + get() = this@Context.pluginSettings + + val isUnitTestMode: Boolean + get() = this@Context.isUnitTestMode + + inline fun service(noinline filter: (S) -> Boolean = { true }): S = + serviceByClass(S::class, filter) + + + fun serviceByClass(klass: KClass, filter: (S) -> Boolean = { true }): S = + servicesManager.serviceByClass(klass, filter) ?: error("Service ${klass.simpleName} was not found") + + @Suppress("UNCHECKED_CAST") + val PropertyReference.propertyValue: T + get() = propertyContext[this] as T + + val > SettingReference.settingValue: V + get() = settingContext[this] ?: error("No value is present for setting `$this`") + + inline val KProperty1>>.settingValue: V + get() = reference.settingValue + + inline fun KProperty1>>.settingValue(): V = + this.reference.settingValue + + fun > SettingReference.settingValue(): V = + settingContext[this] ?: error("No value is present for setting `$this`") + + val > SettingReference.notRequiredSettingValue: V? + get() = settingContext[this] + + fun > SettingReference.notRequiredSettingValue(): V? = + settingContext[this] + + val > PluginSettingReference.pluginSetting: Setting + get() = settingContext.getPluginSetting(this) + + private fun Setting>.getSavedValueForSetting(): V? { + if (!isSavable || this !is PluginSetting<*, *>) return null + val serializer = type.serializer.safeAs>() ?: return null + val savedValue = service().getSettingValue(path) ?: return null + return serializer.fromString(savedValue) + } + + val SettingReference>.savedOrDefaultValue: V? + get() = setting.getSavedValueForSetting() ?: when (val defaultValue = setting.defaultValue) { + is SettingDefaultValue.Value -> defaultValue.value + is SettingDefaultValue.Dynamic -> defaultValue.getter(this@ReadingContext, this) + null -> null + } + + val > SettingReference.setting: Setting + get() = with(this) { getSetting() } + } + + open inner class WritingContext : ReadingContext() { + val eventManager: EventManager + get() = settingContext.eventManager + + fun Task1Reference.execute(value: A): TaskResult { + @Suppress("UNCHECKED_CAST") + val task = taskContext.getEntity(this) as Task1 + return task.action(this@WritingContext, value) + } + + fun PropertyReference.update( + updater: suspend ComputeContext<*>.(T) -> TaskResult + ): TaskResult = compute { + val (newValue) = updater(propertyValue) + propertyContext[this@update] = newValue + } + + fun PropertyReference>.addValues( + vararg values: T + ): TaskResult = update { oldValues -> success(oldValues + values) } + + fun PropertyReference>.addValues( + values: List + ): TaskResult = update { oldValues -> success(oldValues + values) } + } + + open inner class SettingsWritingContext : WritingContext() { + fun > SettingReference.setValue(newValue: V) { + settingContext[this] = newValue + } + + fun > SettingReference.setSettingValueToItsDefaultIfItIsNotSetValue() { + val defaultValue = savedOrDefaultValue ?: return + if (notRequiredSettingValue == null) { + setValue(defaultValue) + } + } + } } + +fun ReadingContext.getUnspecifiedSettings(phases: Set): List { + val required = plugins + .flatMap { plugin -> + plugin.declaredSettings.mapNotNull { setting -> + if (setting.neededAtPhase !in phases) return@mapNotNull null + if (setting.isRequired) setting else null + } + }.toSet() + val provided = pluginSettings.map(PluginSetting<*, *>::path).toSet() + return required.filterNot { it.path in provided } +} + + +typealias ReadingContext = Context.ReadingContext +typealias WritingContext = Context.WritingContext +typealias SettingsWritingContext = Context.SettingsWritingContext \ No newline at end of file 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 a765510e726..96373eeb908 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 @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version import java.nio.file.Path import kotlin.properties.ReadOnlyProperty import kotlin.reflect.KClass -import kotlin.reflect.KProperty import kotlin.reflect.full.isSubclassOf import kotlin.reflect.full.memberProperties @@ -28,17 +27,7 @@ abstract class Plugin(override val context: Context) : EntityBase(), override fun > settingDelegate( create: (path: String) -> SettingBuilder - ): ReadOnlyProperty> = object : ReadOnlyProperty> { - override fun getValue(thisRef: Any, property: KProperty<*>): PluginSetting { - @Suppress("UNCHECKED_CAST") - val reference = property as PluginSettingPropertyReference - context.settingContext.getPluginSetting(reference)?.let { return it } - val setting = - PluginSetting(create(reference.path).buildInternal()) - context.settingContext.setPluginSetting(reference, setting) - return setting - } - } + ): ReadOnlyProperty> = context.pluginSettingDelegate(create) val reference = this::class override val path = reference.path @@ -47,7 +36,6 @@ abstract class Plugin(override val context: Context) : EntityBase(), val declaredSettings get() = entitiesOfType>().toSet() val declaredTasks get() = entitiesOfType() - private inline fun entitiesOfType() = reference.memberProperties.filter { kProperty -> kProperty.returnType.classifier.safeAs>()?.isSubclassOf(E::class) == true @@ -56,13 +44,13 @@ abstract class Plugin(override val context: Context) : EntityBase(), } fun pipelineTask(phase: GenerationPhase, init: PipelineTask.Builder.() -> Unit) = - PipelineTask.delegate(context.taskContext, phase, init) + context.pipelineTaskDelegate(phase, init) fun task1(init: Task1.Builder.() -> Unit) = - Task1.delegate(context.taskContext, init) + context.task1Delegate(init) fun property(defaultValue: T, init: Property.Builder.() -> Unit = {}) = - propertyDelegate(context.propertyContext, init, defaultValue) + context.propertyDelegate(init, defaultValue) fun listProperty(vararg defaultValues: T, init: Property.Builder>.() -> Unit = {}) = property(defaultValues.toList(), init) @@ -168,9 +156,9 @@ abstract class Plugin(override val context: Context) : EntityBase(), val PluginReference.withParentPlugins get() = generateSequence(this) { klass -> klass.supertypes.firstOrNull { supertype -> - supertype.classifier?.safeAs>() - ?.isSubclassOf(Plugin::class) == true - }?.classifier + supertype.classifier?.safeAs>() + ?.isSubclassOf(Plugin::class) == true + }?.classifier ?.safeAs>() ?.takeIf { superClass -> superClass.simpleName != null @@ -185,8 +173,8 @@ val PluginReference.name val PluginReference.path get() = withParentPlugins.mapNotNull { klass -> - klass.name.takeIf { it.isNotEmpty() } - }.toList() + klass.name.takeIf { it.isNotEmpty() } + }.toList() .reversed() .joinToString(".") diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/TaskResult.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/TaskResult.kt index 693e48184c5..b24332225d5 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/TaskResult.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/TaskResult.kt @@ -1,13 +1,5 @@ package org.jetbrains.kotlin.tools.projectWizard.core -import kotlin.coroutines.Continuation -import kotlin.coroutines.CoroutineContext -import kotlin.coroutines.EmptyCoroutineContext -import kotlin.coroutines.intrinsics.COROUTINE_SUSPENDED -import kotlin.coroutines.intrinsics.createCoroutineUnintercepted -import kotlin.coroutines.intrinsics.suspendCoroutineUninterceptedOrReturn -import kotlin.coroutines.resume - sealed class TaskResult data class Success(val value: T) : TaskResult() 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 deleted file mode 100644 index 4d6478ec5b2..00000000000 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/context/ReadingContext.kt +++ /dev/null @@ -1,74 +0,0 @@ -/* - * 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.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 -import org.jetbrains.kotlin.tools.projectWizard.core.service.SettingSavingWizardService -import kotlin.reflect.KClass -import kotlin.reflect.KProperty1 - -open class ReadingContext( - protected val context: Context, - private val servicesManager: ServicesManager, - val isUnitTestMode: Boolean -) { - inline fun service(noinline filter: (S) -> Boolean = { true }): S = - serviceByClass(S::class, filter) - - fun serviceByClass(klass: KClass, filter: (S) -> Boolean = { true }): S = - servicesManager.serviceByClass(klass, filter) ?: error("Service ${klass.simpleName} was not found") - - inline val PropertyReference.propertyValue: T - get() = `access$context`.propertyContext[this] as T - - inline val > SettingReference.settingValue: V - get() = `access$context`.settingContext[this] ?: error("No value is present for setting `$this`") - - inline val KProperty1>>.settingValue: V - get() = reference.settingValue - - inline fun KProperty1>>.settingValue(): V = - this.reference.settingValue - - inline fun > SettingReference.settingValue(): V = - `access$context`.settingContext[this] ?: error("No value is present for setting `$this`") - - val > SettingReference.notRequiredSettingValue: V? - get() = context.settingContext[this] - - fun > SettingReference.notRequiredSettingValue(): V? = - context.settingContext[this] - - val > PluginSettingReference.pluginSetting: Setting - get() = context.settingContext.getPluginSetting(this) - - private fun Setting>.getSavedValueForSetting(): V? { - if (!isSavable || this !is PluginSetting<*, *>) return null - val serializer = type.serializer.safeAs>() ?: return null - val savedValue = service().getSettingValue(path) ?: return null - return serializer.fromString(savedValue) - } - - val SettingReference>.savedOrDefaultValue: V? - get() = setting.getSavedValueForSetting() ?: when (val defaultValue = setting.defaultValue) { - is SettingDefaultValue.Value -> defaultValue.value - is SettingDefaultValue.Dynamic -> defaultValue.getter(this@ReadingContext, this) - null -> null - } - - val > SettingReference.setting: Setting - get() = with(this) { getSetting() } - - @PublishedApi - internal val `access$context`: Context - get() = context -} \ No newline at end of file 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 deleted file mode 100644 index d9618600881..00000000000 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/context/SettingsWritingContext.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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.context - -import org.jetbrains.kotlin.tools.projectWizard.core.Context -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 - - -open class SettingsWritingContext(context: Context, servicesManager: ServicesManager, isUnitTestMode: Boolean) : - WritingContext( - context, - servicesManager, - isUnitTestMode - ) { - - fun > SettingReference.setValue(newValue: V) { - context.settingContext[this] = newValue - } - - fun > SettingReference.setSettingValueToItsDefaultIfItIsNotSetValue() { - val defaultValue = savedOrDefaultValue ?: return - if (notRequiredSettingValue == null) { - setValue(defaultValue) - } - } -} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/context/WritingContext.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/context/WritingContext.kt deleted file mode 100644 index f0e766c4e96..00000000000 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/context/WritingContext.kt +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.context - -import org.jetbrains.kotlin.tools.projectWizard.core.* -import org.jetbrains.kotlin.tools.projectWizard.core.entity.PropertyReference -import org.jetbrains.kotlin.tools.projectWizard.core.entity.Task1 -import org.jetbrains.kotlin.tools.projectWizard.core.entity.Task1Reference -import org.jetbrains.kotlin.tools.projectWizard.core.service.ServicesManager - -open class WritingContext( - context: Context, - servicesManager: ServicesManager, - isUnitTestMode: Boolean -) : ReadingContext(context, servicesManager, isUnitTestMode) { - fun Task1Reference.execute(value: A): TaskResult { - @Suppress("UNCHECKED_CAST") - val task = context.taskContext.getEntity(this) as Task1 - return task.action(this@WritingContext, value) - } - - inline fun PropertyReference.update( - crossinline updater: suspend ComputeContext<*>.(T) -> TaskResult - ): TaskResult = compute { - val (newValue) = updater(propertyValue) - `access$context`.propertyContext[this@update] = newValue - } - - fun PropertyReference>.addValues( - vararg values: T - ): TaskResult = update { oldValues -> success(oldValues + values) } - - fun PropertyReference>.addValues( - values: List - ): TaskResult = update { oldValues -> success(oldValues + values) } -} diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Entity.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Entity.kt index 6bbb87e68e3..f95c28bea82 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Entity.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Entity.kt @@ -1,7 +1,6 @@ package org.jetbrains.kotlin.tools.projectWizard.core.entity import org.jetbrains.kotlin.tools.projectWizard.SettingsOwner -import org.jetbrains.kotlin.tools.projectWizard.core.Plugin import org.jetbrains.kotlin.tools.projectWizard.core.PluginReference import org.jetbrains.kotlin.tools.projectWizard.core.path import org.jetbrains.kotlin.tools.projectWizard.core.safeAs diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Property.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Property.kt index a88bbd44ccf..98ae16fa3c6 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Property.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Property.kt @@ -1,7 +1,6 @@ package org.jetbrains.kotlin.tools.projectWizard.core.entity import org.jetbrains.kotlin.tools.projectWizard.core.Plugin -import org.jetbrains.kotlin.tools.projectWizard.core.PluginReference import kotlin.reflect.KProperty1 typealias PropertyReference = KProperty1> @@ -20,12 +19,3 @@ data class Property( fun build(): Property = Property(name, defaultValue) } } - - -fun propertyDelegate( - context: PropertyContext, - init: Property.Builder.() -> Unit, - defaultValue: T -) = entityDelegate(context) { name -> - Property.Builder(name, defaultValue).apply(init).build() -} diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/SettingValidator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/SettingValidator.kt index b765c8268a9..753ea3e4732 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/SettingValidator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/SettingValidator.kt @@ -1,9 +1,10 @@ package org.jetbrains.kotlin.tools.projectWizard.core.entity import org.jetbrains.kotlin.tools.projectWizard.core.Failure +import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.UNIT_SUCCESS import org.jetbrains.kotlin.tools.projectWizard.core.ValidationError -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext + inline class SettingValidator(val validate: ReadingContext.(V) -> ValidationResult) { infix fun and(other: SettingValidator) = SettingValidator { value -> diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Task.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Task.kt index e337e10735a..fe02e36c2d1 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Task.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Task.kt @@ -1,6 +1,6 @@ package org.jetbrains.kotlin.tools.projectWizard.core.entity -import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext + import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import kotlin.reflect.KProperty1 @@ -26,15 +26,6 @@ data class Task1( fun build(): Task1 = Task1(name, action) } - - companion object { - fun delegate( - context: EntityContext, - init: Builder.() -> Unit - ) = entityDelegate(context) { name -> - Builder(name).apply(init).build() - } - } } data class PipelineTask( @@ -72,14 +63,4 @@ data class PipelineTask( fun build(): PipelineTask = PipelineTask(name, action, before, after, phase, isAvailable, title) } - - companion object { - fun delegate( - context: EntityContext, - phase: GenerationPhase, - init: Builder.() -> Unit - ) = entityDelegate(context) { name -> - Builder(name, phase).apply(init).build() - } - } } \ No newline at end of file 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 index 975b628200c..acba107ba53 100644 --- 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 @@ -7,7 +7,8 @@ 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.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 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 index fa6d4784796..715492f6fc4 100644 --- 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 @@ -5,7 +5,8 @@ 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.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 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 index 61f974a26c9..cf295006ad0 100644 --- 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 @@ -5,11 +5,15 @@ package org.jetbrains.kotlin.tools.projectWizard.core.entity.settings +import org.jetbrains.kotlin.tools.projectWizard.core.EventManager import org.jetbrains.kotlin.tools.projectWizard.core.entity.path +import kotlin.properties.ReadOnlyProperty +import kotlin.reflect.KProperty -class SettingContext(val onUpdated: (SettingReference<*, *>) -> Unit) { +class SettingContext { private val values = mutableMapOf() private val pluginSettings = mutableMapOf>() + val eventManager = EventManager() @Suppress("UNCHECKED_CAST") operator fun > get( @@ -21,30 +25,34 @@ class SettingContext(val onUpdated: (SettingReference<*, *>) -> Unit) { newValue: V ) { values[reference.path] = newValue - onUpdated(reference) + eventManager.fireListeners(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) = + private fun > getPluginSetting(pluginSettingReference: PluginSettingPropertyReference) = pluginSettings[pluginSettingReference.path] as? PluginSetting - @Suppress("UNCHECKED_CAST") - fun > setPluginSetting( + private fun > setPluginSetting( pluginSettingReference: PluginSettingPropertyReference, setting: PluginSetting ) { pluginSettings[pluginSettingReference.path] = setting } - @Suppress("UNCHECKED_CAST") - fun > pluginSettingValue(setting: PluginSetting): V? = - values[setting.path] as? V + fun > settingDelegate( + create: (path: String) -> SettingBuilder + ): ReadOnlyProperty> = object : ReadOnlyProperty> { + override fun getValue(thisRef: Any, property: KProperty<*>): PluginSetting { + @Suppress("UNCHECKED_CAST") + val reference = property as PluginSettingPropertyReference + getPluginSetting(reference)?.let { return it } + val setting = PluginSetting(create(reference.path).buildInternal()) + setPluginSetting(reference, setting) + return setting + } + } } \ 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 index 7083c92e667..5520e70767a 100644 --- 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 @@ -7,8 +7,8 @@ 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.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.entity.path 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 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 index 775e253fa86..3444a625f40 100644 --- 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 @@ -6,7 +6,7 @@ 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 diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/BuildSystemAvailabilityWizardService.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/BuildSystemAvailabilityWizardService.kt index 02a98796dff..8395c8f3f4a 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/BuildSystemAvailabilityWizardService.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/BuildSystemAvailabilityWizardService.kt @@ -5,7 +5,8 @@ package org.jetbrains.kotlin.tools.projectWizard.core.service -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext + +import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType interface BuildSystemAvailabilityWizardService : WizardService { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/RunConfigurationsService.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/RunConfigurationsService.kt index 62572640a69..f3d4b7e8eee 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/RunConfigurationsService.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/RunConfigurationsService.kt @@ -6,7 +6,8 @@ package org.jetbrains.kotlin.tools.projectWizard.core.service import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext + interface RunConfigurationsService : WizardService { fun ReadingContext.addRunConfigurations(configurations: List) diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/ServicesManager.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/ServicesManager.kt index 3ea94f1a207..63054c0e8d6 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/ServicesManager.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/ServicesManager.kt @@ -8,13 +8,16 @@ package org.jetbrains.kotlin.tools.projectWizard.core.service import kotlin.reflect.KClass import kotlin.reflect.full.isSubclassOf -class ServicesManager(private val services: List, private val serviceSelector: (List) -> WizardService?) { +class ServicesManager( + private val services: List, + private val serviceSelector: (List) -> WizardService? +) { @Suppress("UNCHECKED_CAST") fun serviceByClass(klass: KClass, filter: (S) -> Boolean): S? = services.filter { service -> service::class.isSubclassOf(klass) && filter(service as S) }.let(serviceSelector) as? S - fun withServices(services: List) = + fun withAdditionalServices(services: List) = ServicesManager(this.services + services, serviceSelector) } \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/utils.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/utils.kt index b671450eb74..1fb3e6cd536 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/utils.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/utils.kt @@ -4,7 +4,6 @@ import kotlinx.collections.immutable.toPersistentList import java.io.IOException import java.nio.file.Path import java.nio.file.Paths -import java.util.* import kotlin.properties.ReadOnlyProperty import kotlin.random.Random import kotlin.reflect.KProperty diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/BuildFileIR.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/BuildFileIR.kt index 1102d5a4c8b..361739a5b6e 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/BuildFileIR.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/BuildFileIR.kt @@ -2,7 +2,6 @@ package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem import kotlinx.collections.immutable.PersistentList import org.jetbrains.kotlin.tools.projectWizard.core.* -import org.jetbrains.kotlin.tools.projectWizard.core.safeAs 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.ir.buildsystem.gradle.multiplatform.TargetConfigurationIR diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/IrsOwner.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/IrsOwner.kt index 892f12564be..1ccce5698a9 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/IrsOwner.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/IrsOwner.kt @@ -1,6 +1,8 @@ package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem -import kotlinx.collections.immutable.* +import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.plus +import kotlinx.collections.immutable.toPersistentList interface IrsOwner { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/ModuleIR.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/ModuleIR.kt index 0ab7e2f4bae..ab3ec8e8cc7 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/ModuleIR.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/ModuleIR.kt @@ -2,14 +2,11 @@ package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem import kotlinx.collections.immutable.PersistentList import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleIR -import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.BuildFilePrinter import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.MavenPrinter 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.Sourceset -import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType import org.jetbrains.kotlin.tools.projectWizard.templates.Template import java.nio.file.Path diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/gradle/GradleIR.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/gradle/GradleIR.kt index 1484844893d..3f83e400d96 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/gradle/GradleIR.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/gradle/GradleIR.kt @@ -1,6 +1,9 @@ package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle -import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.FreeIR +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.RepositoryIR +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.render import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.BuildFilePrinter import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter 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 6f3342594a2..f18d1e2fc1b 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 @@ -5,31 +5,30 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators + 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.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.settings.ModuleConfiguratorSetting import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSettingReference +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.kotlinVersionKind import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.AndroidConfigIR import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase +import org.jetbrains.kotlin.tools.projectWizard.plugins.AndroidPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurationData import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem import org.jetbrains.kotlin.tools.projectWizard.settings.JavaPackage import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository +import org.jetbrains.kotlin.tools.projectWizard.settings.javaPackage import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptor diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidSinglePlatformModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidSinglePlatformModuleConfigurator.kt index 81eb211bcee..f89c1551464 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidSinglePlatformModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidSinglePlatformModuleConfigurator.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.context.WritingContext + + import org.jetbrains.kotlin.tools.projectWizard.core.* 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/IOSModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/IOSModuleConfigurator.kt index 41b68ad9481..09a61ab2120 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/IOSModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/IOSModuleConfigurator.kt @@ -5,15 +5,12 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators -import org.jetbrains.kotlin.tools.projectWizard.core.TaskResult -import org.jetbrains.kotlin.tools.projectWizard.core.asPath -import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext +import org.jetbrains.kotlin.tools.projectWizard.core.* + import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurationData import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind -import org.jetbrains.kotlin.tools.projectWizard.core.buildList -import org.jetbrains.kotlin.tools.projectWizard.core.div import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptor import java.nio.file.Path diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt index 75b90e2b6ba..15c4820df1d 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt @@ -5,7 +5,8 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext + +import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.buildList 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/ModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt index 46474db205f..c304680824e 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 @@ -1,12 +1,9 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators + import org.jetbrains.kotlin.tools.projectWizard.Identificator import org.jetbrains.kotlin.tools.projectWizard.SettingsOwner -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.cached -import org.jetbrains.kotlin.tools.projectWizard.core.context.SettingsWritingContext 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 @@ -16,7 +13,8 @@ import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurationData import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.correspondingStdlib import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem -import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.* +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.version.Version import java.nio.file.Path import kotlin.properties.ReadOnlyProperty 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 f95e57e73fb..7820fd21b0d 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 @@ -5,7 +5,8 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext + +import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext 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 diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/NativeTargetConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/NativeTargetConfigurator.kt index 92071c9fc65..b03fb611477 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/NativeTargetConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/NativeTargetConfigurator.kt @@ -1,7 +1,8 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators import kotlinx.collections.immutable.toPersistentList -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext + import org.jetbrains.kotlin.tools.projectWizard.core.buildList import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.CreateGradleValueIR diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt index 48ec4cf33d6..5cd58ef0b04 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt @@ -1,7 +1,8 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators import kotlinx.collections.immutable.toPersistentList -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext + import org.jetbrains.kotlin.tools.projectWizard.core.buildList import org.jetbrains.kotlin.tools.projectWizard.core.buildPersistenceList import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR 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 d518109864d..a3953b9be7f 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,21 +1,22 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators -import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext + +import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.buildList 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 +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.* +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.maven.MavenPropertyIR import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase +import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType +import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle 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.DisplayableSettingItem import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind -import org.jetbrains.kotlin.tools.projectWizard.core.buildList -import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.* -import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.maven.MavenPropertyIR -import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType -import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle interface JvmModuleConfigurator : ModuleConfiguratorWithTests { companion object : ModuleConfiguratorSettings() { 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 c7a511767ec..1ff4cb6b2ca 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 @@ -1,7 +1,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins -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.settings.reference 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 f1f38ee5dd9..d97edffa8c0 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 @@ -1,7 +1,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem -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.settings.reference 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 91f3beb20fd..288506383b6 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 @@ -1,6 +1,6 @@ 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.settings.reference import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt index 8cfc08f8bf3..28dcdab3b20 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt @@ -1,15 +1,15 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin import org.jetbrains.kotlin.tools.projectWizard.Versions -import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext 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.core.entity.ValidationResult +import org.jetbrains.kotlin.tools.projectWizard.core.entity.fold import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderService -import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderServiceImpl import org.jetbrains.kotlin.tools.projectWizard.core.service.kotlinVersionKind -import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildFileIR +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.RepositoryIR +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.withIrs import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt index c8af9db701f..8b2da44abe2 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt @@ -2,8 +2,8 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toPersistentList -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.ir.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.* diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/printer/GradlePrinter.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/printer/GradlePrinter.kt index 82d3af414f1..5626e047135 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/printer/GradlePrinter.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/printer/GradlePrinter.kt @@ -1,9 +1,6 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.printer import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR -import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.BodyIR -import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.isEmpty -import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.render class GradlePrinter(val dsl: GradleDsl, override val indent: Int = 4) : BuildFilePrinter() { fun inBrackets(inner: () -> Unit) { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/projectTemplates/ProjectTemplatesPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/projectTemplates/ProjectTemplatesPlugin.kt index a18999b3e6c..8c555d53f5d 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/projectTemplates/ProjectTemplatesPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/projectTemplates/ProjectTemplatesPlugin.kt @@ -1,7 +1,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.projectTemplates import org.jetbrains.kotlin.tools.projectWizard.core.* -import org.jetbrains.kotlin.tools.projectWizard.core.context.SettingsWritingContext + import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.withAllSubModules diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/ConsoleJvmApplicationTemplatePlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/ConsoleJvmApplicationTemplatePlugin.kt index 0cfbb799571..2a58f0c1711 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/ConsoleJvmApplicationTemplatePlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/ConsoleJvmApplicationTemplatePlugin.kt @@ -1,7 +1,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.templates -import org.jetbrains.kotlin.tools.projectWizard.core.* -import org.jetbrains.kotlin.tools.projectWizard.templates.* +import org.jetbrains.kotlin.tools.projectWizard.core.Context +import org.jetbrains.kotlin.tools.projectWizard.templates.ConsoleJvmApplicationTemplate class ConsoleJvmApplicationTemplatePlugin(context: Context) : TemplatePlugin(context) { val addTemplate by addTemplateTask( diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/JsTemplatesPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/JsTemplatesPlugin.kt index cddd4686b2c..66eafb52e35 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/JsTemplatesPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/JsTemplatesPlugin.kt @@ -1,7 +1,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.templates -import org.jetbrains.kotlin.tools.projectWizard.core.* -import org.jetbrains.kotlin.tools.projectWizard.templates.* +import org.jetbrains.kotlin.tools.projectWizard.core.Context +import org.jetbrains.kotlin.tools.projectWizard.templates.SimpleJsClientTemplate class JsTemplatesPlugin(context: Context) : TemplatePlugin(context) { val addTemplate by addTemplateTask(SimpleJsClientTemplate()) diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/KtorTemplatesPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/KtorTemplatesPlugin.kt index 4926c4b1a55..f0b196423df 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/KtorTemplatesPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/KtorTemplatesPlugin.kt @@ -1,7 +1,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.templates -import org.jetbrains.kotlin.tools.projectWizard.core.* -import org.jetbrains.kotlin.tools.projectWizard.templates.* +import org.jetbrains.kotlin.tools.projectWizard.core.Context +import org.jetbrains.kotlin.tools.projectWizard.templates.KtorServerTemplate class KtorTemplatesPlugin(context: Context) : TemplatePlugin(context) { val addTemplate by addTemplateTask(KtorServerTemplate()) diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatePlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatePlugin.kt index a746e435c78..15d870b08e4 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatePlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatePlugin.kt @@ -2,8 +2,8 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.templates import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.core.Plugin -import org.jetbrains.kotlin.tools.projectWizard.templates.Template import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase +import org.jetbrains.kotlin.tools.projectWizard.templates.Template abstract class TemplatePlugin(context: Context) : Plugin(context) { fun addTemplateTask(template: Template) = pipelineTask(GenerationPhase.PREPARE) { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt index 2646b6332cc..d453be1aca7 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt @@ -1,6 +1,6 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.templates -import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext + import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.Defaults.KOTLIN_DIR import org.jetbrains.kotlin.tools.projectWizard.core.Defaults.RESOURCES_DIR 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 7635ad51909..c86a4d6b252 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 @@ -4,7 +4,7 @@ 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.* -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 diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Sourceset.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Sourceset.kt index 0a4c48f003d..663265d0bd6 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Sourceset.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Sourceset.kt @@ -4,7 +4,7 @@ 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.* -import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext + import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildFileIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.ModuleIR import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/ConsoleJvmApplicationTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/ConsoleJvmApplicationTemplate.kt index 84e8ffa2b46..b735dcb404e 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/ConsoleJvmApplicationTemplate.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/ConsoleJvmApplicationTemplate.kt @@ -1,11 +1,13 @@ package org.jetbrains.kotlin.tools.projectWizard.templates -import org.jetbrains.kotlin.tools.projectWizard.core.buildList -import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext +import org.jetbrains.kotlin.tools.projectWizard.core.WritingContext import org.jetbrains.kotlin.tools.projectWizard.core.asPath -import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* +import org.jetbrains.kotlin.tools.projectWizard.core.buildList +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.ModuleIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.TargetConfigurationIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.addWithJavaIntoJvmTarget +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.runTaskIrs import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType 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 1278ff5aa4f..abc5a55a003 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 @@ -5,7 +5,8 @@ package org.jetbrains.kotlin.tools.projectWizard.templates -import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext + +import org.jetbrains.kotlin.tools.projectWizard.core.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.settings.TemplateSetting diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/NativeConsoleApplicationTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/NativeConsoleApplicationTemplate.kt index 837949c64bb..69efa36bace 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/NativeConsoleApplicationTemplate.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/NativeConsoleApplicationTemplate.kt @@ -5,7 +5,8 @@ package org.jetbrains.kotlin.tools.projectWizard.templates -import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext + +import org.jetbrains.kotlin.tools.projectWizard.core.WritingContext import org.jetbrains.kotlin.tools.projectWizard.core.asPath import org.jetbrains.kotlin.tools.projectWizard.core.buildList import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.ModuleIR 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 d8d993fd829..cf60f0d9b0b 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 @@ -5,13 +5,11 @@ package org.jetbrains.kotlin.tools.projectWizard.templates + import org.jetbrains.kotlin.tools.projectWizard.WizardGradleRunConfiguration 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.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.* import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.DefaultTargetConfigurationIR 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 78baf29228c..01821f15eb8 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 @@ -3,10 +3,10 @@ package org.jetbrains.kotlin.tools.projectWizard.templates import org.jetbrains.kotlin.tools.projectWizard.Identificator import org.jetbrains.kotlin.tools.projectWizard.SettingsOwner 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.context.SettingsWritingContext + 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 diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/TemplateEngine.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/TemplateEngine.kt index c381c6be8d5..a51febc3494 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/TemplateEngine.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/TemplateEngine.kt @@ -6,7 +6,8 @@ import org.apache.velocity.runtime.RuntimeConstants import org.apache.velocity.runtime.RuntimeServices import org.apache.velocity.runtime.log.LogChute import org.jetbrains.kotlin.tools.projectWizard.core.TaskResult -import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext +import org.jetbrains.kotlin.tools.projectWizard.core.WritingContext + import org.jetbrains.kotlin.tools.projectWizard.core.div import org.jetbrains.kotlin.tools.projectWizard.core.service.FileFormattingService import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService 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 096fae5dedb..1541fc6fd53 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 @@ -1,65 +1,58 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard -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.core.service.WizardService +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingSerializer +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.SettingSavingWizardService +import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardService import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.withAllSubModules -abstract class Wizard(createPlugins: PluginsCreator, val servicesManager: ServicesManager, private val isUnitTestMode: Boolean) { - val context = Context(createPlugins, EventManager()) - val valuesReadingContext = ReadingContext(context, servicesManager, isUnitTestMode) - private val settingsWritingContext = SettingsWritingContext(context, servicesManager, isUnitTestMode) - protected val plugins = context.plugins - protected val pluginSettings = plugins.flatMap { it.declaredSettings }.distinctBy { it.path } +abstract class Wizard(createPlugins: PluginsCreator, servicesManager: ServicesManager, isUnitTestMode: Boolean) { + val context = Context(createPlugins, servicesManager, isUnitTestMode) - inline fun settingValue(setting: PluginSettingReference>): V = - with(valuesReadingContext) { setting.settingValue } - - private fun Context.checkAllRequiredSettingPresent(phases: Set): TaskResult = + private fun checkAllRequiredSettingPresent(phases: Set): TaskResult = context.read { getUnspecifiedSettings(phases).let { unspecifiedSettings -> if (unspecifiedSettings.isEmpty()) UNIT_SUCCESS else Failure(RequiredSettingsIsNotPresentError(unspecifiedSettings.map { it.path })) } - + } private fun initNonPluginDefaultValues() { - with(settingsWritingContext) { - KotlinPlugin::modules.reference.notRequiredSettingValue?.withAllSubModules(includeSourcesets = true)?.forEach { module -> - with(module) { initDefaultValuesForSettings() } - } + context.writeSettings { + KotlinPlugin::modules.reference.notRequiredSettingValue + ?.withAllSubModules(includeSourcesets = true) + ?.forEach { module -> + with(module) { initDefaultValuesForSettings() } + } } } protected fun initPluginSettingsDefaultValues() { - with(settingsWritingContext) { + context.writeSettings { for (setting in pluginSettings) { setting.reference.setSettingValueToItsDefaultIfItIsNotSetValue() } } } - @Suppress("UNUSED_PARAMETER") - fun ReadingContext.validate(phases: Set): TaskResult = - context.settingContext.allPluginSettings.map { setting -> - val value = context.settingContext.pluginSettingValue(setting) ?: return@map ValidationResult.OK + fun validate(phases: Set): TaskResult = context.read { + pluginSettings.map { setting -> + val value = setting.reference.notRequiredSettingValue ?: return@map ValidationResult.OK if (setting.neededAtPhase in phases && setting.isActive(this)) (setting.validator as SettingValidator).validate(this, value) else ValidationResult.OK - }.fold(ValidationResult.OK, ValidationResult::and).toResult() + }.fold().toResult() + } - private fun ReadingContext.saveSettingValues(phases: Set) { + private fun saveSettingValues(phases: Set) = context.read { for (setting in pluginSettings) { if (setting.neededAtPhase !in phases) continue if (!setting.isSavable) continue - if (!setting.isAvailable(valuesReadingContext)) continue + if (!setting.isAvailable(this)) continue val serializer = setting.type.serializer as? SettingSerializer.Serializer ?: continue service().saveSettingValue( setting.path, @@ -75,21 +68,23 @@ abstract class Wizard(createPlugins: PluginsCreator, val servicesManager: Servic ): TaskResult = computeM { initPluginSettingsDefaultValues() initNonPluginDefaultValues() - context.checkAllRequiredSettingPresent(phases).ensure() - val taskRunningContext = WritingContext(context, servicesManager.withServices(services), isUnitTestMode) - taskRunningContext.validate(phases).ensure() - taskRunningContext.saveSettingValues(phases) + checkAllRequiredSettingPresent(phases).ensure() + validate(phases).ensure() + saveSettingValues(phases) val (tasksSorted) = context.sortTasks().map { tasks -> tasks.groupBy { it.phase }.toList().sortedBy { it.first }.flatMap { it.second } } - tasksSorted - // We should take only one task of each type as all tasks with the same path are considered to be the same - .distinctBy { it.path } - .asSequence() - .filter { task -> task.phase in phases } - .filter { task -> task.isAvailable(taskRunningContext) } - .map { task -> onTaskExecuting(task); task.action(taskRunningContext) } - .sequenceFailFirst() - .ignore() + + context.withAdditionalServices(services).write { + tasksSorted + // We should take only one task of each type as all tasks with the same path are considered to be the same + .distinctBy { it.path } + .asSequence() + .filter { task -> task.phase in phases } + .filter { task -> task.isAvailable(this) } + .map { task -> onTaskExecuting(task); task.action(this) } + .sequenceFailFirst() + .ignore() + } } } \ No newline at end of file