Wizard: move module configurator settings to companion objects
This commit is contained in:
+1
-1
@@ -8,7 +8,7 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
|||||||
import kotlin.properties.ReadOnlyProperty
|
import kotlin.properties.ReadOnlyProperty
|
||||||
|
|
||||||
|
|
||||||
interface SettingsOwner : EntitiesOwnerDescriptor {
|
interface SettingsOwner {
|
||||||
fun <V : Any, T : SettingType<V>> settingDelegate(
|
fun <V : Any, T : SettingType<V>> settingDelegate(
|
||||||
create: (path: String) -> SettingBuilder<V, T>
|
create: (path: String) -> SettingBuilder<V, T>
|
||||||
): ReadOnlyProperty<Any, Setting<V, T>>
|
): ReadOnlyProperty<Any, Setting<V, T>>
|
||||||
|
|||||||
-2
@@ -1,7 +1,5 @@
|
|||||||
package org.jetbrains.kotlin.tools.projectWizard.core
|
package org.jetbrains.kotlin.tools.projectWizard.core
|
||||||
|
|
||||||
import kotlin.reflect.KClass
|
|
||||||
|
|
||||||
interface EntitiesOwnerDescriptor {
|
interface EntitiesOwnerDescriptor {
|
||||||
val id: String
|
val id: String
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -20,6 +20,7 @@ typealias PluginsCreator = (Context) -> List<Plugin>
|
|||||||
abstract class Plugin(override val context: Context) : EntityBase(),
|
abstract class Plugin(override val context: Context) : EntityBase(),
|
||||||
SettingsOwner,
|
SettingsOwner,
|
||||||
ContextOwner,
|
ContextOwner,
|
||||||
|
EntitiesOwnerDescriptor,
|
||||||
EntitiesOwner<Plugin> {
|
EntitiesOwner<Plugin> {
|
||||||
override val descriptor get() = this
|
override val descriptor get() = this
|
||||||
override val id: String get() = path
|
override val id: String get() = path
|
||||||
|
|||||||
+1
-1
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate
|
|||||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptor
|
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptor
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
|
|
||||||
object AndroidSinglePlatformModuleConfigurator : ModuleConfiguratorWithSettings(),
|
object AndroidSinglePlatformModuleConfigurator : ModuleConfiguratorWithSettings,
|
||||||
SinglePlatformModuleConfigurator,
|
SinglePlatformModuleConfigurator,
|
||||||
AndroidModuleConfigurator,
|
AndroidModuleConfigurator,
|
||||||
ModuleConfiguratorWithModuleType {
|
ModuleConfiguratorWithModuleType {
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,7 @@ interface JSConfigurator : ModuleConfiguratorWithModuleType {
|
|||||||
override val moduleType: ModuleType get() = ModuleType.js
|
override val moduleType: ModuleType get() = ModuleType.js
|
||||||
}
|
}
|
||||||
|
|
||||||
object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWithTests() {
|
object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWithTests {
|
||||||
override val moduleKind = ModuleKind.singleplatformJs
|
override val moduleKind = ModuleKind.singleplatformJs
|
||||||
override val suggestedModuleName = "js"
|
override val suggestedModuleName = "js"
|
||||||
override val id = "jsSinglepaltform"
|
override val id = "jsSinglepaltform"
|
||||||
|
|||||||
+16
-12
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.*
|
|||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
import kotlin.properties.ReadOnlyProperty
|
import kotlin.properties.ReadOnlyProperty
|
||||||
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
|
|
||||||
sealed class ModuleCondifuratorSettingsEnvironment {
|
sealed class ModuleCondifuratorSettingsEnvironment {
|
||||||
@@ -51,18 +52,15 @@ fun <T> withSettingsOf(
|
|||||||
): T = function(ModuleBasedConfiguratorSettingsEnvironment(configurator, module))
|
): T = function(ModuleBasedConfiguratorSettingsEnvironment(configurator, module))
|
||||||
|
|
||||||
|
|
||||||
abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwner {
|
abstract class ModuleConfiguratorSettings : SettingsOwner {
|
||||||
override fun <V : Any, T : SettingType<V>> settingDelegate(
|
final override fun <V : Any, T : SettingType<V>> settingDelegate(
|
||||||
create: (path: String) -> SettingBuilder<V, T>
|
create: (path: String) -> SettingBuilder<V, T>
|
||||||
): ReadOnlyProperty<Any?, ModuleConfiguratorSetting<V, T>> = cached { name ->
|
): ReadOnlyProperty<Any?, ModuleConfiguratorSetting<V, T>> = cached { name ->
|
||||||
ModuleConfiguratorSetting(create(name).buildInternal())
|
ModuleConfiguratorSetting(create(name).buildInternal())
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun getConfiguratorSettings(): List<ModuleConfiguratorSetting<*, *>> = emptyList()
|
|
||||||
open fun getPluginSettings(): List<PluginSettingReference<Any, SettingType<Any>>> = emptyList()
|
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
override fun <V : DisplayableSettingItem> dropDownSetting(
|
final override fun <V : DisplayableSettingItem> dropDownSetting(
|
||||||
title: String,
|
title: String,
|
||||||
neededAtPhase: GenerationPhase,
|
neededAtPhase: GenerationPhase,
|
||||||
parser: Parser<V>,
|
parser: Parser<V>,
|
||||||
@@ -76,7 +74,7 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne
|
|||||||
) as ReadOnlyProperty<Any, ModuleConfiguratorSetting<V, DropDownSettingType<V>>>
|
) as ReadOnlyProperty<Any, ModuleConfiguratorSetting<V, DropDownSettingType<V>>>
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
override fun stringSetting(
|
final override fun stringSetting(
|
||||||
title: String,
|
title: String,
|
||||||
neededAtPhase: GenerationPhase,
|
neededAtPhase: GenerationPhase,
|
||||||
init: StringSettingType.Builder.() -> Unit
|
init: StringSettingType.Builder.() -> Unit
|
||||||
@@ -88,7 +86,7 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne
|
|||||||
) as ReadOnlyProperty<Any, ModuleConfiguratorSetting<String, StringSettingType>>
|
) as ReadOnlyProperty<Any, ModuleConfiguratorSetting<String, StringSettingType>>
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
override fun booleanSetting(
|
final override fun booleanSetting(
|
||||||
title: String,
|
title: String,
|
||||||
neededAtPhase: GenerationPhase,
|
neededAtPhase: GenerationPhase,
|
||||||
init: BooleanSettingType.Builder.() -> Unit
|
init: BooleanSettingType.Builder.() -> Unit
|
||||||
@@ -100,7 +98,7 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne
|
|||||||
) as ReadOnlyProperty<Any, ModuleConfiguratorSetting<Boolean, BooleanSettingType>>
|
) as ReadOnlyProperty<Any, ModuleConfiguratorSetting<Boolean, BooleanSettingType>>
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
override fun <V : Any> valueSetting(
|
final override fun <V : Any> valueSetting(
|
||||||
title: String,
|
title: String,
|
||||||
neededAtPhase: GenerationPhase,
|
neededAtPhase: GenerationPhase,
|
||||||
parser: Parser<V>,
|
parser: Parser<V>,
|
||||||
@@ -114,7 +112,7 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne
|
|||||||
) as ReadOnlyProperty<Any, ModuleConfiguratorSetting<V, ValueSettingType<V>>>
|
) as ReadOnlyProperty<Any, ModuleConfiguratorSetting<V, ValueSettingType<V>>>
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
override fun versionSetting(
|
final override fun versionSetting(
|
||||||
title: String,
|
title: String,
|
||||||
neededAtPhase: GenerationPhase,
|
neededAtPhase: GenerationPhase,
|
||||||
init: VersionSettingType.Builder.() -> Unit
|
init: VersionSettingType.Builder.() -> Unit
|
||||||
@@ -126,7 +124,7 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne
|
|||||||
) as ReadOnlyProperty<Any, ModuleConfiguratorSetting<Version, VersionSettingType>>
|
) as ReadOnlyProperty<Any, ModuleConfiguratorSetting<Version, VersionSettingType>>
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
override fun <V : Any> listSetting(
|
final override fun <V : Any> listSetting(
|
||||||
title: String,
|
title: String,
|
||||||
neededAtPhase: GenerationPhase,
|
neededAtPhase: GenerationPhase,
|
||||||
parser: Parser<V>,
|
parser: Parser<V>,
|
||||||
@@ -140,7 +138,7 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne
|
|||||||
) as ReadOnlyProperty<Any, ModuleConfiguratorSetting<List<V>, ListSettingType<V>>>
|
) as ReadOnlyProperty<Any, ModuleConfiguratorSetting<List<V>, ListSettingType<V>>>
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
override fun pathSetting(
|
final override fun pathSetting(
|
||||||
title: String,
|
title: String,
|
||||||
neededAtPhase: GenerationPhase,
|
neededAtPhase: GenerationPhase,
|
||||||
init: PathSettingType.Builder.() -> Unit
|
init: PathSettingType.Builder.() -> Unit
|
||||||
@@ -160,6 +158,12 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne
|
|||||||
init()
|
init()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ModuleConfiguratorWithSettings : ModuleConfigurator {
|
||||||
|
fun getConfiguratorSettings(): List<ModuleConfiguratorSetting<*, *>> = emptyList()
|
||||||
|
fun getPluginSettings(): List<PluginSettingReference<Any, SettingType<Any>>> = emptyList()
|
||||||
|
|
||||||
|
|
||||||
fun initDefaultValuesFor(module: Module, context: Context) {
|
fun initDefaultValuesFor(module: Module, context: Context) {
|
||||||
withSettingsOf(module) {
|
withSettingsOf(module) {
|
||||||
|
|||||||
+13
-11
@@ -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.Module
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
|
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
|
||||||
|
|
||||||
abstract class ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings() {
|
interface ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings {
|
||||||
val testFramework by enumSetting<KotlinTestFramework>(
|
companion object : ModuleConfiguratorSettings() {
|
||||||
"Test Framework",
|
val testFramework by enumSetting<KotlinTestFramework>(
|
||||||
neededAtPhase = GenerationPhase.PROJECT_GENERATION
|
"Test Framework",
|
||||||
) {
|
neededAtPhase = GenerationPhase.PROJECT_GENERATION
|
||||||
defaultValue = defaultTestFramework()
|
) {
|
||||||
|
defaultValue = KotlinTestFramework.COMMON
|
||||||
|
|
||||||
filter = filter@{ reference, kotlinTestFramework ->
|
filter = filter@{ reference, kotlinTestFramework ->
|
||||||
if (reference !is ModuleConfiguratorSettingReference<*, *>) return@filter true
|
if (reference !is ModuleConfiguratorSettingReference<*, *>) return@filter true
|
||||||
|
|
||||||
val moduleType = reference.module?.configurator?.safeAs<ModuleConfiguratorWithModuleType>()?.moduleType
|
val moduleType = reference.module?.configurator?.safeAs<ModuleConfiguratorWithModuleType>()?.moduleType
|
||||||
kotlinTestFramework.moduleType == moduleType
|
kotlinTestFramework.moduleType == moduleType
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract fun defaultTestFramework(): KotlinTestFramework
|
fun defaultTestFramework(): KotlinTestFramework
|
||||||
|
|
||||||
override fun ReadingContext.createModuleIRs(configurationData: ModuleConfigurationData, module: Module): List<BuildSystemIR> =
|
override fun ReadingContext.createModuleIRs(configurationData: ModuleConfigurationData, module: Module): List<BuildSystemIR> =
|
||||||
withSettingsOf(module) {
|
withSettingsOf(module) {
|
||||||
|
|||||||
+4
-4
@@ -23,7 +23,7 @@ interface TargetConfigurator : ModuleConfiguratorWithModuleType {
|
|||||||
fun ReadingContext.createInnerTargetIrs(module: Module): List<BuildSystemIR> = emptyList()
|
fun ReadingContext.createInnerTargetIrs(module: Module): List<BuildSystemIR> = emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class TargetConfiguratorWithTests : ModuleConfiguratorWithTests(), TargetConfigurator
|
abstract class TargetConfiguratorWithTests : ModuleConfiguratorWithTests, TargetConfigurator
|
||||||
|
|
||||||
interface SingleCoexistenceTargetConfigurator : TargetConfigurator {
|
interface SingleCoexistenceTargetConfigurator : TargetConfigurator {
|
||||||
override fun canCoexistsWith(other: List<TargetConfigurator>): Boolean =
|
override fun canCoexistsWith(other: List<TargetConfigurator>): Boolean =
|
||||||
@@ -56,7 +56,7 @@ private fun Module.createTargetAccessIr(moduleSubType: ModuleSubType) =
|
|||||||
|
|
||||||
interface JsTargetConfigurator : JSConfigurator, TargetConfigurator, SingleCoexistenceTargetConfigurator
|
interface JsTargetConfigurator : JSConfigurator, TargetConfigurator, SingleCoexistenceTargetConfigurator
|
||||||
|
|
||||||
object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWithTests() {
|
object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWithTests {
|
||||||
override val id = "jsBrowser"
|
override val id = "jsBrowser"
|
||||||
override val text = "Browser"
|
override val text = "Browser"
|
||||||
override val suggestedModuleName = "browser"
|
override val suggestedModuleName = "browser"
|
||||||
@@ -99,7 +99,7 @@ object CommonTargetConfigurator : TargetConfiguratorWithTests(), SimpleTargetCon
|
|||||||
override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.COMMON
|
override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.COMMON
|
||||||
}
|
}
|
||||||
|
|
||||||
object JvmTargetConfigurator : JvmModuleConfigurator(),
|
object JvmTargetConfigurator : JvmModuleConfigurator,
|
||||||
TargetConfigurator,
|
TargetConfigurator,
|
||||||
SimpleTargetConfigurator {
|
SimpleTargetConfigurator {
|
||||||
override val moduleSubType = ModuleSubType.jvm
|
override val moduleSubType = ModuleSubType.jvm
|
||||||
@@ -110,7 +110,7 @@ object JvmTargetConfigurator : JvmModuleConfigurator(),
|
|||||||
override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JUNIT4
|
override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JUNIT4
|
||||||
|
|
||||||
override fun ReadingContext.createInnerTargetIrs(module: Module): List<BuildSystemIR> = buildList {
|
override fun ReadingContext.createInnerTargetIrs(module: Module): List<BuildSystemIR> = buildList {
|
||||||
val targetVersionValue = withSettingsOf(module) { targetJvmVersion.reference.settingValue.value }
|
val targetVersionValue = withSettingsOf(module) { JvmModuleConfigurator.targetJvmVersion.reference.settingValue.value }
|
||||||
when {
|
when {
|
||||||
buildSystemType.isGradle -> {
|
buildSystemType.isGradle -> {
|
||||||
+GradleSectionIR(
|
+GradleSectionIR(
|
||||||
|
|||||||
+11
-6
@@ -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.BuildSystemType
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle
|
||||||
|
|
||||||
abstract class JvmModuleConfigurator : ModuleConfiguratorWithTests() {
|
interface JvmModuleConfigurator : ModuleConfiguratorWithTests {
|
||||||
val targetJvmVersion by enumSetting<TargetJvmVersion>("Target JVM Version", GenerationPhase.PROJECT_GENERATION) {
|
companion object : ModuleConfiguratorSettings() {
|
||||||
defaultValue = TargetJvmVersion.JVM_1_8
|
val targetJvmVersion by enumSetting<TargetJvmVersion>("Target JVM Version", GenerationPhase.PROJECT_GENERATION) {
|
||||||
|
defaultValue = TargetJvmVersion.JVM_1_8
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getConfiguratorSettings(): List<ModuleConfiguratorSetting<*, *>> = super.getConfiguratorSettings() + targetJvmVersion
|
override fun getConfiguratorSettings(): List<ModuleConfiguratorSetting<*, *>> = buildList {
|
||||||
|
+super.getConfiguratorSettings()
|
||||||
|
+targetJvmVersion
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class TargetJvmVersion(val value: String) : DisplayableSettingItem {
|
enum class TargetJvmVersion(val value: String) : DisplayableSettingItem {
|
||||||
@@ -66,7 +71,7 @@ interface SinglePlatformModuleConfigurator : ModuleConfigurator {
|
|||||||
override val moduleKind get() = ModuleKind.singleplatformJvm
|
override val moduleKind get() = ModuleKind.singleplatformJvm
|
||||||
}
|
}
|
||||||
|
|
||||||
object JvmSinglePlatformModuleConfigurator : JvmModuleConfigurator(),
|
object JvmSinglePlatformModuleConfigurator : JvmModuleConfigurator,
|
||||||
SinglePlatformModuleConfigurator,
|
SinglePlatformModuleConfigurator,
|
||||||
ModuleConfiguratorWithModuleType {
|
ModuleConfiguratorWithModuleType {
|
||||||
override val moduleType get() = ModuleType.jvm
|
override val moduleType get() = ModuleType.jvm
|
||||||
@@ -88,7 +93,7 @@ object JvmSinglePlatformModuleConfigurator : JvmModuleConfigurator(),
|
|||||||
buildList {
|
buildList {
|
||||||
+GradleImportIR("org.jetbrains.kotlin.gradle.tasks.KotlinCompile")
|
+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 {
|
when {
|
||||||
configurationData.buildSystemType.isGradle -> {
|
configurationData.buildSystemType.isGradle -> {
|
||||||
+GradleConfigureTaskIR(
|
+GradleConfigureTaskIR(
|
||||||
|
|||||||
+1
-1
@@ -55,7 +55,7 @@ fun <T> withSettingsOf(
|
|||||||
): T = function(IdBasedTemplateEnvironment(template, identificator))
|
): T = function(IdBasedTemplateEnvironment(template, identificator))
|
||||||
|
|
||||||
|
|
||||||
abstract class Template : SettingsOwner {
|
abstract class Template : SettingsOwner, EntitiesOwnerDescriptor {
|
||||||
final override fun <V : Any, T : SettingType<V>> settingDelegate(
|
final override fun <V : Any, T : SettingType<V>> settingDelegate(
|
||||||
create: (path: String) -> SettingBuilder<V, T>
|
create: (path: String) -> SettingBuilder<V, T>
|
||||||
): ReadOnlyProperty<Any, TemplateSetting<V, T>> = cached { name ->
|
): ReadOnlyProperty<Any, TemplateSetting<V, T>> = cached { name ->
|
||||||
|
|||||||
Reference in New Issue
Block a user