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
|
||||
|
||||
|
||||
interface SettingsOwner : EntitiesOwnerDescriptor {
|
||||
interface SettingsOwner {
|
||||
fun <V : Any, T : SettingType<V>> settingDelegate(
|
||||
create: (path: String) -> SettingBuilder<V, T>
|
||||
): ReadOnlyProperty<Any, Setting<V, T>>
|
||||
|
||||
-2
@@ -1,7 +1,5 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.core
|
||||
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
interface EntitiesOwnerDescriptor {
|
||||
val id: String
|
||||
}
|
||||
|
||||
+1
@@ -20,6 +20,7 @@ typealias PluginsCreator = (Context) -> List<Plugin>
|
||||
abstract class Plugin(override val context: Context) : EntityBase(),
|
||||
SettingsOwner,
|
||||
ContextOwner,
|
||||
EntitiesOwnerDescriptor,
|
||||
EntitiesOwner<Plugin> {
|
||||
override val descriptor get() = this
|
||||
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 java.nio.file.Path
|
||||
|
||||
object AndroidSinglePlatformModuleConfigurator : ModuleConfiguratorWithSettings(),
|
||||
object AndroidSinglePlatformModuleConfigurator : ModuleConfiguratorWithSettings,
|
||||
SinglePlatformModuleConfigurator,
|
||||
AndroidModuleConfigurator,
|
||||
ModuleConfiguratorWithModuleType {
|
||||
|
||||
+1
-1
@@ -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"
|
||||
|
||||
+16
-12
@@ -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 <T> withSettingsOf(
|
||||
): T = function(ModuleBasedConfiguratorSettingsEnvironment(configurator, module))
|
||||
|
||||
|
||||
abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwner {
|
||||
override fun <V : Any, T : SettingType<V>> settingDelegate(
|
||||
abstract class ModuleConfiguratorSettings : SettingsOwner {
|
||||
final override fun <V : Any, T : SettingType<V>> settingDelegate(
|
||||
create: (path: String) -> SettingBuilder<V, T>
|
||||
): ReadOnlyProperty<Any?, ModuleConfiguratorSetting<V, T>> = cached { name ->
|
||||
ModuleConfiguratorSetting(create(name).buildInternal())
|
||||
}
|
||||
|
||||
open fun getConfiguratorSettings(): List<ModuleConfiguratorSetting<*, *>> = emptyList()
|
||||
open fun getPluginSettings(): List<PluginSettingReference<Any, SettingType<Any>>> = emptyList()
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun <V : DisplayableSettingItem> dropDownSetting(
|
||||
final override fun <V : DisplayableSettingItem> dropDownSetting(
|
||||
title: String,
|
||||
neededAtPhase: GenerationPhase,
|
||||
parser: Parser<V>,
|
||||
@@ -76,7 +74,7 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne
|
||||
) as ReadOnlyProperty<Any, ModuleConfiguratorSetting<V, DropDownSettingType<V>>>
|
||||
|
||||
@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<Any, ModuleConfiguratorSetting<String, StringSettingType>>
|
||||
|
||||
@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<Any, ModuleConfiguratorSetting<Boolean, BooleanSettingType>>
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun <V : Any> valueSetting(
|
||||
final override fun <V : Any> valueSetting(
|
||||
title: String,
|
||||
neededAtPhase: GenerationPhase,
|
||||
parser: Parser<V>,
|
||||
@@ -114,7 +112,7 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne
|
||||
) as ReadOnlyProperty<Any, ModuleConfiguratorSetting<V, ValueSettingType<V>>>
|
||||
|
||||
@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<Any, ModuleConfiguratorSetting<Version, VersionSettingType>>
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun <V : Any> listSetting(
|
||||
final override fun <V : Any> listSetting(
|
||||
title: String,
|
||||
neededAtPhase: GenerationPhase,
|
||||
parser: Parser<V>,
|
||||
@@ -140,7 +138,7 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne
|
||||
) as ReadOnlyProperty<Any, ModuleConfiguratorSetting<List<V>, ListSettingType<V>>>
|
||||
|
||||
@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<ModuleConfiguratorSetting<*, *>> = emptyList()
|
||||
fun getPluginSettings(): List<PluginSettingReference<Any, SettingType<Any>>> = emptyList()
|
||||
|
||||
|
||||
fun initDefaultValuesFor(module: Module, context: Context) {
|
||||
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.ModuleKind
|
||||
|
||||
abstract class ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings() {
|
||||
val testFramework by enumSetting<KotlinTestFramework>(
|
||||
"Test Framework",
|
||||
neededAtPhase = GenerationPhase.PROJECT_GENERATION
|
||||
) {
|
||||
defaultValue = defaultTestFramework()
|
||||
interface ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings {
|
||||
companion object : ModuleConfiguratorSettings() {
|
||||
val testFramework by enumSetting<KotlinTestFramework>(
|
||||
"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<ModuleConfiguratorWithModuleType>()?.moduleType
|
||||
kotlinTestFramework.moduleType == moduleType
|
||||
val moduleType = reference.module?.configurator?.safeAs<ModuleConfiguratorWithModuleType>()?.moduleType
|
||||
kotlinTestFramework.moduleType == moduleType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
abstract fun defaultTestFramework(): KotlinTestFramework
|
||||
fun defaultTestFramework(): KotlinTestFramework
|
||||
|
||||
override fun ReadingContext.createModuleIRs(configurationData: ModuleConfigurationData, module: Module): List<BuildSystemIR> =
|
||||
withSettingsOf(module) {
|
||||
|
||||
+4
-4
@@ -23,7 +23,7 @@ interface TargetConfigurator : ModuleConfiguratorWithModuleType {
|
||||
fun ReadingContext.createInnerTargetIrs(module: Module): List<BuildSystemIR> = emptyList()
|
||||
}
|
||||
|
||||
abstract class TargetConfiguratorWithTests : ModuleConfiguratorWithTests(), TargetConfigurator
|
||||
abstract class TargetConfiguratorWithTests : ModuleConfiguratorWithTests, TargetConfigurator
|
||||
|
||||
interface SingleCoexistenceTargetConfigurator : TargetConfigurator {
|
||||
override fun canCoexistsWith(other: List<TargetConfigurator>): 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<BuildSystemIR> = buildList {
|
||||
val targetVersionValue = withSettingsOf(module) { targetJvmVersion.reference.settingValue.value }
|
||||
val targetVersionValue = withSettingsOf(module) { JvmModuleConfigurator.targetJvmVersion.reference.settingValue.value }
|
||||
when {
|
||||
buildSystemType.isGradle -> {
|
||||
+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.isGradle
|
||||
|
||||
abstract class JvmModuleConfigurator : ModuleConfiguratorWithTests() {
|
||||
val targetJvmVersion by enumSetting<TargetJvmVersion>("Target JVM Version", GenerationPhase.PROJECT_GENERATION) {
|
||||
defaultValue = TargetJvmVersion.JVM_1_8
|
||||
interface JvmModuleConfigurator : ModuleConfiguratorWithTests {
|
||||
companion object : ModuleConfiguratorSettings() {
|
||||
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 {
|
||||
@@ -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(
|
||||
|
||||
+1
-1
@@ -55,7 +55,7 @@ fun <T> withSettingsOf(
|
||||
): T = function(IdBasedTemplateEnvironment(template, identificator))
|
||||
|
||||
|
||||
abstract class Template : SettingsOwner {
|
||||
abstract class Template : SettingsOwner, EntitiesOwnerDescriptor {
|
||||
final override fun <V : Any, T : SettingType<V>> settingDelegate(
|
||||
create: (path: String) -> SettingBuilder<V, T>
|
||||
): ReadOnlyProperty<Any, TemplateSetting<V, T>> = cached { name ->
|
||||
|
||||
Reference in New Issue
Block a user