Wizard: use different Kotlin version for compose templates

This commit is contained in:
Ilya Kirillov
2020-10-13 01:57:46 +03:00
parent 1cc007fcbf
commit b7017c233e
18 changed files with 50 additions and 24 deletions
@@ -16,12 +16,16 @@ import org.jetbrains.kotlin.tools.projectWizard.core.safe
import org.jetbrains.kotlin.tools.projectWizard.core.service.EapVersionDownloader
import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardKotlinVersion
import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderService
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
import org.jetbrains.kotlin.tools.projectWizard.wizard.KotlinNewProjectWizardUIBundle
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.runWithProgressBar
class IdeaKotlinVersionProviderService : KotlinVersionProviderService(), IdeaWizardService {
override fun getKotlinVersion(): WizardKotlinVersion {
override fun getKotlinVersion(projectKind: ProjectKind): WizardKotlinVersion {
if (projectKind == ProjectKind.COMPOSE) {
return kotlinVersionWithDefaultValues(Versions.KOTLIN_VERSION_FOR_COMPOSE)
}
val version = getPatchedKotlinVersion()
?: getKotlinVersionFromCompiler()
?: VersionsDownloader.downloadLatestEapOrStableKotlinVersion()
@@ -3,6 +3,7 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.firstStep
import com.intellij.ui.JBColor
import com.intellij.ui.ScrollPaneFactory
import com.intellij.ui.SeparatorWithText
import com.intellij.ui.SimpleTextAttributes
import com.intellij.util.ui.JBUI
import org.jetbrains.kotlin.idea.KotlinIcons
import org.jetbrains.kotlin.tools.projectWizard.core.Context
@@ -40,6 +41,10 @@ class ProjectTemplateSettingComponent(
render = { value ->
icon = value.icon
append(value.title)
value.projectKind.message?.let { message ->
append(" ")
append(message, SimpleTextAttributes.GRAYED_ATTRIBUTES)
}
},
onValueSelected = { value = it }
)
@@ -6,11 +6,14 @@ import org.jetbrains.kotlin.tools.projectWizard.core.Context
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.CommonTargetConfigurator
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.getConfiguratorSettings
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.moduleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin
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.templates.TemplatesPlugin
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
@@ -165,14 +168,14 @@ private class ModuleTemplateComponent(
private object NoneTemplate : Template() {
override val title = KotlinNewProjectWizardUIBundle.message("module.settings.template.none")
override val description: String = ""
override fun isSupportedByModuleType(module: Module): Boolean = true
override fun isSupportedByModuleType(module: Module, projectKind: ProjectKind): Boolean = true
override val id: String = "none"
}
fun Reader.availableTemplatesFor(module: Module) =
TemplatesPlugin.templates.propertyValue.values.filter { template ->
template.isSupportedByModuleType(module)
template.isSupportedByModuleType(module, KotlinPlugin.projectKind.settingValue)
}
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.service.EapVersionDownloade
import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardKotlinVersion
import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionKind
import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderService
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.BintrayRepository
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
@@ -18,7 +19,7 @@ class KotlinVersionProviderTestWizardService() : KotlinVersionProviderService(),
get() = System.getProperty("cacheRedirectorEnabled")?.toBoolean() == true
override fun getKotlinVersion(): WizardKotlinVersion =
override fun getKotlinVersion(projectKind: ProjectKind): WizardKotlinVersion =
kotlinVersionWithDefaultValues(TEST_KOTLIN_VERSION)
override fun getKotlinVersionRepository(versionKind: KotlinVersionKind): Repository = if (useCacheRedirector) {
@@ -39,7 +39,7 @@ project.kind.android=Android
project.kind.kotlin.js=Kotlin/JS
project.kind.multiplatform=Multiplatform
project.kind.singleplatform=JVM
project.kind.compose=JetBrains Compose
project.kind.compose=JetBrains Compose (Experimental)
project=Project
@@ -16,6 +16,8 @@ object Versions {
val JUNIT5 = version("5.6.0")
val JETBRAINS_COMPOSE = version("0.1.0-build63")
val KOTLIN_VERSION_FOR_COMPOSE = version("1.4.0")
object ANDROID {
val ANDROID_MATERIAL = version("1.2.1")
val ANDROIDX_APPCOMPAT = version("1.2.0")
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.TaskResult
import org.jetbrains.kotlin.tools.projectWizard.core.asNullable
import org.jetbrains.kotlin.tools.projectWizard.core.compute
import org.jetbrains.kotlin.tools.projectWizard.core.safe
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repositories
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
@@ -23,7 +24,7 @@ import java.util.stream.Collectors
data class WizardKotlinVersion(val version: Version, val kind: KotlinVersionKind, val repository: Repository)
abstract class KotlinVersionProviderService : WizardService {
abstract fun getKotlinVersion(): WizardKotlinVersion
abstract fun getKotlinVersion(projectKind: ProjectKind): WizardKotlinVersion
protected fun kotlinVersionWithDefaultValues(version: Version) = WizardKotlinVersion(
version,
@@ -52,7 +53,7 @@ abstract class KotlinVersionProviderService : WizardService {
class KotlinVersionProviderServiceImpl : KotlinVersionProviderService(), IdeaIndependentWizardService {
override fun getKotlinVersion(): WizardKotlinVersion =
override fun getKotlinVersion(projectKind: ProjectKind): WizardKotlinVersion =
kotlinVersionWithDefaultValues(Versions.KOTLIN)
}
@@ -62,7 +62,7 @@ class KotlinPlugin(context: Context) : Plugin(context) {
title = KotlinNewProjectWizardBundle.message("plugin.kotlin.downloading.kotlin.versions")
withAction {
val version = service<KotlinVersionProviderService>().getKotlinVersion()
val version = service<KotlinVersionProviderService>().getKotlinVersion(projectKind.settingValue)
KotlinPlugin.version.update { version.asSuccess() }
}
}
@@ -194,12 +194,12 @@ class KotlinPlugin(context: Context) : Plugin(context) {
}
enum class ProjectKind(override val text: String) : DisplayableSettingItem {
enum class ProjectKind(override val text: String, val message: String? = null) : DisplayableSettingItem {
Singleplatform(KotlinNewProjectWizardBundle.message("project.kind.singleplatform")),
Multiplatform(KotlinNewProjectWizardBundle.message("project.kind.multiplatform")),
Android(KotlinNewProjectWizardBundle.message("project.kind.android")),
Js(KotlinNewProjectWizardBundle.message("project.kind.kotlin.js")),
COMPOSE(KotlinNewProjectWizardBundle.message("project.kind.compose"))
COMPOSE(KotlinNewProjectWizardBundle.message("project.kind.compose"), message = "uses Kotlin ${Versions.KOTLIN_VERSION_FOR_COMPOSE}")
}
fun List<Module>.withAllSubModules(includeSourcesets: Boolean = false): List<Module> = buildList {
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetTy
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.moduleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
class ConsoleJvmApplicationTemplate : Template() {
@@ -24,7 +25,7 @@ class ConsoleJvmApplicationTemplate : Template() {
override val description: String = KotlinNewProjectWizardBundle.message("module.template.console.jvm.description")
override fun isSupportedByModuleType(module: Module): Boolean =
override fun isSupportedByModuleType(module: Module, projectKind: ProjectKind): Boolean =
module.configurator.moduleType == ModuleType.jvm
override fun Writer.getIrsToAddToBuildFile(
@@ -15,12 +15,13 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatf
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.*
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.TemplateInterceptor
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.interceptTemplate
abstract class JsClientTemplate : Template() {
override fun isSupportedByModuleType(module: Module): Boolean =
override fun isSupportedByModuleType(module: Module, projectKind: ProjectKind): Boolean =
module.configurator.moduleType == ModuleType.js
override fun isApplicableTo(
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.moduleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
@@ -33,7 +34,7 @@ class KtorServerTemplate : Template() {
override val title: String = KotlinNewProjectWizardBundle.message("module.template.ktor.server.title")
override val description: String = KotlinNewProjectWizardBundle.message("module.template.ktor.server.description")
override fun isSupportedByModuleType(module: Module): Boolean =
override fun isSupportedByModuleType(module: Module, projectKind: ProjectKind): Boolean =
module.configurator.moduleType == ModuleType.jvm
@NonNls
@@ -17,13 +17,14 @@ import org.jetbrains.kotlin.tools.projectWizard.core.*
import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.NativeTargetConfigurator
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.moduleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
class NativeConsoleApplicationTemplate : Template() {
override val title: String = KotlinNewProjectWizardBundle.message("module.template.native.console.title")
override val description: String = KotlinNewProjectWizardBundle.message("module.template.native.console.description")
override fun isSupportedByModuleType(module: Module): Boolean =
override fun isSupportedByModuleType(module: Module, projectKind: ProjectKind): Boolean =
module.configurator.moduleType == ModuleType.native
override val id: String = "nativeConsoleApp"
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.NodeJsSingle
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.moduleType
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository.Companion.JCENTER
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType
@@ -28,7 +29,7 @@ class SimpleNodeJsTemplate : Template() {
override val description: String = KotlinNewProjectWizardBundle.message("module.template.simple.nodejs.description")
override fun isSupportedByModuleType(module: Module): Boolean =
override fun isSupportedByModuleType(module: Module, projectKind: ProjectKind): Boolean =
module.configurator.moduleType == ModuleType.js
@NonNls
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.RunConfigurationsPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
@@ -72,7 +73,7 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor, DisplayableSet
abstract val title: String
abstract val description: String
abstract fun isSupportedByModuleType(module: Module): Boolean
abstract fun isSupportedByModuleType(module: Module, projectKind: ProjectKind): Boolean
override val text: String get() = title
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.inContextOfM
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.moduleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
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.pomIR
import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin
import org.jetbrains.kotlin.tools.projectWizard.settings.JavaPackage
@@ -39,8 +40,8 @@ class ComposeAndroidTemplate : Template() {
override val description: String = KotlinNewProjectWizardBundle.message("module.template.compose.desktop.description")
override fun isSupportedByModuleType(module: Module): Boolean =
module.configurator.moduleType == ModuleType.android
override fun isSupportedByModuleType(module: Module, projectKind: ProjectKind): Boolean =
module.configurator.moduleType == ModuleType.android && projectKind == ProjectKind.COMPOSE
override fun isApplicableTo(reader: Reader, module: Module): Boolean =
module.kind == ModuleKind.singleplatformAndroid
@@ -78,7 +79,7 @@ class ComposeAndroidTemplate : Template() {
when {
descriptor == AndroidModuleConfigurator.FileTemplateDescriptors.activityMainXml
|| descriptor == AndroidModuleConfigurator.FileTemplateDescriptors.colorsXml
|| descriptor == AndroidModuleConfigurator.FileTemplateDescriptors.stylesXml -> null
|| descriptor == AndroidModuleConfigurator.FileTemplateDescriptors.stylesXml -> null
descriptor?.templateId == "android/MainActivity.kt.vm" -> {
template.copy(descriptor = mainActivityKt(module.originalModule.javaPackage(pomIR())))
}
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.inContextOfM
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.moduleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
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.pomIR
import org.jetbrains.kotlin.tools.projectWizard.settings.JavaPackage
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.*
@@ -32,8 +33,8 @@ class ComposeJvmDesktopTemplate : Template() {
override val title: String = KotlinNewProjectWizardBundle.message("module.template.compose.desktop.title")
override val description: String = KotlinNewProjectWizardBundle.message("module.template.compose.desktop.description")
override fun isSupportedByModuleType(module: Module): Boolean =
module.configurator.moduleType == ModuleType.jvm
override fun isSupportedByModuleType(module: Module, projectKind: ProjectKind): Boolean =
module.configurator.moduleType == ModuleType.jvm && projectKind == ProjectKind.COMPOSE
override fun isApplicableTo(reader: Reader, module: Module): Boolean =
module.kind == ModuleKind.singleplatformJvm
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.*
import org.jetbrains.kotlin.tools.projectWizard.mpp.applyMppStructure
import org.jetbrains.kotlin.tools.projectWizard.mpp.mppSources
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.plugins.pomIR
import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository
@@ -38,8 +39,8 @@ class ComposeMppModuleTemplate : Template() {
override val title: String = KotlinNewProjectWizardBundle.message("module.template.compose.mpp.title")
override val description: String = KotlinNewProjectWizardBundle.message("module.template.compose.mpp.description")
override fun isSupportedByModuleType(module: Module): Boolean =
module.configurator == MppModuleConfigurator
override fun isSupportedByModuleType(module: Module, projectKind: ProjectKind): Boolean =
module.configurator == MppModuleConfigurator && projectKind == ProjectKind.COMPOSE
override fun Writer.getIrsToAddToBuildFile(module: ModuleIR): List<BuildSystemIR> = irsList {
+GradleImportIR("org.jetbrains.compose.compose")
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.MppModuleCon
import org.jetbrains.kotlin.tools.projectWizard.mpp.applyMppStructure
import org.jetbrains.kotlin.tools.projectWizard.mpp.mppSources
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.plugins.pomIR
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
@@ -33,7 +34,7 @@ class MobileMppTemplate : Template() {
override val title: String = KotlinNewProjectWizardBundle.message("module.template.mpp.mobile.title")
override val description: String = KotlinNewProjectWizardBundle.message("module.template.mpp.mobile.description")
override fun isSupportedByModuleType(module: Module): Boolean =
override fun isSupportedByModuleType(module: Module, projectKind: ProjectKind): Boolean =
module.configurator == MppModuleConfigurator