Wizard: automatically determine Kotlin version based on Kotlin plugin version
For snapshot plugin just take the latest eap or stable version
This commit is contained in:
-5
@@ -1,5 +0,0 @@
|
||||
rootProject.name = "${projectName}"
|
||||
|
||||
#foreach($subProject in $subProjects)
|
||||
include("${subProject}")
|
||||
#end
|
||||
-5
@@ -1,5 +0,0 @@
|
||||
rootProject.name = '${projectName}';
|
||||
|
||||
#foreach($subProject in $subProjects)
|
||||
include('${subProject}')
|
||||
#end
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.tools.projectWizard.core.service
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repositories
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||
|
||||
interface KotlinVersionProviderService : WizardService {
|
||||
fun getKotlinVersion(): Version
|
||||
}
|
||||
|
||||
class KotlinVersionProviderServiceImpl : KotlinVersionProviderService, IdeaIndependentWizardService {
|
||||
override fun getKotlinVersion(): Version = DEFAULT
|
||||
|
||||
companion object {
|
||||
val DEFAULT = Version.fromString("1.3.61")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
val Version.kotlinVersionKind
|
||||
get() = when {
|
||||
"eap" in toString().toLowerCase() -> KotlinVersionKind.EAP
|
||||
"dev" in toString().toLowerCase() -> KotlinVersionKind.DEV
|
||||
"m" in toString().toLowerCase() -> KotlinVersionKind.M
|
||||
else -> KotlinVersionKind.STABLE
|
||||
}
|
||||
|
||||
enum class KotlinVersionKind(val repository: Repository?) {
|
||||
STABLE(repository = null),
|
||||
EAP(repository = Repositories.KOTLIN_EAP_BINTRAY),
|
||||
DEV(repository = Repositories.KOTLIN_DEV_BINTRAY),
|
||||
M(repository = Repositories.KOTLIN_EAP_BINTRAY)
|
||||
}
|
||||
+2
-1
@@ -9,7 +9,8 @@ object Services {
|
||||
ProjectImportingWizardServiceImpl(),
|
||||
OsFileSystemWizardService(),
|
||||
BuildSystemAvailabilityWizardServiceImpl(),
|
||||
DummyFileFormattingService()
|
||||
DummyFileFormattingService(),
|
||||
KotlinVersionProviderServiceImpl()
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -86,6 +86,8 @@ class ListBuilder<T> {
|
||||
irs += this
|
||||
}
|
||||
|
||||
fun isNotEmpty(): Boolean = irs.isNotEmpty()
|
||||
|
||||
fun build() = irs.toList()
|
||||
}
|
||||
|
||||
|
||||
+19
-2
@@ -5,6 +5,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.DefaultTargetConfigurationIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.TargetConfigurationIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.maven.PluginRepositoryMavenIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.BuildFilePrinter
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
|
||||
@@ -12,13 +13,15 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.MavenPrinter
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository
|
||||
import java.nio.file.Path
|
||||
|
||||
interface FileIR : BuildSystemIR, IrsOwner
|
||||
|
||||
data class BuildFileIR(
|
||||
val name: String,
|
||||
val directoryPath: Path,
|
||||
val modules: ModulesStructureIR,
|
||||
val pom: PomIR,
|
||||
override val irs: List<BuildSystemIR>
|
||||
) : BuildSystemIR, IrsOwner {
|
||||
) : FileIR {
|
||||
override fun withReplacedIrs(irs: List<BuildSystemIR>): BuildFileIR = copy(irs = irs)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
@@ -27,7 +30,14 @@ data class BuildFileIR(
|
||||
|
||||
private fun distinctRepositories(): List<RepositoryIR> =
|
||||
irsOfType<RepositoryIR>()
|
||||
.distinctBy { it.repository }
|
||||
.distinctBy(RepositoryIR::repository)
|
||||
.sortedBy { repositoryIR ->
|
||||
if (repositoryIR.repository is DefaultRepository) 0 else 1
|
||||
}
|
||||
|
||||
private fun distinctPluginRepositories(): List<PluginRepositoryMavenIR> =
|
||||
irsOfType<PluginRepositoryMavenIR>()
|
||||
.distinctBy(PluginRepositoryMavenIR::repository)
|
||||
.sortedBy { repositoryIR ->
|
||||
if (repositoryIR.repository is DefaultRepository) 0 else 1
|
||||
}
|
||||
@@ -82,6 +92,13 @@ data class BuildFileIR(
|
||||
}
|
||||
}
|
||||
|
||||
distinctPluginRepositories().takeIf { it.isNotEmpty() }?.let { repositories ->
|
||||
nl()
|
||||
node("pluginRepositories") {
|
||||
repositories.listNl()
|
||||
}
|
||||
}
|
||||
|
||||
val plugins = irsOfType<BuildSystemPluginIR>().takeIf { it.isNotEmpty() }
|
||||
|
||||
if (plugins != null) {
|
||||
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
|
||||
|
||||
data class SettingsGradleFileIR(
|
||||
val projectName: String,
|
||||
val subProjects: List<String>,
|
||||
override val irs: List<BuildSystemIR>
|
||||
) : FileIR, GradleIR {
|
||||
override fun withReplacedIrs(irs: List<BuildSystemIR>): SettingsGradleFileIR = copy(irs = irs)
|
||||
|
||||
override fun GradlePrinter.renderGradle() {
|
||||
+"rootProject.name = "; +projectName.quotified
|
||||
nl(lineBreaks = 2)
|
||||
if (subProjects.isNotEmpty()) {
|
||||
nl()
|
||||
subProjects.list(separator = { nl() }) { subProject ->
|
||||
+"include("; +subProject.quotified; +")"
|
||||
}
|
||||
nl(lineBreaks = 2)
|
||||
}
|
||||
val repositories = irsOfType<RepositoryIR>()
|
||||
if (repositories.isNotEmpty()) {
|
||||
sectionCall("pluginManagement", needIndent = true) {
|
||||
sectionCall("repositories") {
|
||||
repositories.listNl()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.maven
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.BuildFilePrinter
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.MavenPrinter
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
|
||||
|
||||
interface MavenIR : BuildSystemIR {
|
||||
fun MavenPrinter.renderMaven()
|
||||
|
||||
override fun BuildFilePrinter.render() {
|
||||
if (this is MavenPrinter) renderMaven()
|
||||
}
|
||||
}
|
||||
|
||||
data class PluginRepositoryMavenIR(
|
||||
val repository: Repository
|
||||
): MavenIR {
|
||||
override fun MavenPrinter.renderMaven() {
|
||||
node("pluginRepository") {
|
||||
singleLineNode("id") { +repository.idForMaven }
|
||||
singleLineNode("url") { +repository.url }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+13
-11
@@ -2,6 +2,7 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.ModuleConfiguratorSetting
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.kotlinVersionKind
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.AndroidConfigIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.BuildScriptDependencyIR
|
||||
@@ -16,6 +17,7 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugi
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.JavaPackage
|
||||
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.Repository
|
||||
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
|
||||
@@ -34,6 +36,14 @@ object AndroidSinglePlatformModuleConfigurator : ModuleConfiguratorWithSettings(
|
||||
shouldExists()
|
||||
}
|
||||
|
||||
private fun createRepositories(configurationData: ModuleConfigurationData) =buildList<Repository> {
|
||||
+DefaultRepository.GRADLE_PLUGIN_PORTAL
|
||||
+DefaultRepository.GOOGLE
|
||||
+DefaultRepository.JCENTER
|
||||
addIfNotNull(configurationData.kotlinVersion.kotlinVersionKind.repository)
|
||||
}
|
||||
|
||||
|
||||
override fun createBuildFileIRs(configurationData: ModuleConfigurationData, module: Module) =
|
||||
buildList<BuildSystemIR> {
|
||||
+GradleOnlyPluginByNameIR("com.android.application")
|
||||
@@ -45,19 +55,11 @@ object AndroidSinglePlatformModuleConfigurator : ModuleConfiguratorWithSettings(
|
||||
)
|
||||
+GradleOnlyPluginByNameIR("kotlin-android-extensions")
|
||||
+AndroidConfigIR(configurationData.pomIr.artifactId)
|
||||
+listOf(
|
||||
DefaultRepository.GRADLE_PLUGIN_PORTAL,
|
||||
DefaultRepository.GOOGLE,
|
||||
DefaultRepository.JCENTER
|
||||
).map(::RepositoryIR)
|
||||
+createRepositories(configurationData).map(::RepositoryIR)
|
||||
}
|
||||
|
||||
override fun createRootBuildFileIrs(configurationData: ModuleConfigurationData) = buildList<BuildSystemIR> {
|
||||
+listOf(
|
||||
DefaultRepository.GRADLE_PLUGIN_PORTAL,
|
||||
DefaultRepository.GOOGLE,
|
||||
DefaultRepository.JCENTER
|
||||
).map { BuildScriptRepositoryIR(RepositoryIR(it)) }
|
||||
+createRepositories(configurationData).map { BuildScriptRepositoryIR(RepositoryIR(it)) }
|
||||
+listOf(
|
||||
RawGradleIR { call("classpath") { +"com.android.tools.build:gradle:3.2.1".quotified } },
|
||||
RawGradleIR {
|
||||
@@ -113,7 +115,7 @@ object AndroidSinglePlatformModuleConfigurator : ModuleConfiguratorWithSettings(
|
||||
)
|
||||
}
|
||||
|
||||
override fun createStdlibType(configurationData: ModuleConfigurationData, module: Module): StdlibType? =
|
||||
override fun createStdlibType(configurationData: ModuleConfigurationData, module: Module): StdlibType? =
|
||||
StdlibType.StdlibJdk7
|
||||
|
||||
override val settings: List<ModuleConfiguratorSetting<*, *>> =
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ abstract class ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings() {
|
||||
dependencyName,
|
||||
isInMppModule = module.kind
|
||||
.let { it == ModuleKind.multiplatform || it == ModuleKind.target },
|
||||
version = KotlinPlugin::version.settingValue,
|
||||
version = KotlinPlugin::version.propertyValue,
|
||||
dependencyType = DependencyType.TEST
|
||||
)
|
||||
}
|
||||
|
||||
+6
-2
@@ -16,7 +16,9 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.BuildFilePrinter
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.printBuildFile
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.updateBuildFiles
|
||||
import java.nio.file.Path
|
||||
|
||||
abstract class BuildSystemPlugin(context: Context) : Plugin(context) {
|
||||
val type by enumSetting<BuildSystemType>("Build System", GenerationPhase.FIRST_STEP) {
|
||||
@@ -36,7 +38,9 @@ abstract class BuildSystemPlugin(context: Context) : Plugin(context) {
|
||||
|
||||
val buildSystemData by property<List<BuildSystemData>>(emptyList())
|
||||
|
||||
val buildFiles by property<List<BuildFileIR>>(emptyList())
|
||||
val buildFiles by listProperty<BuildFileIR>()
|
||||
|
||||
val pluginRepositoreis by listProperty<Repository>()
|
||||
|
||||
val takeRepositoriesFromDependencies by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||
runBefore(BuildSystemPlugin::createModules)
|
||||
@@ -139,6 +143,6 @@ val TaskRunningContext.allModulesPaths
|
||||
}
|
||||
|
||||
|
||||
val TaskRunningContext.buildSystemType: BuildSystemType
|
||||
val ValuesReadingContext.buildSystemType: BuildSystemType
|
||||
get() = BuildSystemPlugin::type.reference.settingValue
|
||||
|
||||
|
||||
+20
-3
@@ -6,20 +6,24 @@ import org.jetbrains.kotlin.tools.projectWizard.core.checker
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.RootFileModuleStructureIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.ModulesDependencyMavenIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.maven.PluginRepositoryMavenIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.withIrs
|
||||
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.MavenPrinter
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.updateBuildFiles
|
||||
|
||||
class MavenPlugin(context: Context) : BuildSystemPlugin(context) {
|
||||
override val title: String = "Maven"
|
||||
|
||||
private val isMaven = checker {
|
||||
rule(BuildSystemPlugin::type.reference shouldBeEqual BuildSystemType.Maven)
|
||||
}
|
||||
|
||||
val createSettingsFileTask by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||
runAfter(KotlinPlugin::createModules)
|
||||
runBefore(BuildSystemPlugin::createModules)
|
||||
activityChecker = checker {
|
||||
rule(BuildSystemPlugin::type.reference shouldBeEqual BuildSystemType.Maven)
|
||||
}
|
||||
activityChecker = isMaven
|
||||
withAction {
|
||||
BuildSystemPlugin::buildFiles.update { buildFiles ->
|
||||
if (buildFiles.size == 1) return@update buildFiles.asSuccess()
|
||||
@@ -38,6 +42,19 @@ class MavenPlugin(context: Context) : BuildSystemPlugin(context) {
|
||||
}
|
||||
}
|
||||
|
||||
val addBuildSystemPluginRepositories by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||
runAfter(KotlinPlugin::createPluginRepositories)
|
||||
runBefore(BuildSystemPlugin::createModules)
|
||||
activityChecker = isMaven
|
||||
|
||||
withAction {
|
||||
val repositories = BuildSystemPlugin::pluginRepositoreis.propertyValue
|
||||
updateBuildFiles { buildFile ->
|
||||
buildFile.withIrs(repositories.map(::PluginRepositoryMavenIR)).asSuccess()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val addBuildSystemData by addBuildSystemData(
|
||||
BuildSystemData(
|
||||
type = BuildSystemType.Maven,
|
||||
|
||||
+45
-27
@@ -2,14 +2,22 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildFileIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.RepositoryIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.SettingsGradleFileIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.render
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.withIrs
|
||||
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.allModulesPaths
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.buildSystemType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.printBuildFile
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath
|
||||
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.Repositories
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptor
|
||||
@@ -103,33 +111,28 @@ abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
val createSettingsFileTask by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||
runBefore(TemplatesPlugin::addTemplatesToModules)
|
||||
runAfter(KotlinPlugin::createPluginRepositories)
|
||||
activityChecker = isGradle
|
||||
withAction {
|
||||
val templateDescriptor = when (buildSystemType) {
|
||||
BuildSystemType.GradleKotlinDsl -> FileTemplateDescriptor(
|
||||
"gradle/settings.gradle.kts.vm",
|
||||
"settings.gradle.kts".asPath()
|
||||
)
|
||||
BuildSystemType.GradleGroovyDsl -> FileTemplateDescriptor(
|
||||
"gradle/settings.gradle.vm",
|
||||
"settings.gradle".asPath()
|
||||
)
|
||||
else -> return@withAction UNIT_SUCCESS
|
||||
val (createBuildFile, buildFileName) = settingsGradleBuildFileData ?: return@withAction UNIT_SUCCESS
|
||||
|
||||
val repositories = buildList<RepositoryIR> {
|
||||
+BuildSystemPlugin::pluginRepositoreis.propertyValue.map(::RepositoryIR)
|
||||
if (isNotEmpty()) {
|
||||
+RepositoryIR(DefaultRepository.MAVEN_CENTRAL)
|
||||
}
|
||||
}
|
||||
TemplatesPlugin::addFileTemplate.execute(
|
||||
FileTemplate(
|
||||
templateDescriptor,
|
||||
StructurePlugin::projectPath.settingValue,
|
||||
mapOf(
|
||||
"projectName" to StructurePlugin::name.settingValue,
|
||||
"subProjects" to allModulesPaths
|
||||
.map { path ->
|
||||
path.joinToString(separator = "") { ":$it" }
|
||||
}
|
||||
)
|
||||
)
|
||||
val settingsGradleIR = SettingsGradleFileIR(
|
||||
StructurePlugin::name.settingValue,
|
||||
allModulesPaths.map { path -> path.joinToString(separator = "") { ":$it" } },
|
||||
repositories
|
||||
)
|
||||
val buildFileText = createBuildFile().printBuildFile { settingsGradleIR.render(this) }
|
||||
service<FileSystemWizardService>()!!.createFile(
|
||||
projectPath / buildFileName,
|
||||
buildFileText
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -139,3 +142,18 @@ abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) {
|
||||
private val defaultVersions = listOf("5.5.1").map(Version.Companion::fromString)
|
||||
}
|
||||
}
|
||||
|
||||
val ValuesReadingContext.settingsGradleBuildFileData
|
||||
get() = when (buildSystemType) {
|
||||
BuildSystemType.GradleKotlinDsl ->
|
||||
BuildFileData(
|
||||
{ GradlePrinter(GradlePrinter.GradleDsl.KOTLIN) },
|
||||
"settings.gradle.kts"
|
||||
)
|
||||
BuildSystemType.GradleGroovyDsl ->
|
||||
BuildFileData(
|
||||
{ GradlePrinter(GradlePrinter.GradleDsl.GROOVY) },
|
||||
"settings.gradle"
|
||||
)
|
||||
else -> null
|
||||
}
|
||||
+25
-3
@@ -3,10 +3,14 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderService
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderServiceImpl
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.kotlinVersionKind
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.buildSystemType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.pomIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath
|
||||
@@ -16,8 +20,15 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||
import java.nio.file.Path
|
||||
|
||||
class KotlinPlugin(context: Context) : Plugin(context) {
|
||||
val version by versionSetting("Kotlin Version", GenerationPhase.FIRST_STEP) {
|
||||
defaultValue = DEFAULT_VERSION
|
||||
val version by property(KotlinVersionProviderServiceImpl.DEFAULT)
|
||||
|
||||
val initKotlinVersions by pipelineTask(GenerationPhase.PREPARE) {
|
||||
title = "Downloading list of Kotlin versions"
|
||||
|
||||
withAction {
|
||||
val version = service<KotlinVersionProviderService>()!!.getKotlinVersion()
|
||||
KotlinPlugin::version.update { version.asSuccess() }
|
||||
}
|
||||
}
|
||||
|
||||
val projectKind by enumSetting<ProjectKind>("Project Kind", GenerationPhase.FIRST_STEP)
|
||||
@@ -59,6 +70,17 @@ class KotlinPlugin(context: Context) : Plugin(context) {
|
||||
}
|
||||
}
|
||||
|
||||
val createPluginRepositories by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||
runBefore(BuildSystemPlugin::createModules)
|
||||
withAction {
|
||||
val pluginRepository = KotlinPlugin::version.propertyValue.kotlinVersionKind.repository ?: return@withAction UNIT_SUCCESS
|
||||
BuildSystemPlugin::pluginRepositoreis.addValues(pluginRepository) andThen
|
||||
updateBuildFiles { buildFile ->
|
||||
buildFile.withIrs(RepositoryIR(pluginRepository)).asSuccess()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val createSourcesetDirectories by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||
runAfter(KotlinPlugin::createModules)
|
||||
withAction {
|
||||
@@ -83,7 +105,7 @@ class KotlinPlugin(context: Context) : Plugin(context) {
|
||||
modules,
|
||||
projectPath,
|
||||
StructurePlugin::name.settingValue,
|
||||
KotlinPlugin::version.settingValue,
|
||||
KotlinPlugin::version.propertyValue,
|
||||
buildSystemType,
|
||||
pomIR(),
|
||||
this
|
||||
|
||||
+2
-2
@@ -8,8 +8,8 @@ abstract class BuildFilePrinter {
|
||||
private val builder = StringBuilder()
|
||||
protected var currentIndent = 0
|
||||
|
||||
fun nl() {
|
||||
+"\n"
|
||||
fun nl(lineBreaks: Int = 1) {
|
||||
+"\n".repeat(lineBreaks)
|
||||
}
|
||||
|
||||
fun nlIndented() {
|
||||
|
||||
+2
@@ -39,4 +39,6 @@ data class BintrayRepository(val repository: String) : CustomMavenRepository {
|
||||
|
||||
object Repositories {
|
||||
val KTOR_BINTRAY = BintrayRepository("kotlin/ktor")
|
||||
val KOTLIN_EAP_BINTRAY = BintrayRepository("kotlin/kotlin-eap")
|
||||
val KOTLIN_DEV_BINTRAY = BintrayRepository("kotlin/kotlin-dev")
|
||||
}
|
||||
|
||||
+17
-1
@@ -1,20 +1,36 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.settings.version
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.maven.ArtifactVersion
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.maven.DefaultArtifactVersion
|
||||
|
||||
class Version private constructor(internal val mavenVersion: ArtifactVersion) : Comparable<Version> {
|
||||
class Version private constructor(internal val mavenVersion: ArtifactVersion) : Comparable<Version>, DisplayableSettingItem {
|
||||
override fun compareTo(other: Version): Int = mavenVersion.compareTo(other.mavenVersion)
|
||||
override fun equals(other: Any?): Boolean = mavenVersion == other.safeAs<Version>()?.mavenVersion
|
||||
override fun hashCode(): Int = mavenVersion.hashCode()
|
||||
override fun toString(): String = mavenVersion.toString()
|
||||
|
||||
val major
|
||||
get() = mavenVersion.majorVersion
|
||||
val minor
|
||||
get() = mavenVersion.minorVersion
|
||||
val incremental
|
||||
get() = mavenVersion.incrementalVersion
|
||||
|
||||
override val text: String
|
||||
get() = toString()
|
||||
override val greyText: String?
|
||||
get() = null
|
||||
|
||||
companion object {
|
||||
fun fromString(string: String) = Version(
|
||||
DefaultArtifactVersion(string)
|
||||
)
|
||||
|
||||
fun fromComponents(major: Int, minor: Int, incremental: Int) =
|
||||
fromString("$major.$minor.$incremental")
|
||||
|
||||
val parser: Parser<Version> = valueParser { value, path ->
|
||||
val (stringVersion) = value.parseAs<String>(path)
|
||||
safe { fromString(stringVersion) }.mapFailure {
|
||||
|
||||
Reference in New Issue
Block a user