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 877aa8e74df..aeccd6968ff 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 @@ -8,7 +8,7 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem import kotlin.properties.ReadOnlyProperty -interface SettingsOwner : EntitiesOwnerDescriptor { +interface SettingsOwner { fun > settingDelegate( create: (path: String) -> SettingBuilder ): ReadOnlyProperty> diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/EntitiesOwner.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/EntitiesOwner.kt index df65c1e72c5..6978fb4dbd6 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/EntitiesOwner.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/EntitiesOwner.kt @@ -1,7 +1,5 @@ package org.jetbrains.kotlin.tools.projectWizard.core -import kotlin.reflect.KClass - interface EntitiesOwnerDescriptor { val id: String } 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 f4ae8c5f408..4f9d2a124c9 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 @@ -20,6 +20,7 @@ typealias PluginsCreator = (Context) -> List abstract class Plugin(override val context: Context) : EntityBase(), SettingsOwner, ContextOwner, + EntitiesOwnerDescriptor, EntitiesOwner { override val descriptor get() = this override val id: String get() = path diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidSinglePlatformModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidSinglePlatformModuleConfigurator.kt index 048fb7a31ca..614a1c1fd53 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidSinglePlatformModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidSinglePlatformModuleConfigurator.kt @@ -25,7 +25,7 @@ import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptor import java.nio.file.Path -object AndroidSinglePlatformModuleConfigurator : ModuleConfiguratorWithSettings(), +object AndroidSinglePlatformModuleConfigurator : ModuleConfiguratorWithSettings, SinglePlatformModuleConfigurator, AndroidModuleConfigurator, ModuleConfiguratorWithModuleType { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt index e6bdd1a47e5..c58bf78a062 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt @@ -19,7 +19,7 @@ interface JSConfigurator : ModuleConfiguratorWithModuleType { override val moduleType: ModuleType get() = ModuleType.js } -object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWithTests() { +object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWithTests { override val moduleKind = ModuleKind.singleplatformJs override val suggestedModuleName = "js" override val id = "jsSinglepaltform" 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 b93da6d5394..dfb04acc9fd 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 @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version import java.nio.file.Path import kotlin.properties.ReadOnlyProperty +import kotlin.reflect.KClass sealed class ModuleCondifuratorSettingsEnvironment { @@ -51,18 +52,15 @@ fun withSettingsOf( ): T = function(ModuleBasedConfiguratorSettingsEnvironment(configurator, module)) -abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwner { - override fun > settingDelegate( +abstract class ModuleConfiguratorSettings : SettingsOwner { + final override fun > settingDelegate( create: (path: String) -> SettingBuilder ): ReadOnlyProperty> = cached { name -> ModuleConfiguratorSetting(create(name).buildInternal()) } - open fun getConfiguratorSettings(): List> = emptyList() - open fun getPluginSettings(): List>> = emptyList() - @Suppress("UNCHECKED_CAST") - override fun dropDownSetting( + final override fun dropDownSetting( title: String, neededAtPhase: GenerationPhase, parser: Parser, @@ -76,7 +74,7 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne ) as ReadOnlyProperty>> @Suppress("UNCHECKED_CAST") - override fun stringSetting( + final override fun stringSetting( title: String, neededAtPhase: GenerationPhase, init: StringSettingType.Builder.() -> Unit @@ -88,7 +86,7 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne ) as ReadOnlyProperty> @Suppress("UNCHECKED_CAST") - override fun booleanSetting( + final override fun booleanSetting( title: String, neededAtPhase: GenerationPhase, init: BooleanSettingType.Builder.() -> Unit @@ -100,7 +98,7 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne ) as ReadOnlyProperty> @Suppress("UNCHECKED_CAST") - override fun valueSetting( + final override fun valueSetting( title: String, neededAtPhase: GenerationPhase, parser: Parser, @@ -114,7 +112,7 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne ) as ReadOnlyProperty>> @Suppress("UNCHECKED_CAST") - override fun versionSetting( + final override fun versionSetting( title: String, neededAtPhase: GenerationPhase, init: VersionSettingType.Builder.() -> Unit @@ -126,7 +124,7 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne ) as ReadOnlyProperty> @Suppress("UNCHECKED_CAST") - override fun listSetting( + final override fun listSetting( title: String, neededAtPhase: GenerationPhase, parser: Parser, @@ -140,7 +138,7 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne ) as ReadOnlyProperty, ListSettingType>> @Suppress("UNCHECKED_CAST") - override fun pathSetting( + final override fun pathSetting( title: String, neededAtPhase: GenerationPhase, init: PathSettingType.Builder.() -> Unit @@ -160,6 +158,12 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne init() } +} + +interface ModuleConfiguratorWithSettings : ModuleConfigurator { + fun getConfiguratorSettings(): List> = emptyList() + fun getPluginSettings(): List>> = emptyList() + fun initDefaultValuesFor(module: Module, context: Context) { withSettingsOf(module) { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt index a565d20dbb8..ae2a02fc958 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt @@ -20,22 +20,24 @@ 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 -abstract class ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings() { - val testFramework by enumSetting( - "Test Framework", - neededAtPhase = GenerationPhase.PROJECT_GENERATION - ) { - defaultValue = defaultTestFramework() +interface ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings { + companion object : ModuleConfiguratorSettings() { + val testFramework by enumSetting( + "Test Framework", + neededAtPhase = GenerationPhase.PROJECT_GENERATION + ) { + defaultValue = KotlinTestFramework.COMMON - filter = filter@{ reference, kotlinTestFramework -> - if (reference !is ModuleConfiguratorSettingReference<*, *>) return@filter true + filter = filter@{ reference, kotlinTestFramework -> + if (reference !is ModuleConfiguratorSettingReference<*, *>) return@filter true - val moduleType = reference.module?.configurator?.safeAs()?.moduleType - kotlinTestFramework.moduleType == moduleType + val moduleType = reference.module?.configurator?.safeAs()?.moduleType + kotlinTestFramework.moduleType == moduleType + } } } - abstract fun defaultTestFramework(): KotlinTestFramework + fun defaultTestFramework(): KotlinTestFramework override fun ReadingContext.createModuleIRs(configurationData: ModuleConfigurationData, module: Module): List = withSettingsOf(module) { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt index 85b404aaa38..7016ab1a65c 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt @@ -23,7 +23,7 @@ interface TargetConfigurator : ModuleConfiguratorWithModuleType { fun ReadingContext.createInnerTargetIrs(module: Module): List = emptyList() } -abstract class TargetConfiguratorWithTests : ModuleConfiguratorWithTests(), TargetConfigurator +abstract class TargetConfiguratorWithTests : ModuleConfiguratorWithTests, TargetConfigurator interface SingleCoexistenceTargetConfigurator : TargetConfigurator { override fun canCoexistsWith(other: List): Boolean = @@ -56,7 +56,7 @@ private fun Module.createTargetAccessIr(moduleSubType: ModuleSubType) = interface JsTargetConfigurator : JSConfigurator, TargetConfigurator, SingleCoexistenceTargetConfigurator -object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWithTests() { +object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWithTests { override val id = "jsBrowser" override val text = "Browser" override val suggestedModuleName = "browser" @@ -99,7 +99,7 @@ object CommonTargetConfigurator : TargetConfiguratorWithTests(), SimpleTargetCon override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.COMMON } -object JvmTargetConfigurator : JvmModuleConfigurator(), +object JvmTargetConfigurator : JvmModuleConfigurator, TargetConfigurator, SimpleTargetConfigurator { override val moduleSubType = ModuleSubType.jvm @@ -110,7 +110,7 @@ object JvmTargetConfigurator : JvmModuleConfigurator(), override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JUNIT4 override fun ReadingContext.createInnerTargetIrs(module: Module): List = buildList { - val targetVersionValue = withSettingsOf(module) { targetJvmVersion.reference.settingValue.value } + val targetVersionValue = withSettingsOf(module) { JvmModuleConfigurator.targetJvmVersion.reference.settingValue.value } when { buildSystemType.isGradle -> { +GradleSectionIR( diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt index 52ef7b785c5..bf0f3864d2a 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt @@ -17,12 +17,17 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.maven.MavenProper import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle -abstract class JvmModuleConfigurator : ModuleConfiguratorWithTests() { - val targetJvmVersion by enumSetting("Target JVM Version", GenerationPhase.PROJECT_GENERATION) { - defaultValue = TargetJvmVersion.JVM_1_8 +interface JvmModuleConfigurator : ModuleConfiguratorWithTests { + companion object : ModuleConfiguratorSettings() { + val targetJvmVersion by enumSetting("Target JVM Version", GenerationPhase.PROJECT_GENERATION) { + defaultValue = TargetJvmVersion.JVM_1_8 + } } - override fun getConfiguratorSettings(): List> = super.getConfiguratorSettings() + targetJvmVersion + override fun getConfiguratorSettings(): List> = buildList { + +super.getConfiguratorSettings() + +targetJvmVersion + } } enum class TargetJvmVersion(val value: String) : DisplayableSettingItem { @@ -66,7 +71,7 @@ interface SinglePlatformModuleConfigurator : ModuleConfigurator { override val moduleKind get() = ModuleKind.singleplatformJvm } -object JvmSinglePlatformModuleConfigurator : JvmModuleConfigurator(), +object JvmSinglePlatformModuleConfigurator : JvmModuleConfigurator, SinglePlatformModuleConfigurator, ModuleConfiguratorWithModuleType { override val moduleType get() = ModuleType.jvm @@ -88,7 +93,7 @@ object JvmSinglePlatformModuleConfigurator : JvmModuleConfigurator(), buildList { +GradleImportIR("org.jetbrains.kotlin.gradle.tasks.KotlinCompile") - val targetVersionValue = withSettingsOf(module) { targetJvmVersion.reference.settingValue.value } + val targetVersionValue = withSettingsOf(module) { JvmModuleConfigurator.targetJvmVersion.reference.settingValue.value } when { configurationData.buildSystemType.isGradle -> { +GradleConfigureTaskIR( 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 7cd596d72b8..89c0367a7ad 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 @@ -55,7 +55,7 @@ fun withSettingsOf( ): T = function(IdBasedTemplateEnvironment(template, identificator)) -abstract class Template : SettingsOwner { +abstract class Template : SettingsOwner, EntitiesOwnerDescriptor { final override fun > settingDelegate( create: (path: String) -> SettingBuilder ): ReadOnlyProperty> = cached { name ->