From 3c3ba361e8c3c11c885931fb0a022c879f0ca5a3 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Wed, 22 Jul 2020 16:10:39 +0300 Subject: [PATCH] Wizard: specify path for plugin entities in one place --- .../tools/projectWizard/SettingsOwner.kt | 26 +- .../kotlin/tools/projectWizard/core/Plugin.kt | 266 ++++++++---------- .../moduleConfigurators/ModuleConfigurator.kt | 18 +- .../projectWizard/plugins/AndroidPlugin.kt | 14 +- .../plugins/RunConfigurationsPlugin.kt | 11 +- .../projectWizard/plugins/StructurePlugin.kt | 14 +- .../plugins/buildSystem/BuildSystemPlugin.kt | 33 ++- .../plugins/buildSystem/JpsPlugin.kt | 8 +- .../plugins/buildSystem/MavenPlugin.kt | 12 +- .../buildSystem/gradle/GradlePlugin.kt | 21 +- .../buildSystem/gradle/GroovyDslPlugin.kt | 9 +- .../buildSystem/gradle/KotlinDslPlugin.kt | 9 +- .../plugins/kotlin/KotlinPlugin.kt | 17 +- .../ProjectTemplatesPlugin.kt | 7 +- .../ConsoleJvmApplicationTemplatePlugin.kt | 9 +- .../plugins/templates/JsTemplatesPlugin.kt | 9 +- .../plugins/templates/KtorTemplatesPlugin.kt | 9 +- .../NativeConsoleApplicationTemplatePlugin.kt | 9 +- .../templates/SimpleNodeJsTemplatesPlugin.kt | 12 +- .../plugins/templates/TemplatePlugin.kt | 9 +- .../plugins/templates/TemplatesPlugin.kt | 25 +- .../tools/projectWizard/templates/Template.kt | 18 +- 22 files changed, 248 insertions(+), 317 deletions(-) diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/SettingsOwner.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/SettingsOwner.kt index 3488f1d9639..2f2149c34d5 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/SettingsOwner.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/SettingsOwner.kt @@ -10,7 +10,6 @@ import kotlin.properties.ReadOnlyProperty interface SettingsOwner { fun > settingDelegate( - prefix: String, create: (path: String) -> SettingBuilder ): ReadOnlyProperty> @@ -22,27 +21,24 @@ interface SettingsOwner { title: String, neededAtPhase: GenerationPhase, parser: Parser, - prefix: String = "", init: DropDownSettingType.Builder.() -> Unit = {} - ): ReadOnlyProperty>> = settingDelegate(prefix) { path -> + ): ReadOnlyProperty>> = settingDelegate { path -> DropDownSettingType.Builder(path, title, neededAtPhase, parser).apply(init) } fun stringSetting( title: String, neededAtPhase: GenerationPhase, - prefix: String = "", init: StringSettingType.Builder.() -> Unit = {} - ) = settingDelegate(prefix) { path -> + ) = settingDelegate { path -> StringSettingType.Builder(path, title, neededAtPhase).apply(init) } fun booleanSetting( title: String, neededAtPhase: GenerationPhase, - prefix: String = "", init: BooleanSettingType.Builder.() -> Unit = {} - ) = settingDelegate(prefix) { path -> + ) = settingDelegate { path -> BooleanSettingType.Builder(path, title, neededAtPhase).apply(init) } @@ -50,18 +46,16 @@ interface SettingsOwner { title: String, neededAtPhase: GenerationPhase, parser: Parser, - prefix: String = "", init: ValueSettingType.Builder.() -> Unit = {} - ) = settingDelegate(prefix) { path -> + ) = settingDelegate { path -> ValueSettingType.Builder(path, title, neededAtPhase, parser).apply(init) } fun versionSetting( title: String, neededAtPhase: GenerationPhase, - prefix: String = "", init: VersionSettingType.Builder.() -> Unit = {} - ) = settingDelegate(prefix) { path -> + ) = settingDelegate { path -> VersionSettingType.Builder(path, title, neededAtPhase).apply(init) } @@ -69,18 +63,16 @@ interface SettingsOwner { title: String, neededAtPhase: GenerationPhase, parser: Parser, - prefix: String = "", init: ListSettingType.Builder.() -> Unit = {} - ) = settingDelegate(prefix) { path -> + ) = settingDelegate { path -> ListSettingType.Builder(path, title, neededAtPhase, parser).apply(init) } fun pathSetting( title: String, neededAtPhase: GenerationPhase, - prefix: String = "", init: PathSettingType.Builder.() -> Unit = {} - ) = settingDelegate(prefix) { path -> + ) = settingDelegate { path -> PathSettingType.Builder(path, title, neededAtPhase).apply(init) } } @@ -89,10 +81,8 @@ interface SettingsOwner { inline fun SettingsOwner.enumSettingImpl( title: String, neededAtPhase: GenerationPhase, - prefix: String = "", crossinline init: DropDownSettingType.Builder.() -> Unit = {} -) where E : Enum, E : DisplayableSettingItem = dropDownSetting(title, neededAtPhase, enumParser(), prefix) { +) where E : Enum, E : DisplayableSettingItem = dropDownSetting(title, neededAtPhase, enumParser()) { values = enumValues().asList() - // init() } \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Plugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Plugin.kt index ef0a93c4c50..193e8537d9d 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Plugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Plugin.kt @@ -26,146 +26,130 @@ abstract class Plugin(override val context: Context) : EntityBase(), abstract val properties: List> abstract val settings: List> abstract val pipelineTasks: List - - companion object : SettingsOwner { - fun pipelineTask( - prefix: String, - phase: GenerationPhase, - init: PipelineTask.Builder.() -> Unit - ): ReadOnlyProperty = - cached { name -> PipelineTask.Builder(withPrefix(prefix, name), phase).apply(init).build() } - - fun task1( - prefix: String, - init: Task1.Builder.() -> Unit - ): ReadOnlyProperty> = cached { name -> Task1.Builder(withPrefix(prefix, name)).apply(init).build() } - - fun property( - prefix: String, - defaultValue: T, - init: Property.Builder.() -> Unit = {} - ): ReadOnlyProperty> = - cached { name -> Property.Builder(withPrefix(prefix, name), defaultValue).apply(init).build() } - - fun listProperty(prefix: String, vararg defaultValues: T, init: Property.Builder>.() -> Unit = {}) = - property(prefix, defaultValues.toList(), init) - - private fun withPrefix(name: String, prefix: String): String = if (prefix.isNotEmpty()) "$prefix.$name" else name - - override fun > settingDelegate( - prefix: String, - create: (path: String) -> SettingBuilder - ): ReadOnlyProperty> = cached { name -> PluginSetting(create(withPrefix(name, prefix)).buildInternal()) } - - // setting types - - @Suppress("UNCHECKED_CAST") - override fun dropDownSetting( - title: String, - neededAtPhase: GenerationPhase, - parser: Parser, - prefix: String, - init: DropDownSettingType.Builder.() -> Unit - ): ReadOnlyProperty>> = - super.dropDownSetting( - title, - neededAtPhase, - parser, - prefix, - init - ) as ReadOnlyProperty>> - - @Suppress("UNCHECKED_CAST") - override fun stringSetting( - title: String, - neededAtPhase: GenerationPhase, - prefix: String, - init: StringSettingType.Builder.() -> Unit - ): ReadOnlyProperty> = - super.stringSetting( - title, - neededAtPhase, - prefix, - init - ) as ReadOnlyProperty> - - @Suppress("UNCHECKED_CAST") - override fun booleanSetting( - title: String, - neededAtPhase: GenerationPhase, - prefix: String, - init: BooleanSettingType.Builder.() -> Unit - ): ReadOnlyProperty> = - super.booleanSetting( - title, - neededAtPhase, - prefix, - init - ) as ReadOnlyProperty> - - @Suppress("UNCHECKED_CAST") - override fun valueSetting( - title: String, - neededAtPhase: GenerationPhase, - parser: Parser, - prefix: String, - init: ValueSettingType.Builder.() -> Unit - ): ReadOnlyProperty>> = - super.valueSetting( - title, - neededAtPhase, - parser, - prefix, - init - ) as ReadOnlyProperty>> - - @Suppress("UNCHECKED_CAST") - override fun versionSetting( - title: String, - neededAtPhase: GenerationPhase, - prefix: String, - init: VersionSettingType.Builder.() -> Unit - ): ReadOnlyProperty> = - super.versionSetting( - title, - neededAtPhase, - prefix, - init - ) as ReadOnlyProperty> - - @Suppress("UNCHECKED_CAST") - override fun listSetting( - title: String, - neededAtPhase: GenerationPhase, - parser: Parser, - prefix: String, - init: ListSettingType.Builder.() -> Unit - ): ReadOnlyProperty, ListSettingType>> = - super.listSetting( - title, - neededAtPhase, - parser, - prefix, - init - ) as ReadOnlyProperty, ListSettingType>> - - @Suppress("UNCHECKED_CAST") - override fun pathSetting( - title: String, - neededAtPhase: GenerationPhase, - prefix: String, - init: PathSettingType.Builder.() -> Unit - ): ReadOnlyProperty> = - super.pathSetting(title, neededAtPhase, prefix, init) as ReadOnlyProperty> - - @Suppress("UNCHECKED_CAST") - inline fun enumSetting( - title: String, - neededAtPhase: GenerationPhase, - prefix: String, - crossinline init: DropDownSettingType.Builder.() -> Unit = {} - ): ReadOnlyProperty>> where E : Enum, E : DisplayableSettingItem = - enumSettingImpl(title, neededAtPhase, prefix, init) as ReadOnlyProperty>> - } +} + +abstract class PluginSettingsOwner : SettingsOwner { + abstract val pluginPath: String + + fun pipelineTask( + phase: GenerationPhase, + init: PipelineTask.Builder.() -> Unit + ): ReadOnlyProperty = + cached { name -> PipelineTask.Builder(withPluginPath(name), phase).apply(init).build() } + + fun task1( + init: Task1.Builder.() -> Unit + ): ReadOnlyProperty> = cached { name -> Task1.Builder(withPluginPath(name)).apply(init).build() } + + fun property( + defaultValue: T, + init: Property.Builder.() -> Unit = {} + ): ReadOnlyProperty> = + cached { name -> Property.Builder(withPluginPath(name), defaultValue).apply(init).build() } + + fun listProperty(vararg defaultValues: T, init: Property.Builder>.() -> Unit = {}) = + property(defaultValues.toList(), init) + + private fun withPluginPath(name: String): String = "$pluginPath.$name" + + override fun > settingDelegate( + create: (path: String) -> SettingBuilder + ): ReadOnlyProperty> = cached { name -> PluginSetting(create(withPluginPath(name)).buildInternal()) } + + // setting types + + @Suppress("UNCHECKED_CAST") + override fun dropDownSetting( + title: String, + neededAtPhase: GenerationPhase, + parser: Parser, + init: DropDownSettingType.Builder.() -> Unit + ): ReadOnlyProperty>> = + super.dropDownSetting( + title, + neededAtPhase, + parser, + init + ) as ReadOnlyProperty>> + + @Suppress("UNCHECKED_CAST") + override fun stringSetting( + title: String, + neededAtPhase: GenerationPhase, + init: StringSettingType.Builder.() -> Unit + ): ReadOnlyProperty> = + super.stringSetting( + title, + neededAtPhase, + init + ) as ReadOnlyProperty> + + @Suppress("UNCHECKED_CAST") + override fun booleanSetting( + title: String, + neededAtPhase: GenerationPhase, + init: BooleanSettingType.Builder.() -> Unit + ): ReadOnlyProperty> = + super.booleanSetting( + title, + neededAtPhase, + init + ) as ReadOnlyProperty> + + @Suppress("UNCHECKED_CAST") + override fun valueSetting( + title: String, + neededAtPhase: GenerationPhase, + parser: Parser, + init: ValueSettingType.Builder.() -> Unit + ): ReadOnlyProperty>> = + super.valueSetting( + title, + neededAtPhase, + parser, + init + ) as ReadOnlyProperty>> + + @Suppress("UNCHECKED_CAST") + override fun versionSetting( + title: String, + neededAtPhase: GenerationPhase, + init: VersionSettingType.Builder.() -> Unit + ): ReadOnlyProperty> = + super.versionSetting( + title, + neededAtPhase, + init + ) as ReadOnlyProperty> + + @Suppress("UNCHECKED_CAST") + override fun listSetting( + title: String, + neededAtPhase: GenerationPhase, + parser: Parser, + init: ListSettingType.Builder.() -> Unit + ): ReadOnlyProperty, ListSettingType>> = + super.listSetting( + title, + neededAtPhase, + parser, + init + ) as ReadOnlyProperty, ListSettingType>> + + @Suppress("UNCHECKED_CAST") + override fun pathSetting( + title: String, + neededAtPhase: GenerationPhase, + init: PathSettingType.Builder.() -> Unit + ): ReadOnlyProperty> = + super.pathSetting(title, neededAtPhase, init) as ReadOnlyProperty> + + @Suppress("UNCHECKED_CAST") + inline fun enumSetting( + title: String, + neededAtPhase: GenerationPhase, + crossinline init: DropDownSettingType.Builder.() -> Unit = {} + ): ReadOnlyProperty>> where E : Enum, E : DisplayableSettingItem = + enumSettingImpl(title, neededAtPhase, init) as ReadOnlyProperty>> } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt index df6b53c2fb8..53b568d9d7d 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt @@ -62,7 +62,6 @@ fun > Reader.settingValue(module: Module, setting: M abstract class ModuleConfiguratorSettings : SettingsOwner { final override fun > settingDelegate( - prefix: String, create: (path: String) -> SettingBuilder ): ReadOnlyProperty> = cached { name -> ModuleConfiguratorSetting(create(name).buildInternal()) @@ -73,14 +72,12 @@ abstract class ModuleConfiguratorSettings : SettingsOwner { title: String, neededAtPhase: GenerationPhase, parser: Parser, - prefix: String, init: DropDownSettingType.Builder.() -> Unit ): ReadOnlyProperty>> = super.dropDownSetting( title, neededAtPhase, parser, - prefix, init ) as ReadOnlyProperty>> @@ -88,13 +85,11 @@ abstract class ModuleConfiguratorSettings : SettingsOwner { final override fun stringSetting( title: String, neededAtPhase: GenerationPhase, - prefix: String, init: StringSettingType.Builder.() -> Unit ): ReadOnlyProperty> = super.stringSetting( title, neededAtPhase, - prefix, init ) as ReadOnlyProperty> @@ -102,13 +97,11 @@ abstract class ModuleConfiguratorSettings : SettingsOwner { final override fun booleanSetting( title: String, neededAtPhase: GenerationPhase, - prefix: String, init: BooleanSettingType.Builder.() -> Unit ): ReadOnlyProperty> = super.booleanSetting( title, neededAtPhase, - prefix, init ) as ReadOnlyProperty> @@ -117,14 +110,12 @@ abstract class ModuleConfiguratorSettings : SettingsOwner { title: String, neededAtPhase: GenerationPhase, parser: Parser, - prefix: String, init: ValueSettingType.Builder.() -> Unit ): ReadOnlyProperty>> = super.valueSetting( title, neededAtPhase, parser, - prefix, init ) as ReadOnlyProperty>> @@ -132,13 +123,11 @@ abstract class ModuleConfiguratorSettings : SettingsOwner { final override fun versionSetting( title: String, neededAtPhase: GenerationPhase, - prefix: String, init: VersionSettingType.Builder.() -> Unit ): ReadOnlyProperty> = super.versionSetting( title, neededAtPhase, - prefix, init ) as ReadOnlyProperty> @@ -147,14 +136,12 @@ abstract class ModuleConfiguratorSettings : SettingsOwner { title: String, neededAtPhase: GenerationPhase, parser: Parser, - prefix: String, init: ListSettingType.Builder.() -> Unit ): ReadOnlyProperty, ListSettingType>> = super.listSetting( title, neededAtPhase, parser, - prefix, init ) as ReadOnlyProperty, ListSettingType>> @@ -162,13 +149,11 @@ abstract class ModuleConfiguratorSettings : SettingsOwner { final override fun pathSetting( title: String, neededAtPhase: GenerationPhase, - prefix: String, init: PathSettingType.Builder.() -> Unit ): ReadOnlyProperty> = super.pathSetting( title, neededAtPhase, - prefix, init ) as ReadOnlyProperty> @@ -176,10 +161,9 @@ abstract class ModuleConfiguratorSettings : SettingsOwner { inline fun enumSetting( title: String, neededAtPhase: GenerationPhase, - prefix: String = "", crossinline init: DropDownSettingType.Builder.() -> Unit = {} ): ReadOnlyProperty>> where E : Enum, E : DisplayableSettingItem = - enumSettingImpl(title, neededAtPhase, prefix, init) as ReadOnlyProperty>> + enumSettingImpl(title, neededAtPhase, init) as ReadOnlyProperty>> } interface ModuleConfiguratorWithSettings : ModuleConfigurator { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/AndroidPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/AndroidPlugin.kt index ed4f182c83e..8486349de82 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/AndroidPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/AndroidPlugin.kt @@ -6,10 +6,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle -import org.jetbrains.kotlin.tools.projectWizard.core.Context -import org.jetbrains.kotlin.tools.projectWizard.core.Plugin -import org.jetbrains.kotlin.tools.projectWizard.core.UNIT_SUCCESS -import org.jetbrains.kotlin.tools.projectWizard.core.checker +import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask import org.jetbrains.kotlin.tools.projectWizard.core.entity.Property import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetting @@ -22,7 +19,7 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.withAllSubModules class AndroidPlugin(context: Context) : Plugin(context) { - override val path = PATH + override val path = pluginPath override val settings: List> = listOf( androidSdkPath @@ -32,13 +29,12 @@ class AndroidPlugin(context: Context) : Plugin(context) { ) override val properties: List> = listOf() - companion object { - private const val PATH = "android" + companion object : PluginSettingsOwner() { + override val pluginPath: String = "android" val androidSdkPath by pathSetting( KotlinNewProjectWizardBundle.message("plugin.android.setting.sdk"), neededAtPhase = GenerationPhase.PROJECT_GENERATION, - PATH ) { isSavable = true isAvailable = isAndroidContainingProject @@ -51,7 +47,7 @@ class AndroidPlugin(context: Context) : Plugin(context) { .any { it.configurator is AndroidModuleConfigurator } } - val addAndroidSdkToLocalProperties by pipelineTask(PATH, GenerationPhase.PROJECT_GENERATION) { + val addAndroidSdkToLocalProperties by pipelineTask(GenerationPhase.PROJECT_GENERATION) { runBefore(GradlePlugin.createLocalPropertiesFile) runAfter(KotlinPlugin.createModules) isAvailable = isAndroidContainingProject diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/RunConfigurationsPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/RunConfigurationsPlugin.kt index e25ca00e5e3..9b4487de52e 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/RunConfigurationsPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/RunConfigurationsPlugin.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.core.Plugin +import org.jetbrains.kotlin.tools.projectWizard.core.PluginSettingsOwner import org.jetbrains.kotlin.tools.projectWizard.core.UNIT_SUCCESS import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask import org.jetbrains.kotlin.tools.projectWizard.core.entity.Property @@ -17,18 +18,18 @@ import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin class RunConfigurationsPlugin(context: Context) : Plugin(context) { - override val path = PATH + override val path = pluginPath override val settings: List> = emptyList() override val pipelineTasks: List = listOf(createRunConfigurationsTask) override val properties: List> = listOf(configurations) - companion object { - private const val PATH = "runConfigurations" + companion object: PluginSettingsOwner() { + override val pluginPath = "runConfigurations" - val configurations by listProperty(PATH) + val configurations by listProperty() - val createRunConfigurationsTask by pipelineTask(PATH, GenerationPhase.PROJECT_IMPORT) { + val createRunConfigurationsTask by pipelineTask( GenerationPhase.PROJECT_IMPORT) { runBefore(BuildSystemPlugin.importProject) withAction { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/StructurePlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/StructurePlugin.kt index 981995322df..9f242d05947 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/StructurePlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/StructurePlugin.kt @@ -8,7 +8,6 @@ import org.jetbrains.kotlin.tools.projectWizard.core.entity.Property import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetting -import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.PomIR import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase @@ -18,10 +17,10 @@ import java.nio.file.Files import java.nio.file.Paths class StructurePlugin(context: Context) : Plugin(context) { - override val path = PATH + override val path = pluginPath - companion object { - private const val PATH = "structure" + companion object : PluginSettingsOwner() { + override val pluginPath = "structure" private val ALLOWED_SPECIAL_CHARS_IN_GROUP_ID = Module.ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES + '.' private val ALLOWED_SPECIAL_CHARS_IN_ARTIFACT_ID = Module.ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES @@ -30,7 +29,6 @@ class StructurePlugin(context: Context) : Plugin(context) { val projectPath by pathSetting( KotlinNewProjectWizardBundle.message("plugin.structure.setting.location"), GenerationPhase.FIRST_STEP, - PATH ) { defaultValue = value(Paths.get(".")) @@ -46,7 +44,6 @@ class StructurePlugin(context: Context) : Plugin(context) { val name by stringSetting( KotlinNewProjectWizardBundle.message("plugin.structure.setting.name"), GenerationPhase.FIRST_STEP, - PATH ) { shouldNotBeBlank() validate(StringValidators.shouldBeValidIdentifier(title, Module.ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES)) @@ -55,7 +52,6 @@ class StructurePlugin(context: Context) : Plugin(context) { val groupId by stringSetting( KotlinNewProjectWizardBundle.message("plugin.structure.setting.group.id"), GenerationPhase.FIRST_STEP, - PATH ) { isSavable = true shouldNotBeBlank() @@ -64,7 +60,6 @@ class StructurePlugin(context: Context) : Plugin(context) { val artifactId by stringSetting( KotlinNewProjectWizardBundle.message("plugin.structure.setting.artifact.id"), GenerationPhase.FIRST_STEP, - PATH ) { shouldNotBeBlank() validate(StringValidators.shouldBeValidIdentifier(title, ALLOWED_SPECIAL_CHARS_IN_ARTIFACT_ID)) @@ -72,13 +67,12 @@ class StructurePlugin(context: Context) : Plugin(context) { val version by stringSetting( KotlinNewProjectWizardBundle.message("plugin.structure.setting.version"), GenerationPhase.FIRST_STEP, - PATH ) { shouldNotBeBlank() validate(StringValidators.shouldBeValidIdentifier(title, ALLOWED_SPECIAL_CHARS_IN_VERSION)) defaultValue = value("1.0-SNAPSHOT") } - val createProjectDir by pipelineTask(PATH, GenerationPhase.PROJECT_GENERATION) { + val createProjectDir by pipelineTask(GenerationPhase.PROJECT_GENERATION) { withAction { service().createDirectory(StructurePlugin.projectPath.settingValue) } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt index bcf65feacd5..8bebce57280 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt @@ -27,15 +27,14 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.updateBuildFiles abstract class BuildSystemPlugin(context: Context) : Plugin(context) { - override val path = PATH + override val path = pluginPath - companion object { - private const val PATH = "buildSystem" + companion object : PluginSettingsOwner() { + override val pluginPath = "buildSystem" val type by enumSetting( KotlinNewProjectWizardBundle.message("plugin.buildsystem.setting.type"), GenerationPhase.FIRST_STEP, - PATH ) { isSavable = true filter = { _, type -> @@ -60,13 +59,13 @@ abstract class BuildSystemPlugin(context: Context) : Plugin(context) { } } - val buildSystemData by property>(PATH, emptyList()) + val buildSystemData by property>(emptyList()) - val buildFiles by listProperty(PATH) + val buildFiles by listProperty() - val pluginRepositoreis by listProperty(PATH) + val pluginRepositoreis by listProperty() - val takeRepositoriesFromDependencies by pipelineTask(PATH, GenerationPhase.PROJECT_GENERATION) { + val takeRepositoriesFromDependencies by pipelineTask(GenerationPhase.PROJECT_GENERATION) { runBefore(createModules) runAfter(TemplatesPlugin.postApplyTemplatesToModules) @@ -88,7 +87,7 @@ abstract class BuildSystemPlugin(context: Context) : Plugin(context) { } } - val createModules by pipelineTask(PATH, GenerationPhase.PROJECT_GENERATION) { + val createModules by pipelineTask(GenerationPhase.PROJECT_GENERATION) { runAfter(StructurePlugin.createProjectDir) withAction { val fileSystem = service() @@ -103,7 +102,7 @@ abstract class BuildSystemPlugin(context: Context) : Plugin(context) { } } - val importProject by pipelineTask(PATH, GenerationPhase.PROJECT_IMPORT) { + val importProject by pipelineTask(GenerationPhase.PROJECT_IMPORT) { runAfter(createModules) withAction { val data = buildSystemData.propertyValue.first { it.type == buildSystemType } @@ -111,13 +110,6 @@ abstract class BuildSystemPlugin(context: Context) : Plugin(context) { .importProject(this, StructurePlugin.projectPath.settingValue, allIRModules, buildSystemType) } } - - fun addBuildSystemData(prefix: String, data: BuildSystemData) = pipelineTask(prefix, GenerationPhase.PREPARE) { - runBefore(createModules) - withAction { - buildSystemData.addValues(data) - } - } } override val settings: List> = listOf( @@ -135,6 +127,13 @@ abstract class BuildSystemPlugin(context: Context) : Plugin(context) { ) } +fun PluginSettingsOwner.addBuildSystemData(data: BuildSystemData) = pipelineTask(GenerationPhase.PREPARE) { + runBefore(BuildSystemPlugin.createModules) + withAction { + BuildSystemPlugin.buildSystemData.addValues(data) + } +} + data class BuildSystemData( val type: BuildSystemType, val buildFileData: BuildFileData? diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/JpsPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/JpsPlugin.kt index 5e6e86d7015..fb2aad6dcf2 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/JpsPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/JpsPlugin.kt @@ -1,15 +1,15 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem import org.jetbrains.kotlin.tools.projectWizard.core.Context +import org.jetbrains.kotlin.tools.projectWizard.core.PluginSettingsOwner import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask class JpsPlugin(context: Context) : BuildSystemPlugin(context) { - override val path = PATH + override val path = pluginPath - companion object { - private const val PATH = "buildSystem.jps" + companion object : PluginSettingsOwner() { + override val pluginPath = "buildSystem.jps" val addBuildSystemData by addBuildSystemData( - PATH, BuildSystemData( type = BuildSystemType.Jps, buildFileData = null diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/MavenPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/MavenPlugin.kt index 0407dfdad61..1a2913db59d 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/MavenPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/MavenPlugin.kt @@ -1,6 +1,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem import org.jetbrains.kotlin.tools.projectWizard.core.Context +import org.jetbrains.kotlin.tools.projectWizard.core.PluginSettingsOwner import org.jetbrains.kotlin.tools.projectWizard.core.asSuccess import org.jetbrains.kotlin.tools.projectWizard.core.checker import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask @@ -14,16 +15,16 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.MavenPrinter import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.updateBuildFiles class MavenPlugin(context: Context) : BuildSystemPlugin(context) { - override val path = PATH + override val path = pluginPath - companion object { - private const val PATH = "buildSystem.maven" + companion object : PluginSettingsOwner() { + override val pluginPath = "buildSystem.maven" private val isMaven = checker { type.settingValue == BuildSystemType.Maven } - val createSettingsFileTask by pipelineTask(PATH, GenerationPhase.PROJECT_GENERATION) { + val createSettingsFileTask by pipelineTask(GenerationPhase.PROJECT_GENERATION) { runAfter(KotlinPlugin.createModules) runBefore(createModules) isAvailable = isMaven @@ -45,7 +46,7 @@ class MavenPlugin(context: Context) : BuildSystemPlugin(context) { } } - val addBuildSystemPluginRepositories by pipelineTask(PATH, GenerationPhase.PROJECT_GENERATION) { + val addBuildSystemPluginRepositories by pipelineTask(GenerationPhase.PROJECT_GENERATION) { runAfter(KotlinPlugin.createPluginRepositories) runBefore(createModules) isAvailable = isMaven @@ -59,7 +60,6 @@ class MavenPlugin(context: Context) : BuildSystemPlugin(context) { } val addBuildSystemData by addBuildSystemData( - PATH, BuildSystemData( type = BuildSystemType.Maven, buildFileData = BuildFileData( diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GradlePlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GradlePlugin.kt index 62aa6b90076..006ff25dc3b 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GradlePlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GradlePlugin.kt @@ -21,25 +21,24 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.printBuildFile import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository -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 abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) { - override val path = PATH + override val path = pluginPath - companion object { - private const val PATH = "buildSystem.gradle" + companion object : PluginSettingsOwner() { + override val pluginPath = "buildSystem.gradle" val gradleProperties by listProperty( - PATH, + "kotlin.code.style" to "official" ) - val settingsGradleFileIRs by listProperty(PATH) + val settingsGradleFileIRs by listProperty() - val createGradlePropertiesFile by pipelineTask(PATH, GenerationPhase.PROJECT_GENERATION) { + val createGradlePropertiesFile by pipelineTask(GenerationPhase.PROJECT_GENERATION) { runAfter(KotlinPlugin.createModules) runBefore(TemplatesPlugin.renderFileTemplates) isAvailable = isGradle @@ -61,9 +60,9 @@ abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) { } } - val localProperties by listProperty>(PATH) + val localProperties by listProperty>() - val createLocalPropertiesFile by pipelineTask(PATH, GenerationPhase.PROJECT_GENERATION) { + val createLocalPropertiesFile by pipelineTask(GenerationPhase.PROJECT_GENERATION) { runAfter(KotlinPlugin.createModules) runBefore(TemplatesPlugin.renderFileTemplates) isAvailable = isGradle @@ -85,7 +84,7 @@ abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) { private val isGradle = checker { buildSystemType.isGradle } - val initGradleWrapperTask by pipelineTask(PATH, GenerationPhase.PROJECT_GENERATION) { + val initGradleWrapperTask by pipelineTask(GenerationPhase.PROJECT_GENERATION) { runBefore(TemplatesPlugin.renderFileTemplates) isAvailable = isGradle withAction { @@ -105,7 +104,7 @@ abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) { } - val createSettingsFileTask by pipelineTask(PATH, GenerationPhase.PROJECT_GENERATION) { + val createSettingsFileTask by pipelineTask(GenerationPhase.PROJECT_GENERATION) { runAfter(KotlinPlugin.createModules) runAfter(KotlinPlugin.createPluginRepositories) isAvailable = isGradle diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GroovyDslPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GroovyDslPlugin.kt index a78bdf0a264..a738492edb5 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GroovyDslPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GroovyDslPlugin.kt @@ -1,20 +1,21 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle import org.jetbrains.kotlin.tools.projectWizard.core.Context +import org.jetbrains.kotlin.tools.projectWizard.core.PluginSettingsOwner import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildFileData import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemData +import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.addBuildSystemData import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter class GroovyDslPlugin(context: Context) : GradlePlugin(context) { - override val path = PATH + override val path = pluginPath - companion object { - private const val PATH = "buildSystem.gradle.groovyDsl" + companion object : PluginSettingsOwner() { + override val pluginPath = "buildSystem.gradle.groovyDsl" val addBuildSystemData by addBuildSystemData( - PATH, BuildSystemData( type = BuildSystemType.GradleGroovyDsl, buildFileData = BuildFileData( diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/KotlinDslPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/KotlinDslPlugin.kt index ba83d0dc859..630552670d2 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/KotlinDslPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/KotlinDslPlugin.kt @@ -1,20 +1,21 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle import org.jetbrains.kotlin.tools.projectWizard.core.Context +import org.jetbrains.kotlin.tools.projectWizard.core.PluginSettingsOwner import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildFileData import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemData import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType +import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.addBuildSystemData import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter class KotlinDslPlugin(context: Context) : GradlePlugin(context) { - override val path = PATH + override val path = pluginPath - companion object { - private const val PATH = "buildSystem.gradle.kotlinDsl" + companion object : PluginSettingsOwner() { + override val pluginPath = "buildSystem.gradle.kotlinDsl" val addBuildSystemData by addBuildSystemData( - PATH, BuildSystemData( type = BuildSystemType.GradleKotlinDsl, buildFileData = BuildFileData( diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt index 0f5f847f67a..ac972d8c9b0 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt @@ -21,10 +21,10 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.* import java.nio.file.Path class KotlinPlugin(context: Context) : Plugin(context) { - override val path = PATH + override val path = pluginPath - companion object { - private const val PATH = "kotlin" + companion object : PluginSettingsOwner() { + override val pluginPath = "kotlin" private val moduleDependenciesValidator = settingValidator> { modules -> val allModules = modules.withAllSubModules(includeSourcesets = true).toSet() @@ -47,12 +47,11 @@ class KotlinPlugin(context: Context) : Plugin(context) { } val version by property( - PATH, // todo do not hardcode kind & repository WizardKotlinVersion(Versions.KOTLIN, KotlinVersionKind.M, Repositories.KOTLIN_EAP_BINTRAY) ) - val initKotlinVersions by pipelineTask(PATH, GenerationPhase.PREPARE_GENERATION) { + val initKotlinVersions by pipelineTask(GenerationPhase.PREPARE_GENERATION) { title = KotlinNewProjectWizardBundle.message("plugin.kotlin.downloading.kotlin.versions") withAction { @@ -64,7 +63,6 @@ class KotlinPlugin(context: Context) : Plugin(context) { val projectKind by enumSetting( KotlinNewProjectWizardBundle.message("plugin.kotlin.setting.project.kind"), GenerationPhase.FIRST_STEP, - PATH ) private fun List.findDuplicatesByName() = @@ -74,7 +72,6 @@ class KotlinPlugin(context: Context) : Plugin(context) { KotlinNewProjectWizardBundle.message("plugin.kotlin.setting.modules"), GenerationPhase.SECOND_STEP, Module.parser, - PATH ) { validate { value -> val allModules = value.withAllSubModules() @@ -106,7 +103,7 @@ class KotlinPlugin(context: Context) : Plugin(context) { validate(moduleDependenciesValidator) } - val createModules by pipelineTask(PATH, GenerationPhase.PROJECT_GENERATION) { + val createModules by pipelineTask(GenerationPhase.PROJECT_GENERATION) { runBefore(BuildSystemPlugin.createModules) runAfter(StructurePlugin.createProjectDir) withAction { @@ -118,7 +115,7 @@ class KotlinPlugin(context: Context) : Plugin(context) { } } - val createPluginRepositories by pipelineTask(PATH, GenerationPhase.PROJECT_GENERATION) { + val createPluginRepositories by pipelineTask(GenerationPhase.PROJECT_GENERATION) { runBefore(BuildSystemPlugin.createModules) withAction { val version = version.propertyValue @@ -131,7 +128,7 @@ class KotlinPlugin(context: Context) : Plugin(context) { } } - val createSourcesetDirectories by pipelineTask(PATH, GenerationPhase.PROJECT_GENERATION) { + val createSourcesetDirectories by pipelineTask(GenerationPhase.PROJECT_GENERATION) { runAfter(KotlinPlugin.createModules) withAction { fun Path.createKotlinAndResourceDirectories(moduleConfigurator: ModuleConfigurator) = diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/projectTemplates/ProjectTemplatesPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/projectTemplates/ProjectTemplatesPlugin.kt index 2e5a7b97b37..93249270e09 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/projectTemplates/ProjectTemplatesPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/projectTemplates/ProjectTemplatesPlugin.kt @@ -12,10 +12,10 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.withAllSubModules import org.jetbrains.kotlin.tools.projectWizard.projectTemplates.ProjectTemplate class ProjectTemplatesPlugin(context: Context) : Plugin(context) { - override val path = PATH + override val path = pluginPath - companion object { - const val PATH = "projectTemplates" + companion object : PluginSettingsOwner() { + override val pluginPath = "projectTemplates" val template by dropDownSetting( KotlinNewProjectWizardBundle.message("plugin.templates.setting.template"), @@ -23,7 +23,6 @@ class ProjectTemplatesPlugin(context: Context) : Plugin(context) { parser = valueParserM { _, _ -> Failure(ParseError("Project templates is not supported in yaml for now")) }, - PATH ) { values = ProjectTemplate.ALL isRequired = false diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/ConsoleJvmApplicationTemplatePlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/ConsoleJvmApplicationTemplatePlugin.kt index e6f7209ec78..b507ab3822a 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/ConsoleJvmApplicationTemplatePlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/ConsoleJvmApplicationTemplatePlugin.kt @@ -1,17 +1,18 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.templates import org.jetbrains.kotlin.tools.projectWizard.core.Context +import org.jetbrains.kotlin.tools.projectWizard.core.PluginSettingsOwner import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask import org.jetbrains.kotlin.tools.projectWizard.templates.ConsoleJvmApplicationTemplate class ConsoleJvmApplicationTemplatePlugin(context: Context) : TemplatePlugin(context) { - override val path = PATH + override val path = pluginPath override val pipelineTasks: List = super.pipelineTasks + listOf(addTemplate) - companion object { - private const val PATH = "template.consoleJvmApplicationTemplate" + companion object : PluginSettingsOwner() { + override val pluginPath = "template.consoleJvmApplicationTemplate" - val addTemplate by addTemplateTask(PATH, ConsoleJvmApplicationTemplate()) + val addTemplate by addTemplateTask(ConsoleJvmApplicationTemplate()) } } \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/JsTemplatesPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/JsTemplatesPlugin.kt index 12c3b579f56..78ce4bed464 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/JsTemplatesPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/JsTemplatesPlugin.kt @@ -1,20 +1,21 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.templates import org.jetbrains.kotlin.tools.projectWizard.core.Context +import org.jetbrains.kotlin.tools.projectWizard.core.PluginSettingsOwner import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask import org.jetbrains.kotlin.tools.projectWizard.templates.SimpleJsClientTemplate class JsTemplatesPlugin(context: Context) : TemplatePlugin(context) { - override val path = PATH + override val path = pluginPath override val pipelineTasks: List = super.pipelineTasks + listOf( addTemplate, ) - companion object { - private const val PATH = "template.jsTemplates" + companion object : PluginSettingsOwner() { + override val pluginPath = "template.jsTemplates" - val addTemplate by addTemplateTask(PATH, SimpleJsClientTemplate()) + val addTemplate by addTemplateTask(SimpleJsClientTemplate()) } } \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/KtorTemplatesPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/KtorTemplatesPlugin.kt index c8b7109a86a..f457fb3852d 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/KtorTemplatesPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/KtorTemplatesPlugin.kt @@ -1,20 +1,21 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.templates import org.jetbrains.kotlin.tools.projectWizard.core.Context +import org.jetbrains.kotlin.tools.projectWizard.core.PluginSettingsOwner import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask import org.jetbrains.kotlin.tools.projectWizard.templates.KtorServerTemplate class KtorTemplatesPlugin(context: Context) : TemplatePlugin(context) { - override val path = PATH + override val path = pluginPath override val pipelineTasks: List = super.pipelineTasks + listOf( addTemplate, ) - companion object { - private const val PATH = "template.ktorTemplates" + companion object: PluginSettingsOwner() { + override val pluginPath = "template.ktorTemplates" - val addTemplate by addTemplateTask(PATH, KtorServerTemplate()) + val addTemplate by addTemplateTask(KtorServerTemplate()) } } \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/NativeConsoleApplicationTemplatePlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/NativeConsoleApplicationTemplatePlugin.kt index 60dafb385b9..1532102e62c 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/NativeConsoleApplicationTemplatePlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/NativeConsoleApplicationTemplatePlugin.kt @@ -6,20 +6,21 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.templates import org.jetbrains.kotlin.tools.projectWizard.core.Context +import org.jetbrains.kotlin.tools.projectWizard.core.PluginSettingsOwner import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask import org.jetbrains.kotlin.tools.projectWizard.templates.NativeConsoleApplicationTemplate class NativeConsoleApplicationTemplatePlugin(context: Context) : TemplatePlugin(context) { - override val path = PATH + override val path = pluginPath override val pipelineTasks: List = super.pipelineTasks + listOf( addTemplate, ) - companion object { - private const val PATH = "template.nativeConsoleApplicationTemplate" + companion object : PluginSettingsOwner() { + override val pluginPath = "template.nativeConsoleApplicationTemplate" - val addTemplate by addTemplateTask(PATH, NativeConsoleApplicationTemplate()) + val addTemplate by addTemplateTask( NativeConsoleApplicationTemplate()) } } \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/SimpleNodeJsTemplatesPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/SimpleNodeJsTemplatesPlugin.kt index deddea4c341..c9f4526e16a 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/SimpleNodeJsTemplatesPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/SimpleNodeJsTemplatesPlugin.kt @@ -6,24 +6,24 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.templates import org.jetbrains.kotlin.tools.projectWizard.core.Context +import org.jetbrains.kotlin.tools.projectWizard.core.PluginSettingsOwner import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask import org.jetbrains.kotlin.tools.projectWizard.templates.KtorServerTemplate -import org.jetbrains.kotlin.tools.projectWizard.templates.SimpleJsClientTemplate import org.jetbrains.kotlin.tools.projectWizard.templates.SimpleNodeJsTemplate class SimpleNodeJsTemplatesPlugin(context: Context) : TemplatePlugin(context) { - override val path = PATH + override val path = pluginPath override val pipelineTasks: List = super.pipelineTasks + listOf( KtorTemplatesPlugin.addTemplate, ) - val addTemplate by addTemplateTask(PATH, SimpleNodeJsTemplate()) + val addTemplate by addTemplateTask(SimpleNodeJsTemplate()) - companion object { - private const val PATH = "template.simpleNodeJs" + companion object : PluginSettingsOwner() { + override val pluginPath = "template.simpleNodeJs" - val addTemplate by addTemplateTask(PATH, KtorServerTemplate()) + val addTemplate by addTemplateTask(KtorServerTemplate()) } } \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatePlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatePlugin.kt index 4abfcb2be8e..ab937b1554b 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatePlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatePlugin.kt @@ -2,6 +2,7 @@ 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.core.PluginSettingsOwner import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask import org.jetbrains.kotlin.tools.projectWizard.core.entity.Property import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetting @@ -9,16 +10,16 @@ import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.templates.Template abstract class TemplatePlugin(context: Context) : Plugin(context) { - override val path = PATH + override val path = pluginPath override val settings: List> = emptyList() override val pipelineTasks: List = emptyList() override val properties: List> = emptyList() - companion object { - const val PATH = "template" + companion object : PluginSettingsOwner() { + override val pluginPath = "template" - fun addTemplateTask(prefix: String, template: Template) = pipelineTask(prefix, GenerationPhase.PREPARE) { + fun addTemplateTask(template: Template) = pipelineTask(GenerationPhase.PREPARE) { withAction { TemplatesPlugin.addTemplate.execute(template) } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt index f5f6ec7f7f1..9db55a0c733 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt @@ -24,37 +24,34 @@ import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.settingValue import java.nio.file.Path class TemplatesPlugin(context: Context) : Plugin(context) { - override val path = PATH + override val path = pluginPath - companion object { - private const val PATH = "templates" + companion object : PluginSettingsOwner() { + override val pluginPath = "templates" - val templates by property>( - PATH, - emptyMap() - ) + val templates by property>(emptyMap()) - val addTemplate by task1(PATH) { + val addTemplate by task1 { withAction { template -> templates.update { success(it + (template.id to template)) } } } - val fileTemplatesToRender by property>(PATH, emptyList()) + val fileTemplatesToRender by property>(emptyList()) - val addFileTemplate by task1(PATH) { + val addFileTemplate by task1 { withAction { template -> fileTemplatesToRender.update { success(it + template) } } } - val addFileTemplates by task1, Unit>(PATH) { + val addFileTemplates by task1, Unit> { withAction { templates -> fileTemplatesToRender.addValues(templates) } } - val renderFileTemplates by pipelineTask(PATH, GenerationPhase.PROJECT_GENERATION) { + val renderFileTemplates by pipelineTask(GenerationPhase.PROJECT_GENERATION) { runAfter(KotlinPlugin.createModules) withAction { val templateEngine = service() @@ -64,7 +61,7 @@ class TemplatesPlugin(context: Context) : Plugin(context) { } } - val addTemplatesToModules by pipelineTask(PATH, GenerationPhase.PROJECT_GENERATION) { + val addTemplatesToModules by pipelineTask(GenerationPhase.PROJECT_GENERATION) { runBefore(BuildSystemPlugin.createModules) runAfter(KotlinPlugin.createModules) @@ -92,7 +89,7 @@ class TemplatesPlugin(context: Context) : Plugin(context) { } } - val postApplyTemplatesToModules by pipelineTask(PATH, GenerationPhase.PROJECT_GENERATION) { + val postApplyTemplatesToModules by pipelineTask(GenerationPhase.PROJECT_GENERATION) { runBefore(BuildSystemPlugin.createModules) runAfter(KotlinPlugin.createModules) runAfter(TemplatesPlugin.addTemplatesToModules) diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/Template.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/Template.kt index 82818845527..b5a50cc271d 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/Template.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/Template.kt @@ -66,7 +66,6 @@ fun > Reader.settingValue(module: Module, setting: T abstract class Template : SettingsOwner, EntitiesOwnerDescriptor, DisplayableSettingItem { final override fun > settingDelegate( - prefix: String, create: (path: String) -> SettingBuilder ): ReadOnlyProperty> = cached { name -> TemplateSetting(create(name).buildInternal()) @@ -158,14 +157,12 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor, DisplayableSet title: String, neededAtPhase: GenerationPhase, parser: Parser, - prefix: String, init: DropDownSettingType.Builder.() -> Unit ): ReadOnlyProperty>> = super.dropDownSetting( title, neededAtPhase, parser, - prefix, init ) as ReadOnlyProperty>> @@ -173,13 +170,11 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor, DisplayableSet final override fun stringSetting( title: String, neededAtPhase: GenerationPhase, - prefix: String, init: StringSettingType.Builder.() -> Unit ): ReadOnlyProperty> = super.stringSetting( title, neededAtPhase, - prefix, init ) as ReadOnlyProperty> @@ -187,13 +182,11 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor, DisplayableSet final override fun booleanSetting( title: String, neededAtPhase: GenerationPhase, - prefix: String, init: BooleanSettingType.Builder.() -> Unit ): ReadOnlyProperty> = super.booleanSetting( title, neededAtPhase, - prefix, init ) as ReadOnlyProperty> @@ -202,14 +195,12 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor, DisplayableSet title: String, neededAtPhase: GenerationPhase, parser: Parser, - prefix: String, init: ValueSettingType.Builder.() -> Unit ): ReadOnlyProperty>> = super.valueSetting( title, neededAtPhase, parser, - prefix, init ) as ReadOnlyProperty>> @@ -217,13 +208,11 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor, DisplayableSet final override fun versionSetting( title: String, neededAtPhase: GenerationPhase, - prefix: String, init: VersionSettingType.Builder.() -> Unit ): ReadOnlyProperty> = super.versionSetting( title, neededAtPhase, - prefix, init ) as ReadOnlyProperty> @@ -232,14 +221,12 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor, DisplayableSet title: String, neededAtPhase: GenerationPhase, parser: Parser, - prefix: String, init: ListSettingType.Builder.() -> Unit ): ReadOnlyProperty, ListSettingType>> = super.listSetting( title, neededAtPhase, parser, - prefix, init ) as ReadOnlyProperty, ListSettingType>> @@ -248,13 +235,11 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor, DisplayableSet final override fun pathSetting( title: String, neededAtPhase: GenerationPhase, - prefix: String, init: PathSettingType.Builder.() -> Unit ): ReadOnlyProperty> = super.pathSetting( title, neededAtPhase, - prefix, init ) as ReadOnlyProperty> @@ -262,10 +247,9 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor, DisplayableSet inline fun enumSetting( title: String, neededAtPhase: GenerationPhase, - prefix: String = "", crossinline init: DropDownSettingType.Builder.() -> Unit = {} ): ReadOnlyProperty>> where E : Enum, E : DisplayableSettingItem = - enumSettingImpl(title, neededAtPhase, prefix, init) as ReadOnlyProperty>> + enumSettingImpl(title, neededAtPhase, init) as ReadOnlyProperty>> companion object { fun parser(templateId: Identificator): Parser