Wizard: remove module types for some module configurators

#KT-36176 fixed
This commit is contained in:
Ilya Kirillov
2020-02-10 16:53:27 +03:00
parent 0123dbce21
commit fabb0584da
16 changed files with 26 additions and 26 deletions
@@ -5,6 +5,7 @@ import org.jetbrains.kotlin.idea.projectWizard.UiEditorUsageStats
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.configuratorSettings import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.configuratorSettings
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.moduleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module.Companion.ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module.Companion.ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES
@@ -10,6 +10,7 @@ import com.intellij.util.ui.UIUtil
import org.jetbrains.kotlin.idea.KotlinIcons import org.jetbrains.kotlin.idea.KotlinIcons
import org.jetbrains.kotlin.idea.projectWizard.UiEditorUsageStats import org.jetbrains.kotlin.idea.projectWizard.UiEditorUsageStats
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.moduleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
import org.jetbrains.kotlin.tools.projectWizard.templates.Template import org.jetbrains.kotlin.tools.projectWizard.templates.Template
@@ -1,5 +1,6 @@
package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep.modulesEditor package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep.modulesEditor
import com.intellij.icons.AllIcons
import com.intellij.openapi.ui.popup.ListPopup import com.intellij.openapi.ui.popup.ListPopup
import com.intellij.openapi.ui.popup.PopupStep import com.intellij.openapi.ui.popup.PopupStep
import com.intellij.openapi.ui.popup.util.BaseListPopupStep import com.intellij.openapi.ui.popup.util.BaseListPopupStep
@@ -71,7 +72,7 @@ class CreateModuleOrTargetPopup private constructor(
) { ) {
override fun getIconFor(value: DisplayableSettingItem): Icon? = when (value) { override fun getIconFor(value: DisplayableSettingItem): Icon? = when (value) {
is DisplayableTargetConfiguratorGroup -> value.moduleType.icon is DisplayableTargetConfiguratorGroup -> value.moduleType.icon
is ModuleConfigurator -> value.moduleType.icon is ModuleConfigurator -> value.moduleType?.icon ?: AllIcons.Nodes.Module
else -> null else -> null
} }
@@ -27,7 +27,6 @@ class NewModuleCreator {
SourcesetType.values().map { sourcesetType -> SourcesetType.values().map { sourcesetType ->
Sourceset( Sourceset(
sourcesetType, sourcesetType,
configurator.moduleType,
dependencies = emptyList() dependencies = emptyList()
) )
} }
@@ -57,7 +56,6 @@ class NewModuleCreator {
else -> SourcesetType.values().map { sourcesetType -> else -> SourcesetType.values().map { sourcesetType ->
Sourceset( Sourceset(
sourcesetType, sourcesetType,
ModuleType.jvm,
dependencies = emptyList() dependencies = emptyList()
) )
} }
@@ -89,7 +89,7 @@ val ModuleType.icon: Icon
val Module.icon: Icon val Module.icon: Icon
get() = when (kind) { get() = when (kind) {
ModuleKind.target -> configurator.moduleType.icon ModuleKind.target -> (configurator as TargetConfigurator).moduleType.icon
ModuleKind.multiplatform -> AllIcons.Nodes.Module ModuleKind.multiplatform -> AllIcons.Nodes.Module
ModuleKind.singleplatformJs -> KotlinIcons.JS ModuleKind.singleplatformJs -> KotlinIcons.JS
ModuleKind.singleplatformJvm -> AllIcons.Nodes.Module ModuleKind.singleplatformJvm -> AllIcons.Nodes.Module
@@ -16,7 +16,6 @@ sealed class ModuleIR : IrsOwner, BuildSystemIR {
abstract val name: String abstract val name: String
abstract val path: Path abstract val path: Path
abstract val template: Template? abstract val template: Template?
abstract val type: ModuleType
abstract val originalModule: Module abstract val originalModule: Module
abstract val sourcesets: List<SourcesetIR> abstract val sourcesets: List<SourcesetIR>
} }
@@ -27,7 +26,6 @@ data class SingleplatformModuleIR(
override val path: Path, override val path: Path,
override val irs: List<BuildSystemIR>, override val irs: List<BuildSystemIR>,
override val template: Template?, override val template: Template?,
override val type: ModuleType,
override val originalModule: Module, override val originalModule: Module,
override val sourcesets: List<SingleplatformSourcesetIR> override val sourcesets: List<SingleplatformSourcesetIR>
) : ModuleIR() { ) : ModuleIR() {
@@ -52,7 +50,6 @@ data class MultiplatformModuleIR(
override val name: String, override val name: String,
override val path: Path, override val path: Path,
override val irs: List<BuildSystemIR>, override val irs: List<BuildSystemIR>,
override val type: ModuleType,
override val template: Template?, override val template: Template?,
override val originalModule: Module, override val originalModule: Module,
override val sourcesets: List<MultiplatformSourcesetIR> override val sourcesets: List<MultiplatformSourcesetIR>
@@ -26,7 +26,8 @@ import java.nio.file.Path
object AndroidSinglePlatformModuleConfigurator : ModuleConfiguratorWithSettings(), object AndroidSinglePlatformModuleConfigurator : ModuleConfiguratorWithSettings(),
SinglePlatformModuleConfigurator, SinglePlatformModuleConfigurator,
AndroidModuleConfigurator { AndroidModuleConfigurator,
ModuleConfiguratorWithModuleType{
override val moduleType = ModuleType.jvm override val moduleType = ModuleType.jvm
override val id = "android" override val id = "android"
override val suggestedModuleName = "android" override val suggestedModuleName = "android"
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
interface JSConfigurator : ModuleConfigurator { interface JSConfigurator : ModuleConfiguratorWithModuleType {
override val moduleType: ModuleType get() = ModuleType.js override val moduleType: ModuleType get() = ModuleType.js
} }
@@ -184,7 +184,6 @@ val Module.configuratorSettings
interface ModuleConfigurator : DisplayableSettingItem, EntitiesOwnerDescriptor { interface ModuleConfigurator : DisplayableSettingItem, EntitiesOwnerDescriptor {
val moduleKind: ModuleKind val moduleKind: ModuleKind
val moduleType: ModuleType
override val text: String override val text: String
get() = id get() = id
@@ -198,7 +197,7 @@ interface ModuleConfigurator : DisplayableSettingItem, EntitiesOwnerDescriptor {
emptyList() emptyList()
fun createStdlibType(configurationData: ModuleConfigurationData, module: Module): StdlibType? = fun createStdlibType(configurationData: ModuleConfigurationData, module: Module): StdlibType? =
moduleType.correspondingStdlib() safeAs<ModuleConfiguratorWithModuleType>()?.moduleType?.correspondingStdlib()
fun createRootBuildFileIrs(configurationData: ModuleConfigurationData): List<BuildSystemIR> = emptyList() fun createRootBuildFileIrs(configurationData: ModuleConfigurationData): List<BuildSystemIR> = emptyList()
fun createKotlinPluginIR(configurationData: ModuleConfigurationData, module: Module): KotlinBuildSystemPluginIR? = fun createKotlinPluginIR(configurationData: ModuleConfigurationData, module: Module): KotlinBuildSystemPluginIR? =
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.entity.ModuleConfiguratorSetting import org.jetbrains.kotlin.tools.projectWizard.core.entity.ModuleConfiguratorSetting
import org.jetbrains.kotlin.tools.projectWizard.core.entity.ModuleConfiguratorSettingReference import org.jetbrains.kotlin.tools.projectWizard.core.entity.ModuleConfiguratorSettingReference
import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.DependencyType import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.DependencyType
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinArbitraryDependencyIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinArbitraryDependencyIR
@@ -29,7 +30,7 @@ abstract class ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings() {
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?.moduleType val moduleType = reference.module?.configurator?.safeAs<ModuleConfiguratorWithModuleType>()?.moduleType
kotlinTestFramework.moduleType == moduleType kotlinTestFramework.moduleType == moduleType
} }
} }
@@ -11,7 +11,7 @@ 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
interface TargetConfigurator : ModuleConfigurator { interface TargetConfigurator : ModuleConfiguratorWithModuleType {
override val moduleKind get() = ModuleKind.target override val moduleKind get() = ModuleKind.target
fun canCoexistsWith(other: List<TargetConfigurator>): Boolean = true fun canCoexistsWith(other: List<TargetConfigurator>): Boolean = true
@@ -1,5 +1,6 @@
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinBuildSystemPluginIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinBuildSystemPluginIR
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurationData import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurationData
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
@@ -9,9 +10,14 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
interface JvmModuleConfigurator : ModuleConfigurator interface JvmModuleConfigurator : ModuleConfigurator
interface AndroidModuleConfigurator : ModuleConfigurator interface AndroidModuleConfigurator : ModuleConfigurator
interface ModuleConfiguratorWithModuleType : ModuleConfigurator {
val moduleType: ModuleType
}
val ModuleConfigurator.moduleType: ModuleType?
get() = safeAs<ModuleConfiguratorWithModuleType>()?.moduleType
object MppModuleConfigurator : ModuleConfigurator { object MppModuleConfigurator : ModuleConfigurator {
override val moduleType = ModuleType.jvm // TODO
override val moduleKind = ModuleKind.multiplatform override val moduleKind = ModuleKind.multiplatform
override val suggestedModuleName = "shared" override val suggestedModuleName = "shared"
override val id = "multiplatform" override val id = "multiplatform"
@@ -28,12 +34,12 @@ object MppModuleConfigurator : ModuleConfigurator {
interface SinglePlatformModuleConfigurator : ModuleConfigurator { interface SinglePlatformModuleConfigurator : ModuleConfigurator {
override val moduleKind get() = ModuleKind.singleplatformJvm override val moduleKind get() = ModuleKind.singleplatformJvm
} }
object JvmSinglePlatformModuleConfigurator : ModuleConfiguratorWithTests(), object JvmSinglePlatformModuleConfigurator : ModuleConfiguratorWithTests(),
SinglePlatformModuleConfigurator, SinglePlatformModuleConfigurator,
JvmModuleConfigurator { JvmModuleConfigurator,
ModuleConfiguratorWithModuleType {
override val moduleType get() = ModuleType.jvm override val moduleType get() = ModuleType.jvm
override val suggestedModuleName = "jvm" override val suggestedModuleName = "jvm"
override val id = "JVM Module" override val id = "JVM Module"
@@ -52,7 +58,6 @@ object JvmSinglePlatformModuleConfigurator : ModuleConfiguratorWithTests(),
object IOSSinglePlatformModuleConfigurator : object IOSSinglePlatformModuleConfigurator :
SinglePlatformModuleConfigurator { SinglePlatformModuleConfigurator {
override val moduleType get() = ModuleType.jvm //todo
override val id = "IOS Module" override val id = "IOS Module"
override val suggestedModuleName = "ios" override val suggestedModuleName = "ios"
override val greyText = "Requires Apple Xcode" override val greyText = "Requires Apple Xcode"
@@ -120,7 +120,6 @@ class ModulesToIRsConverter(
modulePath, modulePath,
dependenciesIRs, dependenciesIRs,
module.template, module.template,
module.configurator.moduleType,
module, module,
module.sourcesets.map { sourceset -> module.sourcesets.map { sourceset ->
SingleplatformSourcesetIR( SingleplatformSourcesetIR(
@@ -210,7 +209,6 @@ class ModulesToIRsConverter(
target.name, target.name,
modulePath, modulePath,
with(target.configurator) { createModuleIRs(data, target) }, with(target.configurator) { createModuleIRs(data, target) },
target.configurator.moduleType,
target.template, target.template,
target, target,
sourcesetss sourcesetss
@@ -88,7 +88,6 @@ private fun ModuleType.createDefaultSourcesets() =
SourcesetType.values().map { sourcesetType -> SourcesetType.values().map { sourcesetType ->
Sourceset( Sourceset(
sourcesetType, sourcesetType,
this,
dependencies = emptyList() dependencies = emptyList()
) )
} }
@@ -212,7 +211,7 @@ object AndroidApplication : ProjectTemplate() {
AndroidSinglePlatformModuleConfigurator, AndroidSinglePlatformModuleConfigurator,
template = null, template = null,
sourcesets = SourcesetType.ALL.map { type -> sourcesets = SourcesetType.ALL.map { type ->
Sourceset(type, ModuleType.jvm, dependencies = emptyList()) Sourceset(type, dependencies = emptyList())
}, },
subModules = emptyList() subModules = emptyList()
) )
@@ -260,7 +259,7 @@ object JsBrowserApplication : ProjectTemplate() {
JsSingleplatformModuleConfigurator, JsSingleplatformModuleConfigurator,
template = SimpleJsClientTemplate(), template = SimpleJsClientTemplate(),
sourcesets = SourcesetType.ALL.map { type -> sourcesets = SourcesetType.ALL.map { type ->
Sourceset(type, ModuleType.jvm, dependencies = emptyList()) Sourceset(type, dependencies = emptyList())
}, },
subModules = emptyList() subModules = emptyList()
) )
@@ -98,7 +98,7 @@ class Module(
this, this,
path, path,
"sourcesets", "sourcesets",
listParser(Sourceset.parser(configurator.moduleType)) listParser(Sourceset.parser())
) { emptyList() } ) { emptyList() }
val (submodules) = map.parseValue(this, path, "subModules", listParser(Module.parser)) { emptyList() } val (submodules) = map.parseValue(this, path, "subModules", listParser(Module.parser)) { emptyList() }
Module(name, kind, configurator, template, sourcesets, submodules, identificator = identificator) Module(name, kind, configurator, template, sourcesets, submodules, identificator = identificator)
@@ -35,7 +35,6 @@ data class PathBasedSourcesetDependency(val path: ModulePath) : SourcesetDepende
// A `main` or `test` sourceset for single or multiplatform projects // A `main` or `test` sourceset for single or multiplatform projects
class Sourceset( class Sourceset(
val sourcesetType: SourcesetType, val sourcesetType: SourcesetType,
val containingModuleType: ModuleType,
var dependencies: List<SourcesetDependency>, var dependencies: List<SourcesetDependency>,
var parent: Module? = null, var parent: Module? = null,
override val identificator: Identificator = GeneratedIdentificator(sourcesetType.name) override val identificator: Identificator = GeneratedIdentificator(sourcesetType.name)
@@ -44,7 +43,7 @@ class Sourceset(
override val greyText: String? get() = null override val greyText: String? get() = null
companion object { companion object {
fun parser(moduleType: ModuleType) = mapParser { map, path -> fun parser() = mapParser { map, path ->
val (sourcesetType) = map.parseValue<SourcesetType>(this, path, "type", enumParser()) val (sourcesetType) = map.parseValue<SourcesetType>(this, path, "type", enumParser())
val identificator = GeneratedIdentificator(sourcesetType.name) val identificator = GeneratedIdentificator(sourcesetType.name)
val (dependencies) = map.parseValue( val (dependencies) = map.parseValue(
@@ -54,7 +53,7 @@ class Sourceset(
listParser(PathBasedSourcesetDependency.parser) listParser(PathBasedSourcesetDependency.parser)
) { emptyList() } ) { emptyList() }
Sourceset(sourcesetType, moduleType, dependencies, identificator = identificator) Sourceset(sourcesetType, dependencies, identificator = identificator)
} }
} }
} }