Wizard: add tags for project templates
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
|
||||
class TemplateTag private constructor(
|
||||
val text: String,
|
||||
val tooltip: String?,
|
||||
val priority: Int
|
||||
) {
|
||||
companion object {
|
||||
private val allTags = mutableListOf<TemplateTag>()
|
||||
private fun tag(text: String, tooltip: String? = null): TemplateTag =
|
||||
TemplateTag(text, tooltip, priority = allTags.size).also {
|
||||
allTags += it
|
||||
}
|
||||
|
||||
val ALL: List<TemplateTag>
|
||||
get() = allTags
|
||||
|
||||
val MPP = tag("Multiplatform")
|
||||
val JVM = tag("JVM")
|
||||
val JS = tag("JS")
|
||||
val NATIVE = tag("Native")
|
||||
val ANDROID = tag("Android")
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -123,7 +123,7 @@ class KotlinPlugin(context: Context) : Plugin(context) {
|
||||
}
|
||||
|
||||
enum class ProjectKind(override val text: String) : DisplayableSettingItem {
|
||||
Singleplatform("Singleplatform JVM project"),
|
||||
Singleplatform("Singleplatform project"),
|
||||
Multiplatform("Multiplatform project"),
|
||||
Android("Android project"),
|
||||
Js("Kotlin/JS project")
|
||||
|
||||
+29
-4
@@ -1,25 +1,49 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.projectTemplates
|
||||
|
||||
import TemplateTag
|
||||
import org.intellij.lang.annotations.Language
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.AndroidSinglePlatformModuleConfigurator
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JsSingleplatformModuleConfigurator
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.MppModuleConfigurator
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.defaultTarget
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.withAllSubModules
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.*
|
||||
|
||||
private fun Module.createTag(): TemplateTag? = when (configurator) {
|
||||
is MppModuleConfigurator -> TemplateTag.MPP
|
||||
is AndroidModuleConfigurator -> TemplateTag.ANDROID
|
||||
is JSConfigurator -> TemplateTag.JS
|
||||
is ModuleConfiguratorWithModuleType -> when (configurator.moduleType) {
|
||||
ModuleType.jvm -> TemplateTag.JVM
|
||||
ModuleType.js -> TemplateTag.JS
|
||||
ModuleType.native -> TemplateTag.NATIVE
|
||||
ModuleType.common -> null
|
||||
null -> null
|
||||
}
|
||||
else -> null
|
||||
}
|
||||
|
||||
sealed class ProjectTemplate : DisplayableSettingItem {
|
||||
abstract val title: String
|
||||
override val text: String get() = title
|
||||
abstract val htmlDescription: String
|
||||
abstract val suggestedProjectName: String
|
||||
abstract val projectKind: ProjectKind
|
||||
val tags: List<TemplateTag>
|
||||
get() = setsPluginSettings
|
||||
.firstOrNull { it.setting == KotlinPlugin::modules.reference }
|
||||
?.value
|
||||
?.safeAs<List<Module>>()
|
||||
?.withAllSubModules(includeSourcesets = true)
|
||||
?.mapNotNull(Module::createTag)
|
||||
?.distinct()
|
||||
?.sortedBy(TemplateTag::priority)
|
||||
.orEmpty()
|
||||
|
||||
private val setsDefaultValues: List<SettingWithValue<*, *>>
|
||||
get() = listOf(KotlinPlugin::projectKind.reference withValue projectKind)
|
||||
@@ -101,6 +125,7 @@ object CustomSingleplatformProjectTemplate : ProjectTemplate() {
|
||||
override val htmlDescription = title
|
||||
override val suggestedProjectName = "myKotlinJvmProject"
|
||||
override val projectKind = ProjectKind.Singleplatform
|
||||
|
||||
override val setsPluginSettings: List<SettingWithValue<*, *>>
|
||||
get() = listOf(
|
||||
KotlinPlugin::modules withValue listOf(
|
||||
|
||||
+1
-1
@@ -54,7 +54,7 @@ class KtorServerTemplate : Template() {
|
||||
FileTemplateDescriptor("$id/server.kt.vm", "server.kt".asPath()) asSrcOf SourcesetType.main
|
||||
)
|
||||
|
||||
val serverEngine by enumSetting<KtorServerEngine>("Ktor Server", GenerationPhase.PROJECT_GENERATION)
|
||||
val serverEngine by enumSetting<KtorServerEngine>("Ktor Server Engine", GenerationPhase.PROJECT_GENERATION)
|
||||
|
||||
val imports = InterceptionPoint("imports", emptyList<String>())
|
||||
val routes = InterceptionPoint("routes", emptyList<String>())
|
||||
|
||||
Reference in New Issue
Block a user