Wizard: introduce Android module type
This commit is contained in:
+27
-30
@@ -7,7 +7,6 @@ import com.intellij.ui.ToolbarDecorator
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.withAllSubModules
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.createPanelWithPopupHandler
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
import javax.swing.JComponent
|
||||
@@ -52,40 +51,32 @@ class ModulesEditorToolbarDecorator(
|
||||
null -> true
|
||||
else -> false
|
||||
}
|
||||
text = when (tree.selectedSettingItem?.safeAs<Module>()?.kind) {
|
||||
ModuleKind.multiplatform -> KotlinNewProjectWizardBundle.message("editor.add.target")
|
||||
ModuleKind.singleplatformJvm -> KotlinNewProjectWizardBundle.message("editor.add.generic.module")
|
||||
ModuleKind.singleplatformJs -> KotlinNewProjectWizardBundle.message("editor.add.javascript.module")
|
||||
ModuleKind.target -> KotlinNewProjectWizardBundle.message("editor.add")
|
||||
null -> KotlinNewProjectWizardBundle.message("editor.add")
|
||||
text = "Add" + when (tree.selectedSettingItem?.safeAs<Module>()?.kind) {
|
||||
ModuleKind.multiplatform -> " Target"
|
||||
ModuleKind.singleplatformJvm -> " Module"
|
||||
ModuleKind.singleplatformJs -> " JS Module"
|
||||
ModuleKind.singleplatformAndroid -> " Android Module"
|
||||
ModuleKind.target -> ""
|
||||
null -> ""
|
||||
}
|
||||
}
|
||||
event.presentation.isEnabled
|
||||
}
|
||||
setRemoveAction {
|
||||
val title = when (selectedModuleKind) {
|
||||
ModuleKind.target -> KotlinNewProjectWizardBundle.message("editor.remove.target.title")
|
||||
else -> KotlinNewProjectWizardBundle.message("editor.remove.module.title")
|
||||
}
|
||||
|
||||
val description = when (selectedModuleKind) {
|
||||
ModuleKind.target -> KotlinNewProjectWizardBundle.message("editor.remove.target.description")
|
||||
else -> KotlinNewProjectWizardBundle.message("editor.remove.module.description")
|
||||
}
|
||||
|
||||
val moduleKindText = selectedModuleKindText ?: "Module"
|
||||
if (Messages.showOkCancelDialog(
|
||||
tree,
|
||||
buildString {
|
||||
appendln(description)
|
||||
appendln("Do you want to remove selected $moduleKindText?")
|
||||
if (tree.selectedSettingItem.safeAs<Module>()?.kind != ModuleKind.target) {
|
||||
appendln(KotlinNewProjectWizardBundle.message("editor.remove.all.submodules"))
|
||||
appendln("This will also remove all submodules.")
|
||||
}
|
||||
appendln()
|
||||
appendln(KotlinNewProjectWizardBundle.message("editor.cant.undone.action"))
|
||||
appendln("This action cannot be undone.")
|
||||
},
|
||||
title,
|
||||
KotlinNewProjectWizardBundle.message("editor.remove.button.remove"),
|
||||
KotlinNewProjectWizardBundle.message("editor.remove.button.cancel"),
|
||||
"Remove selected $moduleKindText?",
|
||||
"Remove",
|
||||
"Cancel",
|
||||
AllIcons.General.QuestionDialog
|
||||
) == Messages.OK
|
||||
) {
|
||||
@@ -95,10 +86,7 @@ class ModulesEditorToolbarDecorator(
|
||||
setRemoveActionUpdater { event ->
|
||||
event.presentation.apply {
|
||||
isEnabled = tree.selectedSettingItem is Module
|
||||
text = when (selectedModuleKind) {
|
||||
ModuleKind.target -> KotlinNewProjectWizardBundle.message("editor.remove.target.toolbutton")
|
||||
else -> KotlinNewProjectWizardBundle.message("editor.remove.module.toolbutton")
|
||||
}
|
||||
text = "Remove" + selectedModuleKindText?.let { " $it" }.orEmpty()
|
||||
}
|
||||
event.presentation.isEnabled
|
||||
}
|
||||
@@ -107,12 +95,21 @@ class ModulesEditorToolbarDecorator(
|
||||
setMoveUpAction(null)
|
||||
}
|
||||
|
||||
private val selectedModuleKind
|
||||
get() = tree.selectedSettingItem.safeAs<Module>()?.kind
|
||||
private val selectedModuleKindText
|
||||
get() = tree.selectedSettingItem.safeAs<Module>()?.kindText
|
||||
|
||||
fun createToolPanel(): JComponent = toolbarDecorator
|
||||
.createPanelWithPopupHandler(tree)
|
||||
.apply {
|
||||
border = null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val Module.kindText
|
||||
get() = when (kind) {
|
||||
ModuleKind.multiplatform -> "Module"
|
||||
ModuleKind.singleplatformJvm -> "Module"
|
||||
ModuleKind.singleplatformJs -> "Module"
|
||||
ModuleKind.singleplatformAndroid -> "Module"
|
||||
ModuleKind.target -> "Target"
|
||||
}
|
||||
+3
@@ -92,6 +92,7 @@ val ModuleType.icon: Icon
|
||||
ModuleType.js -> KotlinIcons.JS
|
||||
ModuleType.native -> KotlinIcons.NATIVE
|
||||
ModuleType.common -> KotlinIcons.SMALL_LOGO
|
||||
ModuleType.android -> KotlinIcons.SMALL_LOGO
|
||||
}
|
||||
|
||||
|
||||
@@ -101,6 +102,7 @@ val Module.icon: Icon
|
||||
ModuleKind.multiplatform -> AllIcons.Nodes.Module
|
||||
ModuleKind.singleplatformJs -> KotlinIcons.JS
|
||||
ModuleKind.singleplatformJvm -> AllIcons.Nodes.Module
|
||||
ModuleKind.singleplatformAndroid -> AllIcons.Nodes.Module
|
||||
}
|
||||
|
||||
val ProjectKind.icon: Icon
|
||||
@@ -121,6 +123,7 @@ val ModuleKind.icon: Icon
|
||||
ModuleKind.singleplatformJs -> KotlinIcons.JS
|
||||
ModuleKind.singleplatformJvm -> AllIcons.Nodes.Module
|
||||
ModuleKind.target -> AllIcons.Nodes.Module
|
||||
ModuleKind.singleplatformAndroid -> AllIcons.Nodes.Module
|
||||
}
|
||||
|
||||
val ModuleConfigurator.icon: Icon
|
||||
|
||||
+1
-1
@@ -41,7 +41,7 @@ interface AndroidModuleConfigurator : ModuleConfigurator,
|
||||
GradleModuleConfigurator {
|
||||
|
||||
override val moduleType: ModuleType
|
||||
get() = ModuleType.jvm
|
||||
get() = ModuleType.android
|
||||
override val greyText: String
|
||||
get() = "Requires Android SDK"
|
||||
|
||||
|
||||
+2
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurati
|
||||
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.buildsystem.Module
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.javaPackage
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate
|
||||
@@ -17,6 +18,7 @@ import java.nio.file.Path
|
||||
object AndroidSinglePlatformModuleConfigurator :
|
||||
SinglePlatformModuleConfigurator,
|
||||
AndroidModuleConfigurator {
|
||||
override val moduleKind: ModuleKind get() = ModuleKind.singleplatformAndroid
|
||||
override val id = "android"
|
||||
override val suggestedModuleName = "android"
|
||||
override val text = "Android"
|
||||
|
||||
+4
-3
@@ -66,14 +66,13 @@ object MppModuleConfigurator : ModuleConfigurator {
|
||||
}
|
||||
|
||||
|
||||
interface SinglePlatformModuleConfigurator : ModuleConfigurator {
|
||||
override val moduleKind get() = ModuleKind.singleplatformJvm
|
||||
}
|
||||
interface SinglePlatformModuleConfigurator : ModuleConfigurator
|
||||
|
||||
object JvmSinglePlatformModuleConfigurator : JvmModuleConfigurator,
|
||||
SinglePlatformModuleConfigurator,
|
||||
ModuleConfiguratorWithModuleType {
|
||||
override val moduleType get() = ModuleType.jvm
|
||||
override val moduleKind: ModuleKind get() = ModuleKind.singleplatformJvm
|
||||
override val suggestedModuleName = "jvm"
|
||||
override val id = "JVM Module"
|
||||
|
||||
@@ -122,6 +121,7 @@ object IOSSinglePlatformModuleConfigurator :
|
||||
SinglePlatformModuleConfigurator {
|
||||
override val id = "IOS Module"
|
||||
override val suggestedModuleName = "ios"
|
||||
override val moduleKind: ModuleKind get() = ModuleKind.singleplatformJvm
|
||||
override val greyText = "Requires Apple Xcode"
|
||||
}
|
||||
|
||||
@@ -132,4 +132,5 @@ val ModuleType.defaultTarget
|
||||
ModuleType.js -> JsBrowserTargetConfigurator
|
||||
ModuleType.native -> NativeForCurrentSystemTarget
|
||||
ModuleType.common -> CommonTargetConfigurator
|
||||
ModuleType.android -> AndroidTargetConfigurator
|
||||
}
|
||||
+6
-2
@@ -2,12 +2,14 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.StdlibType
|
||||
|
||||
//TODO maybe split into interfaces like it made with module configurators
|
||||
@Suppress("EnumEntryName")
|
||||
enum class ModuleType(val projectTypeName: String) {
|
||||
jvm("Kotlin/JVM"),
|
||||
js("Kotlin/JS"),
|
||||
native("Kotlin/Native"),
|
||||
common("Common")
|
||||
common("Common"),
|
||||
android("Android")
|
||||
|
||||
;
|
||||
|
||||
@@ -20,7 +22,8 @@ enum class ModuleType(val projectTypeName: String) {
|
||||
enum class ModuleSubType(val moduleType: ModuleType) {
|
||||
jvm(ModuleType.jvm),
|
||||
js(ModuleType.js),
|
||||
android(ModuleType.jvm), androidNativeArm32(ModuleType.native), androidNativeArm64(ModuleType.native),
|
||||
android(ModuleType.android),
|
||||
androidNativeArm32(ModuleType.native), androidNativeArm64(ModuleType.native),
|
||||
iosArm32(ModuleType.native), iosArm64(ModuleType.native), iosX64(ModuleType.native),
|
||||
linuxArm32Hfp(ModuleType.native), linuxMips32(ModuleType.native), linuxMipsel32(ModuleType.native),
|
||||
linuxX64(ModuleType.native),
|
||||
@@ -34,5 +37,6 @@ fun ModuleType.correspondingStdlib(): StdlibType? = when (this) {
|
||||
ModuleType.js -> StdlibType.StdlibJs
|
||||
ModuleType.native -> null
|
||||
ModuleType.common -> StdlibType.StdlibCommon
|
||||
ModuleType.android -> StdlibType.StdlibJdk7
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -22,6 +22,7 @@ private fun Module.createTag(): TemplateTag? = when (configurator) {
|
||||
ModuleType.jvm -> TemplateTag.JVM
|
||||
ModuleType.js -> TemplateTag.JS
|
||||
ModuleType.native -> TemplateTag.NATIVE
|
||||
ModuleType.android -> TemplateTag.ANDROID
|
||||
ModuleType.common -> null
|
||||
null -> null
|
||||
}
|
||||
|
||||
+1
@@ -16,6 +16,7 @@ enum class ModuleKind : DisplayableSettingItem {
|
||||
multiplatform,
|
||||
target,
|
||||
singleplatformJvm,
|
||||
singleplatformAndroid,
|
||||
singleplatformJs, ;
|
||||
|
||||
override val text: String
|
||||
|
||||
Reference in New Issue
Block a user