Wizard: all context operations to read/write operations
This commit is contained in:
-22
@@ -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
|
||||
}
|
||||
+8
-7
@@ -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 <V : Any, T : SettingType<V>> setting(reference: SettingReference<V, T>) =
|
||||
object : ReadWriteProperty<Any?, V?> {
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+6
-4
@@ -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)
|
||||
|
||||
-1
@@ -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
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
-1
@@ -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
|
||||
|
||||
+13
-10
@@ -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 <T> read(reader: ReadingContext.() -> T): T =
|
||||
reader(ideContext)
|
||||
context.read(reader)
|
||||
|
||||
protected fun <T> write(writer: WritingContext.() -> T): T =
|
||||
writer(ideContext)
|
||||
context.write(writer)
|
||||
|
||||
protected fun <T> modify(modifier: SettingsWritingContext.() -> T): T =
|
||||
modifier(ideContext)
|
||||
context.writeSettings(modifier)
|
||||
|
||||
open fun onValueUpdated(reference: SettingReference<*, *>?) {}
|
||||
}
|
||||
|
||||
-1
@@ -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
|
||||
|
||||
+5
-5
@@ -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()
|
||||
|
||||
|
||||
-4
@@ -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<V>(initialValues: List<V> = emptyList()) : JBList<V>() {
|
||||
protected abstract fun ColoredListCellRenderer<V>.render(value: V)
|
||||
|
||||
+4
-4
@@ -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) {
|
||||
|
||||
+3
-3
@@ -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)
|
||||
context: Context
|
||||
) : DynamicComponent(context)
|
||||
+3
-4
@@ -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<Boolean>? = null,
|
||||
onValueUpdate: (Boolean) -> Unit = {}
|
||||
) : UIComponent<Boolean>(
|
||||
ideContext,
|
||||
context,
|
||||
labelText,
|
||||
validator,
|
||||
onValueUpdate
|
||||
|
||||
+3
-4
@@ -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<T : DisplayableSettingItem>(
|
||||
ideContext: IdeContext,
|
||||
context: Context,
|
||||
initialValues: List<T> = emptyList(),
|
||||
labelText: String? = null,
|
||||
private val filter: (T) -> Boolean = { true },
|
||||
@@ -24,7 +23,7 @@ class DropDownComponent<T : DisplayableSettingItem>(
|
||||
private val iconProvider: (T) -> Icon? = { null },
|
||||
onValueUpdate: (T) -> Unit = {}
|
||||
) : UIComponent<T>(
|
||||
ideContext,
|
||||
context,
|
||||
labelText,
|
||||
validator,
|
||||
onValueUpdate
|
||||
|
||||
+3
-4
@@ -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<Path>? = null,
|
||||
onValueUpdate: (Path) -> Unit = {}
|
||||
) : UIComponent<Path>(
|
||||
ideContext,
|
||||
context,
|
||||
labelText,
|
||||
validator,
|
||||
onValueUpdate
|
||||
|
||||
+3
-4
@@ -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<String>? = null,
|
||||
onValueUpdate: (String) -> Unit = {}
|
||||
) : UIComponent<String>(
|
||||
ideContext,
|
||||
context,
|
||||
labelText,
|
||||
validator,
|
||||
onValueUpdate
|
||||
|
||||
+7
-5
@@ -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<V : Any>(
|
||||
ideContext: IdeContext,
|
||||
context: Context,
|
||||
labelText: String? = null,
|
||||
private val validator: SettingValidator<V>? = 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())
|
||||
|
||||
+4
-4
@@ -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<BuildSystemType, DropDownSettingType<BuildSystemType>>(
|
||||
BuildSystemPlugin::type.reference,
|
||||
ideContext
|
||||
context
|
||||
) {
|
||||
override val uiComponent: DropDownComponent<BuildSystemType> = DropDownComponent(
|
||||
ideContext,
|
||||
context,
|
||||
setting.type.values,
|
||||
labelText = "Build System",
|
||||
filter = { value -> read { setting.type.filter(this, reference, value) } },
|
||||
|
||||
+8
-25
@@ -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<Module> {
|
||||
val modules = mutableListOf<Module>()
|
||||
|
||||
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) {
|
||||
|
||||
+3
-3
@@ -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<ProjectTemplate, DropDownSettingType<ProjectTemplate>>(
|
||||
ProjectTemplatesPlugin::template.reference,
|
||||
ideContext
|
||||
context
|
||||
) {
|
||||
override val validationIndicator: ValidationIndicator? get() = null
|
||||
|
||||
|
||||
+13
-16
@@ -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()
|
||||
|
||||
+9
-10
@@ -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 {
|
||||
|
||||
+6
-7
@@ -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<Module>, 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<Module>, 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<Module>, parent: JComponent) : Di
|
||||
get() = list.selectedValue
|
||||
|
||||
init {
|
||||
title = KotlinNewProjectWizardBundle.message("editor.choose.modules")
|
||||
title = "Choose Modules"
|
||||
init()
|
||||
}
|
||||
}
|
||||
|
||||
+4
-5
@@ -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
|
||||
|
||||
+21
-23
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
+4
-8
@@ -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<ModuleConfigurator>(
|
||||
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<DisplayableSettingItem>(
|
||||
KotlinNewProjectWizardBundle.message("step.target").takeIf { showTitle },
|
||||
"Target".takeIf { showTitle },
|
||||
targetConfiguratorGroup.subItems.filter { it.needToShow() }
|
||||
) {
|
||||
override fun getIconFor(value: DisplayableSettingItem): Icon? = when (value) {
|
||||
|
||||
+5
-5
@@ -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<List<Module>, ListSettingType<Module>>(KotlinPlugin::modules.reference, ideContext) {
|
||||
) : SettingComponent<List<Module>, ListSettingType<Module>>(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()
|
||||
|
||||
+7
-2
@@ -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
|
||||
|
||||
-1
@@ -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 {
|
||||
|
||||
+3
-4
@@ -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<List<Module>?>,
|
||||
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() }
|
||||
}
|
||||
}
|
||||
|
||||
+27
-24
@@ -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 <V : Any, T : SettingType<V>> create(
|
||||
setting: SettingReference<V, T>,
|
||||
ideContext: IdeContext
|
||||
context: Context
|
||||
): SettingComponent<V, T> = when (setting.type) {
|
||||
VersionSettingType::class ->
|
||||
VersionSettingComponent(
|
||||
setting as SettingReference<Version, VersionSettingType>,
|
||||
ideContext
|
||||
context
|
||||
) as SettingComponent<V, T>
|
||||
BooleanSettingType::class ->
|
||||
BooleanSettingComponent(
|
||||
setting as SettingReference<Boolean, BooleanSettingType>,
|
||||
ideContext
|
||||
context
|
||||
) as SettingComponent<V, T>
|
||||
DropDownSettingType::class ->
|
||||
DropdownSettingComponent(
|
||||
setting as SettingReference<DisplayableSettingItem, DropDownSettingType<DisplayableSettingItem>>,
|
||||
ideContext
|
||||
context
|
||||
) as SettingComponent<V, T>
|
||||
StringSettingType::class ->
|
||||
StringSettingComponent(
|
||||
setting as SettingReference<String, StringSettingType>,
|
||||
ideContext
|
||||
context
|
||||
) as SettingComponent<V, T>
|
||||
PathSettingType::class ->
|
||||
PathSettingComponent(
|
||||
setting as SettingReference<Path, PathSettingType>,
|
||||
ideContext
|
||||
context
|
||||
) as SettingComponent<V, T>
|
||||
else -> TODO(setting.type.qualifiedName!!)
|
||||
}
|
||||
@@ -53,8 +56,8 @@ object DefaultSettingComponent {
|
||||
|
||||
class VersionSettingComponent(
|
||||
reference: SettingReference<Version, VersionSettingType>,
|
||||
ideContext: IdeContext
|
||||
) : SettingComponent<Version, VersionSettingType>(reference, ideContext) {
|
||||
context: Context
|
||||
) : SettingComponent<Version, VersionSettingType>(reference, context) {
|
||||
private val settingLabel = label(setting.title)
|
||||
private val comboBox = ComboBox<Version>().apply {
|
||||
addItemListener { e ->
|
||||
@@ -91,17 +94,17 @@ class VersionSettingComponent(
|
||||
|
||||
class DropdownSettingComponent(
|
||||
reference: SettingReference<DisplayableSettingItem, DropDownSettingType<DisplayableSettingItem>>,
|
||||
ideContext: IdeContext
|
||||
context: Context
|
||||
) : UIComponentDelegatingSettingComponent<DisplayableSettingItem, DropDownSettingType<DisplayableSettingItem>>(
|
||||
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<Boolean, BooleanSettingType>,
|
||||
ideContext: IdeContext
|
||||
context: Context
|
||||
) : UIComponentDelegatingSettingComponent<Boolean, BooleanSettingType>(
|
||||
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<String, StringSettingType>,
|
||||
ideContext: IdeContext,
|
||||
context: Context,
|
||||
showLabel: Boolean = true
|
||||
) : UIComponentDelegatingSettingComponent<String, StringSettingType>(
|
||||
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<Path, PathSettingType>,
|
||||
ideContext: IdeContext
|
||||
context: Context
|
||||
) : UIComponentDelegatingSettingComponent<Path, PathSettingType>(
|
||||
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 }
|
||||
|
||||
+3
-3
@@ -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<V : Any, T : SettingType<V>>(
|
||||
val reference: SettingReference<V, T>,
|
||||
ideContext: IdeContext
|
||||
) : DynamicComponent(ideContext), Displayable, FocusableComponent {
|
||||
context: Context
|
||||
) : DynamicComponent(context), Displayable, FocusableComponent {
|
||||
var value: V?
|
||||
get() = reference.value
|
||||
set(value) {
|
||||
|
||||
+4
-4
@@ -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<SettingReference<*, *>>,
|
||||
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<SettingComponent<*, *>> = 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) }
|
||||
}
|
||||
|
||||
+3
-3
@@ -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<V : Any, T : SettingType<V>>(
|
||||
reference: SettingReference<V, T>,
|
||||
ideContext: IdeContext
|
||||
) : SettingComponent<V, T>(reference, ideContext) {
|
||||
context: Context
|
||||
) : SettingComponent<V, T>(reference, context) {
|
||||
abstract val uiComponent: UIComponent<V>
|
||||
|
||||
// As there is one in UIComponent
|
||||
|
||||
+4
-1
@@ -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
|
||||
|
||||
-2
@@ -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() {
|
||||
|
||||
-2
@@ -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 {
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+2
-5
@@ -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<WizardService>,
|
||||
phases: Set<GenerationPhase>,
|
||||
onTaskExecuting: (PipelineTask) -> Unit
|
||||
): TaskResult<Unit> = 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)
|
||||
}
|
||||
|
||||
+18
-20
@@ -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<WizardService>,
|
||||
phases: Set<GenerationPhase>,
|
||||
onTaskExecuting: (PipelineTask) -> Unit
|
||||
): TaskResult<Unit> =
|
||||
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<Unit> = 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) }
|
||||
}
|
||||
}
|
||||
|
||||
-2
@@ -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 }
|
||||
|
||||
+202
-25
@@ -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<Plugin>
|
||||
|
||||
private val settingWritingContext = SettingsWritingContext()
|
||||
|
||||
private val pluginSettings by lazy(LazyThreadSafetyMode.NONE) {
|
||||
plugins.flatMap(Plugin::declaredSettings).distinctBy(PluginSetting<*, *>::path)
|
||||
}
|
||||
|
||||
fun <T> read(reader: ReadingContext.() -> T): T =
|
||||
settingWritingContext.reader()
|
||||
|
||||
fun <T> write(writer: WritingContext.() -> T): T =
|
||||
settingWritingContext.writer()
|
||||
|
||||
fun <T> 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<WizardService>) =
|
||||
Context(
|
||||
servicesManager.withAdditionalServices(services),
|
||||
isUnitTestMode,
|
||||
settingContext,
|
||||
propertyContext,
|
||||
taskContext
|
||||
).also {
|
||||
it.plugins = plugins
|
||||
}
|
||||
|
||||
|
||||
fun <V : Any, T : SettingType<V>> pluginSettingDelegate(
|
||||
create: (path: String) -> SettingBuilder<V, T>
|
||||
): ReadOnlyProperty<Any, PluginSetting<V, T>> =
|
||||
settingContext.settingDelegate(create)
|
||||
|
||||
fun <T : Any> propertyDelegate(
|
||||
init: Property.Builder<T>.() -> 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 <A, B : Any> task1Delegate(
|
||||
init: Task1.Builder<A, B>.() -> Unit
|
||||
) = entityDelegate(taskContext) { name ->
|
||||
Task1.Builder<A, B>(name).apply(init).build()
|
||||
}
|
||||
|
||||
|
||||
private fun initPlugin(plugin: Plugin) {
|
||||
for (entityReference in plugin::class.memberProperties) {
|
||||
val type = entityReference.returnType.classifier.safeAs<KClass<*>>() ?: 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<GenerationPhase>): List<AnySetting> {
|
||||
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<PipelineTask>
|
||||
get() = plugins
|
||||
.flatMap { it.declaredTasks.filterIsInstance<PipelineTask>() }
|
||||
|
||||
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<PipelineTask, List<PipelineTask>>
|
||||
get() {
|
||||
@@ -67,8 +129,123 @@ class Context(private val pluginsCreator: PluginsCreator, val eventManager: Even
|
||||
}
|
||||
}
|
||||
|
||||
fun copy() = Context(pluginsCreator, eventManager)
|
||||
|
||||
fun sortTasks(): TaskResult<List<PipelineTask>> =
|
||||
TaskSorter().sort(pipelineLineTasks, dependencyList)
|
||||
|
||||
|
||||
open inner class ReadingContext {
|
||||
val plugins: List<Plugin>
|
||||
get() = this@Context.plugins
|
||||
|
||||
val pluginSettings: List<PluginSetting<*, *>>
|
||||
get() = this@Context.pluginSettings
|
||||
|
||||
val isUnitTestMode: Boolean
|
||||
get() = this@Context.isUnitTestMode
|
||||
|
||||
inline fun <reified S : WizardService> service(noinline filter: (S) -> Boolean = { true }): S =
|
||||
serviceByClass(S::class, filter)
|
||||
|
||||
|
||||
fun <S : WizardService> serviceByClass(klass: KClass<S>, filter: (S) -> Boolean = { true }): S =
|
||||
servicesManager.serviceByClass(klass, filter) ?: error("Service ${klass.simpleName} was not found")
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val <T : Any> PropertyReference<T>.propertyValue: T
|
||||
get() = propertyContext[this] as T
|
||||
|
||||
val <V : Any, T : SettingType<V>> SettingReference<V, T>.settingValue: V
|
||||
get() = settingContext[this] ?: error("No value is present for setting `$this`")
|
||||
|
||||
inline val <reified V : Any> KProperty1<out Plugin, PluginSetting<V, SettingType<V>>>.settingValue: V
|
||||
get() = reference.settingValue
|
||||
|
||||
inline fun <reified V : Any> KProperty1<out Plugin, PluginSetting<V, SettingType<V>>>.settingValue(): V =
|
||||
this.reference.settingValue
|
||||
|
||||
fun <V : Any, T : SettingType<V>> SettingReference<V, T>.settingValue(): V =
|
||||
settingContext[this] ?: error("No value is present for setting `$this`")
|
||||
|
||||
val <V : Any, T : SettingType<V>> SettingReference<V, T>.notRequiredSettingValue: V?
|
||||
get() = settingContext[this]
|
||||
|
||||
fun <V : Any, T : SettingType<V>> SettingReference<V, T>.notRequiredSettingValue(): V? =
|
||||
settingContext[this]
|
||||
|
||||
val <V : Any, T : SettingType<V>> PluginSettingReference<V, T>.pluginSetting: Setting<V, T>
|
||||
get() = settingContext.getPluginSetting(this)
|
||||
|
||||
private fun <V : Any> Setting<V, SettingType<V>>.getSavedValueForSetting(): V? {
|
||||
if (!isSavable || this !is PluginSetting<*, *>) return null
|
||||
val serializer = type.serializer.safeAs<SettingSerializer.Serializer<V>>() ?: return null
|
||||
val savedValue = service<SettingSavingWizardService>().getSettingValue(path) ?: return null
|
||||
return serializer.fromString(savedValue)
|
||||
}
|
||||
|
||||
val <V : Any> SettingReference<V, SettingType<V>>.savedOrDefaultValue: V?
|
||||
get() = setting.getSavedValueForSetting() ?: when (val defaultValue = setting.defaultValue) {
|
||||
is SettingDefaultValue.Value -> defaultValue.value
|
||||
is SettingDefaultValue.Dynamic<V> -> defaultValue.getter(this@ReadingContext, this)
|
||||
null -> null
|
||||
}
|
||||
|
||||
val <V : Any, T : SettingType<V>> SettingReference<V, T>.setting: Setting<V, T>
|
||||
get() = with(this) { getSetting() }
|
||||
}
|
||||
|
||||
open inner class WritingContext : ReadingContext() {
|
||||
val eventManager: EventManager
|
||||
get() = settingContext.eventManager
|
||||
|
||||
fun <A, B : Any> Task1Reference<A, B>.execute(value: A): TaskResult<B> {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val task = taskContext.getEntity(this) as Task1<A, B>
|
||||
return task.action(this@WritingContext, value)
|
||||
}
|
||||
|
||||
fun <T : Any> PropertyReference<T>.update(
|
||||
updater: suspend ComputeContext<*>.(T) -> TaskResult<T>
|
||||
): TaskResult<Unit> = compute {
|
||||
val (newValue) = updater(propertyValue)
|
||||
propertyContext[this@update] = newValue
|
||||
}
|
||||
|
||||
fun <T : Any> PropertyReference<List<T>>.addValues(
|
||||
vararg values: T
|
||||
): TaskResult<Unit> = update { oldValues -> success(oldValues + values) }
|
||||
|
||||
fun <T : Any> PropertyReference<List<T>>.addValues(
|
||||
values: List<T>
|
||||
): TaskResult<Unit> = update { oldValues -> success(oldValues + values) }
|
||||
}
|
||||
|
||||
open inner class SettingsWritingContext : WritingContext() {
|
||||
fun <V : Any, T : SettingType<V>> SettingReference<V, T>.setValue(newValue: V) {
|
||||
settingContext[this] = newValue
|
||||
}
|
||||
|
||||
fun <V : Any, T : SettingType<V>> SettingReference<V, T>.setSettingValueToItsDefaultIfItIsNotSetValue() {
|
||||
val defaultValue = savedOrDefaultValue ?: return
|
||||
if (notRequiredSettingValue == null) {
|
||||
setValue(defaultValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun ReadingContext.getUnspecifiedSettings(phases: Set<GenerationPhase>): List<AnySetting> {
|
||||
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
|
||||
+9
-21
@@ -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 <V : Any, T : SettingType<V>> settingDelegate(
|
||||
create: (path: String) -> SettingBuilder<V, T>
|
||||
): ReadOnlyProperty<Any, PluginSetting<V, T>> = object : ReadOnlyProperty<Any, PluginSetting<V, T>> {
|
||||
override fun getValue(thisRef: Any, property: KProperty<*>): PluginSetting<V, T> {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val reference = property as PluginSettingPropertyReference<V, T>
|
||||
context.settingContext.getPluginSetting(reference)?.let { return it }
|
||||
val setting =
|
||||
PluginSetting(create(reference.path).buildInternal())
|
||||
context.settingContext.setPluginSetting(reference, setting)
|
||||
return setting
|
||||
}
|
||||
}
|
||||
): ReadOnlyProperty<Any, PluginSetting<V, T>> = 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<PluginSetting<*, *>>().toSet()
|
||||
val declaredTasks get() = entitiesOfType<Task>()
|
||||
|
||||
|
||||
private inline fun <reified E : Entity> entitiesOfType() =
|
||||
reference.memberProperties.filter { kProperty ->
|
||||
kProperty.returnType.classifier.safeAs<KClass<*>>()?.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 <A, B : Any> task1(init: Task1.Builder<A, B>.() -> Unit) =
|
||||
Task1.delegate(context.taskContext, init)
|
||||
context.task1Delegate(init)
|
||||
|
||||
fun <T : Any> property(defaultValue: T, init: Property.Builder<T>.() -> Unit = {}) =
|
||||
propertyDelegate(context.propertyContext, init, defaultValue)
|
||||
context.propertyDelegate(init, defaultValue)
|
||||
|
||||
fun <T : Any> listProperty(vararg defaultValues: T, init: Property.Builder<List<T>>.() -> 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<KClass<Plugin>>()
|
||||
?.isSubclassOf(Plugin::class) == true
|
||||
}?.classifier
|
||||
supertype.classifier?.safeAs<KClass<Plugin>>()
|
||||
?.isSubclassOf(Plugin::class) == true
|
||||
}?.classifier
|
||||
?.safeAs<KClass<Plugin>>()
|
||||
?.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(".")
|
||||
|
||||
|
||||
-8
@@ -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<out T : Any>
|
||||
data class Success<T : Any>(val value: T) : TaskResult<T>()
|
||||
|
||||
-74
@@ -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 <reified S : WizardService> service(noinline filter: (S) -> Boolean = { true }): S =
|
||||
serviceByClass(S::class, filter)
|
||||
|
||||
fun <S : WizardService> serviceByClass(klass: KClass<S>, filter: (S) -> Boolean = { true }): S =
|
||||
servicesManager.serviceByClass(klass, filter) ?: error("Service ${klass.simpleName} was not found")
|
||||
|
||||
inline val <reified T : Any> PropertyReference<T>.propertyValue: T
|
||||
get() = `access$context`.propertyContext[this] as T
|
||||
|
||||
inline val <reified V : Any, T : SettingType<V>> SettingReference<V, T>.settingValue: V
|
||||
get() = `access$context`.settingContext[this] ?: error("No value is present for setting `$this`")
|
||||
|
||||
inline val <reified V : Any> KProperty1<out Plugin, PluginSetting<V, SettingType<V>>>.settingValue: V
|
||||
get() = reference.settingValue
|
||||
|
||||
inline fun <reified V : Any> KProperty1<out Plugin, PluginSetting<V, SettingType<V>>>.settingValue(): V =
|
||||
this.reference.settingValue
|
||||
|
||||
inline fun <reified V : Any, T : SettingType<V>> SettingReference<V, T>.settingValue(): V =
|
||||
`access$context`.settingContext[this] ?: error("No value is present for setting `$this`")
|
||||
|
||||
val <V : Any, T : SettingType<V>> SettingReference<V, T>.notRequiredSettingValue: V?
|
||||
get() = context.settingContext[this]
|
||||
|
||||
fun <V : Any, T : SettingType<V>> SettingReference<V, T>.notRequiredSettingValue(): V? =
|
||||
context.settingContext[this]
|
||||
|
||||
val <V : Any, T : SettingType<V>> PluginSettingReference<V, T>.pluginSetting: Setting<V, T>
|
||||
get() = context.settingContext.getPluginSetting(this)
|
||||
|
||||
private fun <V : Any> Setting<V, SettingType<V>>.getSavedValueForSetting(): V? {
|
||||
if (!isSavable || this !is PluginSetting<*, *>) return null
|
||||
val serializer = type.serializer.safeAs<SettingSerializer.Serializer<V>>() ?: return null
|
||||
val savedValue = service<SettingSavingWizardService>().getSettingValue(path) ?: return null
|
||||
return serializer.fromString(savedValue)
|
||||
}
|
||||
|
||||
val <V : Any> SettingReference<V, SettingType<V>>.savedOrDefaultValue: V?
|
||||
get() = setting.getSavedValueForSetting() ?: when (val defaultValue = setting.defaultValue) {
|
||||
is SettingDefaultValue.Value -> defaultValue.value
|
||||
is SettingDefaultValue.Dynamic<V> -> defaultValue.getter(this@ReadingContext, this)
|
||||
null -> null
|
||||
}
|
||||
|
||||
val <V : Any, T : SettingType<V>> SettingReference<V, T>.setting: Setting<V, T>
|
||||
get() = with(this) { getSetting() }
|
||||
|
||||
@PublishedApi
|
||||
internal val `access$context`: Context
|
||||
get() = context
|
||||
}
|
||||
-31
@@ -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 <V : Any, T : SettingType<V>> SettingReference<V, T>.setValue(newValue: V) {
|
||||
context.settingContext[this] = newValue
|
||||
}
|
||||
|
||||
fun <V : Any, T : SettingType<V>> SettingReference<V, T>.setSettingValueToItsDefaultIfItIsNotSetValue() {
|
||||
val defaultValue = savedOrDefaultValue ?: return
|
||||
if (notRequiredSettingValue == null) {
|
||||
setValue(defaultValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
-39
@@ -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 <A, B : Any> Task1Reference<A, B>.execute(value: A): TaskResult<B> {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val task = context.taskContext.getEntity(this) as Task1<A, B>
|
||||
return task.action(this@WritingContext, value)
|
||||
}
|
||||
|
||||
inline fun <reified T : Any> PropertyReference<T>.update(
|
||||
crossinline updater: suspend ComputeContext<*>.(T) -> TaskResult<T>
|
||||
): TaskResult<Unit> = compute {
|
||||
val (newValue) = updater(propertyValue)
|
||||
`access$context`.propertyContext[this@update] = newValue
|
||||
}
|
||||
|
||||
fun <T : Any> PropertyReference<List<T>>.addValues(
|
||||
vararg values: T
|
||||
): TaskResult<Unit> = update { oldValues -> success(oldValues + values) }
|
||||
|
||||
fun <T : Any> PropertyReference<List<T>>.addValues(
|
||||
values: List<T>
|
||||
): TaskResult<Unit> = update { oldValues -> success(oldValues + values) }
|
||||
}
|
||||
-1
@@ -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
|
||||
|
||||
-10
@@ -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<T> = KProperty1<out Plugin, Property<T>>
|
||||
@@ -20,12 +19,3 @@ data class Property<out T : Any>(
|
||||
fun build(): Property<T> = Property(name, defaultValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun <T : Any> propertyDelegate(
|
||||
context: PropertyContext,
|
||||
init: Property.Builder<T>.() -> Unit,
|
||||
defaultValue: T
|
||||
) = entityDelegate(context) { name ->
|
||||
Property.Builder(name, defaultValue).apply(init).build()
|
||||
}
|
||||
|
||||
+2
-1
@@ -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<V>(val validate: ReadingContext.(V) -> ValidationResult) {
|
||||
infix fun and(other: SettingValidator<V>) = SettingValidator<V> { value ->
|
||||
|
||||
+1
-20
@@ -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<A, B : Any>(
|
||||
|
||||
fun build(): Task1<A, B> = Task1(name, action)
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun <A, B : Any> delegate(
|
||||
context: EntityContext<Task, TaskReference>,
|
||||
init: Builder<A, B>.() -> Unit
|
||||
) = entityDelegate(context) { name ->
|
||||
Builder<A, B>(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<Task, TaskReference>,
|
||||
phase: GenerationPhase,
|
||||
init: Builder.() -> Unit
|
||||
) = entityDelegate(context) { name ->
|
||||
Builder(name, phase).apply(init).build()
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -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
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
+20
-12
@@ -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<String, Any>()
|
||||
private val pluginSettings = mutableMapOf<String, PluginSetting<*, *>>()
|
||||
val eventManager = EventManager()
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
operator fun <V : Any, T : SettingType<V>> 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<PluginSetting<*, *>>
|
||||
get() = pluginSettings.values
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun <V : Any, T : SettingType<V>> getPluginSetting(pluginSettingReference: PluginSettingReference<V, T>) =
|
||||
pluginSettings[pluginSettingReference.path] as PluginSetting<V, T>
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun <V : Any, T : SettingType<V>> getPluginSetting(pluginSettingReference: PluginSettingPropertyReference<V, T>) =
|
||||
private fun <V : Any, T : SettingType<V>> getPluginSetting(pluginSettingReference: PluginSettingPropertyReference<V, T>) =
|
||||
pluginSettings[pluginSettingReference.path] as? PluginSetting<V, T>
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun <V : Any, T : SettingType<V>> setPluginSetting(
|
||||
private fun <V : Any, T : SettingType<V>> setPluginSetting(
|
||||
pluginSettingReference: PluginSettingPropertyReference<V, T>,
|
||||
setting: PluginSetting<V, T>
|
||||
) {
|
||||
pluginSettings[pluginSettingReference.path] = setting
|
||||
}
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun <V : Any, T : SettingType<V>> pluginSettingValue(setting: PluginSetting<V, T>): V? =
|
||||
values[setting.path] as? V
|
||||
fun <V : Any, T : SettingType<V>> settingDelegate(
|
||||
create: (path: String) -> SettingBuilder<V, T>
|
||||
): ReadOnlyProperty<Any, PluginSetting<V, T>> = object : ReadOnlyProperty<Any, PluginSetting<V, T>> {
|
||||
override fun getValue(thisRef: Any, property: KProperty<*>): PluginSetting<V, T> {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val reference = property as PluginSettingPropertyReference<V, T>
|
||||
getPluginSetting(reference)?.let { return it }
|
||||
val setting = PluginSetting(create(reference.path).buildInternal())
|
||||
setPluginSetting(reference, setting)
|
||||
return setting
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+2
-1
@@ -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 {
|
||||
|
||||
+2
-1
@@ -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<WizardRunConfiguration>)
|
||||
|
||||
+5
-2
@@ -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<WizardService>, private val serviceSelector: (List<WizardService>) -> WizardService?) {
|
||||
class ServicesManager(
|
||||
private val services: List<WizardService>,
|
||||
private val serviceSelector: (List<WizardService>) -> WizardService?
|
||||
) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun <S : WizardService> serviceByClass(klass: KClass<S>, filter: (S) -> Boolean): S? =
|
||||
services.filter { service ->
|
||||
service::class.isSubclassOf(klass) && filter(service as S)
|
||||
}.let(serviceSelector) as? S
|
||||
|
||||
fun withServices(services: List<WizardService>) =
|
||||
fun withAdditionalServices(services: List<WizardService>) =
|
||||
ServicesManager(this.services + services, serviceSelector)
|
||||
}
|
||||
-1
@@ -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
|
||||
|
||||
-1
@@ -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
|
||||
|
||||
+3
-1
@@ -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 {
|
||||
|
||||
-3
@@ -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
|
||||
|
||||
|
||||
+4
-1
@@ -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
|
||||
|
||||
|
||||
+8
-9
@@ -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
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+2
-5
@@ -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
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
+3
-5
@@ -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
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
+7
-6
@@ -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() {
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+5
-5
@@ -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
|
||||
|
||||
+2
-2
@@ -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.*
|
||||
|
||||
-3
@@ -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) {
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+2
-2
@@ -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(
|
||||
|
||||
+2
-2
@@ -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())
|
||||
|
||||
+2
-2
@@ -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())
|
||||
|
||||
+1
-1
@@ -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) {
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+5
-3
@@ -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
|
||||
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
+1
-3
@@ -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
|
||||
|
||||
+3
-3
@@ -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
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
+36
-41
@@ -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 <reified V : Any> settingValue(setting: PluginSettingReference<V, SettingType<V>>): V =
|
||||
with(valuesReadingContext) { setting.settingValue }
|
||||
|
||||
private fun Context.checkAllRequiredSettingPresent(phases: Set<GenerationPhase>): TaskResult<Unit> =
|
||||
private fun checkAllRequiredSettingPresent(phases: Set<GenerationPhase>): TaskResult<Unit> = 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<GenerationPhase>): TaskResult<Unit> =
|
||||
context.settingContext.allPluginSettings.map { setting ->
|
||||
val value = context.settingContext.pluginSettingValue(setting) ?: return@map ValidationResult.OK
|
||||
fun validate(phases: Set<GenerationPhase>): TaskResult<Unit> = 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<Any>).validate(this, value)
|
||||
else ValidationResult.OK
|
||||
}.fold(ValidationResult.OK, ValidationResult::and).toResult()
|
||||
}.fold().toResult()
|
||||
}
|
||||
|
||||
private fun ReadingContext.saveSettingValues(phases: Set<GenerationPhase>) {
|
||||
private fun saveSettingValues(phases: Set<GenerationPhase>) = 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<Any> ?: continue
|
||||
service<SettingSavingWizardService>().saveSettingValue(
|
||||
setting.path,
|
||||
@@ -75,21 +68,23 @@ abstract class Wizard(createPlugins: PluginsCreator, val servicesManager: Servic
|
||||
): TaskResult<Unit> = 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()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user