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:
+1
-1
@@ -172,7 +172,7 @@ public class ConfigureDialogWithModulesAndVersion extends DialogWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
protected static Collection<String> loadVersions(String minimumVersion) throws Exception {
|
public static Collection<String> loadVersions(String minimumVersion) throws Exception {
|
||||||
List<String> versions = Lists.newArrayList();
|
List<String> versions = Lists.newArrayList();
|
||||||
|
|
||||||
String bundledRuntimeVersion = KotlinRuntimeLibraryUtilKt.bundledRuntimeVersion();
|
String bundledRuntimeVersion = KotlinRuntimeLibraryUtilKt.bundledRuntimeVersion();
|
||||||
|
|||||||
+65
@@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
* 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.wizard.service
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.idea.KotlinPluginUtil
|
||||||
|
import org.jetbrains.kotlin.idea.framework.ui.ConfigureDialogWithModulesAndVersion
|
||||||
|
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.core.service.KotlinVersionProviderService
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderServiceImpl
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||||
|
import java.io.BufferedReader
|
||||||
|
import java.io.InputStreamReader
|
||||||
|
import java.net.URL
|
||||||
|
import java.util.stream.Collectors
|
||||||
|
|
||||||
|
class IdeaKotlinVersionProviderService : KotlinVersionProviderService, IdeaWizardService {
|
||||||
|
override fun getKotlinVersion(): Version {
|
||||||
|
if (KotlinPluginUtil.isSnapshotVersion()) {
|
||||||
|
return VersionsDownloader.getLatestEapOrStableKotlinVersion() ?: KotlinVersionProviderServiceImpl.DEFAULT
|
||||||
|
}
|
||||||
|
return KotlinPluginUtil.getPluginVersion().let { Version.fromString(it) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private object VersionsDownloader {
|
||||||
|
fun getLatestEapOrStableKotlinVersion(): Version? {
|
||||||
|
val latestEap = EapVersionDownloader.getLatestEapVersion()
|
||||||
|
val latestStable = getLatestStableVersion()
|
||||||
|
if (latestEap == null) return latestStable
|
||||||
|
if (latestStable == null) return latestEap
|
||||||
|
return if (latestEap > latestStable) latestEap else latestStable
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getLatestStableVersion() = safe {
|
||||||
|
ConfigureDialogWithModulesAndVersion.loadVersions("1.0.0")
|
||||||
|
}.asNullable?.firstOrNull()?.let { Version.fromString(it) }
|
||||||
|
}
|
||||||
|
|
||||||
|
private object EapVersionDownloader {
|
||||||
|
fun getLatestEapVersion() = downloadVersions(EAP_URL).firstOrNull()
|
||||||
|
|
||||||
|
private fun downloadPage(url: String): TaskResult<String> = safe {
|
||||||
|
BufferedReader(InputStreamReader(URL(url).openStream())).lines().collect(Collectors.joining("\n"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("SameParameterValue")
|
||||||
|
private fun downloadVersions(url: String): List<Version> = compute {
|
||||||
|
val (text) = downloadPage(url)
|
||||||
|
versionRegexp.findAll(text)
|
||||||
|
.map { it.groupValues[1].removeSuffix("/") }
|
||||||
|
.filter { it.isNotEmpty() && it[0].isDigit() }
|
||||||
|
.map { Version.fromString(it) }
|
||||||
|
.toList()
|
||||||
|
.asReversed()
|
||||||
|
}.asNullable.orEmpty()
|
||||||
|
|
||||||
|
private val EAP_URL = "https://dl.bintray.com/kotlin/kotlin-eap/org/jetbrains/kotlin/jvm/org.jetbrains.kotlin.jvm.gradle.plugin/"
|
||||||
|
private val versionRegexp = """href="([^"\\]+)"""".toRegex()
|
||||||
|
}
|
||||||
+2
-1
@@ -15,7 +15,8 @@ interface IdeaWizardService : WizardService
|
|||||||
object IdeaServices {
|
object IdeaServices {
|
||||||
val PROJECT_INDEPENDENT: List<IdeaWizardService> = listOf(
|
val PROJECT_INDEPENDENT: List<IdeaWizardService> = listOf(
|
||||||
IdeaFileSystemWizardService(),
|
IdeaFileSystemWizardService(),
|
||||||
IdeaBuildSystemAvailabilityWizardService()
|
IdeaBuildSystemAvailabilityWizardService(),
|
||||||
|
IdeaKotlinVersionProviderService()
|
||||||
)
|
)
|
||||||
|
|
||||||
fun createScopeDependent(project: Project, model: ModifiableModuleModel) = listOf(
|
fun createScopeDependent(project: Project, model: ModifiableModuleModel) = listOf(
|
||||||
|
|||||||
+4
@@ -42,5 +42,9 @@ abstract class DynamicComponent(private val valuesReadingContext: ValuesReadingC
|
|||||||
if (isInitialized) onValueUpdated(reference)
|
if (isInitialized) onValueUpdated(reference)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected fun <T> read(reader: ValuesReadingContext.() -> T): T =
|
||||||
|
reader(valuesReadingContext)
|
||||||
|
|
||||||
open fun onValueUpdated(reference: SettingReference<*, *>?) {}
|
open fun onValueUpdated(reference: SettingReference<*, *>?) {}
|
||||||
}
|
}
|
||||||
+9
-2
@@ -10,14 +10,16 @@ import org.jetbrains.kotlin.tools.projectWizard.core.entity.settingValidator
|
|||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
import java.awt.event.ItemEvent
|
import java.awt.event.ItemEvent
|
||||||
|
import javax.swing.DefaultComboBoxModel
|
||||||
import javax.swing.Icon
|
import javax.swing.Icon
|
||||||
|
import javax.swing.JComboBox
|
||||||
import javax.swing.JList
|
import javax.swing.JList
|
||||||
|
|
||||||
class DropDownComponent<T : DisplayableSettingItem>(
|
class DropDownComponent<T : DisplayableSettingItem>(
|
||||||
private val valuesReadingContext: ValuesReadingContext,
|
private val valuesReadingContext: ValuesReadingContext,
|
||||||
initialValues: List<T> = emptyList(),
|
initialValues: List<T> = emptyList(),
|
||||||
labelText: String? = null,
|
labelText: String? = null,
|
||||||
filter: (T) -> Boolean = { true },
|
private val filter: (T) -> Boolean = { true },
|
||||||
private val validator: SettingValidator<T> = settingValidator { ValidationResult.OK },
|
private val validator: SettingValidator<T> = settingValidator { ValidationResult.OK },
|
||||||
private val iconProvider: (T) -> Icon? = { null },
|
private val iconProvider: (T) -> Icon? = { null },
|
||||||
onValueUpdate: (T) -> Unit = {}
|
onValueUpdate: (T) -> Unit = {}
|
||||||
@@ -65,11 +67,16 @@ class DropDownComponent<T : DisplayableSettingItem>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setValues(newValues: List<T>) {
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
uiComponent.model = DefaultComboBoxModel(newValues.filter(filter).toTypedArray<DisplayableSettingItem>() as Array<T>)
|
||||||
|
}
|
||||||
|
|
||||||
override fun updateUiValue(newValue: T) = safeUpdateUi {
|
override fun updateUiValue(newValue: T) = safeUpdateUi {
|
||||||
uiComponent.selectedItem = newValue
|
uiComponent.selectedItem = newValue
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
override fun getUiValue(): T = uiComponent.selectedItem as T
|
override fun getUiValue(): T? = uiComponent.selectedItem as? T
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -28,7 +28,7 @@ abstract class UIComponent<V : Any>(
|
|||||||
protected abstract val uiComponent: JComponent
|
protected abstract val uiComponent: JComponent
|
||||||
|
|
||||||
abstract fun updateUiValue(newValue: V)
|
abstract fun updateUiValue(newValue: V)
|
||||||
abstract fun getUiValue(): V
|
abstract fun getUiValue(): V?
|
||||||
|
|
||||||
private var allowEventFiring = true
|
private var allowEventFiring = true
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@ abstract class UIComponent<V : Any>(
|
|||||||
|
|
||||||
override fun onInit() {
|
override fun onInit() {
|
||||||
super.onInit()
|
super.onInit()
|
||||||
validate(getUiValue())
|
getUiValue()?.let(::validate)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override val component: JComponent by lazy(LazyThreadSafetyMode.NONE) {
|
final override val component: JComponent by lazy(LazyThreadSafetyMode.NONE) {
|
||||||
@@ -65,5 +65,5 @@ abstract class UIComponent<V : Any>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <V: Any> UIComponent<V>.valueForSetting(setting: Setting<V, SettingType<V>>): V =
|
fun <V : Any> UIComponent<V>.valueForSetting(setting: Setting<V, SettingType<V>>): V? =
|
||||||
setting.defaultValue ?: getUiValue()
|
setting.defaultValue ?: getUiValue()
|
||||||
+1
-1
@@ -20,7 +20,7 @@ import java.awt.BorderLayout
|
|||||||
|
|
||||||
|
|
||||||
class BuildSystemTypeSettingComponent(
|
class BuildSystemTypeSettingComponent(
|
||||||
private val valuesReadingContext: ValuesReadingContext
|
valuesReadingContext: ValuesReadingContext
|
||||||
) : UIComponentDelegatingSettingComponent<BuildSystemType, DropDownSettingType<BuildSystemType>>(
|
) : UIComponentDelegatingSettingComponent<BuildSystemType, DropDownSettingType<BuildSystemType>>(
|
||||||
BuildSystemPlugin::type.reference,
|
BuildSystemPlugin::type.reference,
|
||||||
valuesReadingContext
|
valuesReadingContext
|
||||||
|
|||||||
-2
@@ -1,6 +1,5 @@
|
|||||||
package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.firstStep
|
package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.firstStep
|
||||||
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
|
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingReference
|
import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingReference
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference
|
import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference
|
||||||
@@ -28,7 +27,6 @@ class BuildSystemSubStep(valuesReadingContext: ValuesReadingContext) :
|
|||||||
private val buildSystemSetting = BuildSystemTypeSettingComponent(valuesReadingContext).asSubComponent()
|
private val buildSystemSetting = BuildSystemTypeSettingComponent(valuesReadingContext).asSubComponent()
|
||||||
|
|
||||||
override fun buildContent(): JComponent = panel {
|
override fun buildContent(): JComponent = panel {
|
||||||
bordered(needBottomEmptyBorder = false)
|
|
||||||
add(buildSystemSetting.component, BorderLayout.CENTER)
|
add(buildSystemSetting.component, BorderLayout.CENTER)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -91,7 +91,7 @@ class VersionSettingComponent(
|
|||||||
|
|
||||||
class DropdownSettingComponent(
|
class DropdownSettingComponent(
|
||||||
reference: SettingReference<DisplayableSettingItem, DropDownSettingType<DisplayableSettingItem>>,
|
reference: SettingReference<DisplayableSettingItem, DropDownSettingType<DisplayableSettingItem>>,
|
||||||
private val valuesReadingContext: ValuesReadingContext
|
valuesReadingContext: ValuesReadingContext
|
||||||
) : UIComponentDelegatingSettingComponent<DisplayableSettingItem, DropDownSettingType<DisplayableSettingItem>>(
|
) : UIComponentDelegatingSettingComponent<DisplayableSettingItem, DropDownSettingType<DisplayableSettingItem>>(
|
||||||
reference,
|
reference,
|
||||||
valuesReadingContext
|
valuesReadingContext
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@ import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.DynamicComponent
|
|||||||
|
|
||||||
abstract class SettingComponent<V : Any, T: SettingType<V>>(
|
abstract class SettingComponent<V : Any, T: SettingType<V>>(
|
||||||
val reference: SettingReference<V, T>,
|
val reference: SettingReference<V, T>,
|
||||||
private val valuesReadingContext: ValuesReadingContext
|
val valuesReadingContext: ValuesReadingContext
|
||||||
) : DynamicComponent(valuesReadingContext), Displayable {
|
) : DynamicComponent(valuesReadingContext), Displayable {
|
||||||
var value: V?
|
var value: V?
|
||||||
get() = reference.value
|
get() = reference.value
|
||||||
|
|||||||
+1
-3
@@ -24,9 +24,7 @@ abstract class UIComponentDelegatingSettingComponent<V : Any, T : SettingType<V>
|
|||||||
override fun onInit() {
|
override fun onInit() {
|
||||||
super.onInit()
|
super.onInit()
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
if (value == null) {
|
uiComponent.valueForSetting(setting)?.let { value = it }
|
||||||
value = uiComponent.valueForSetting(setting)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
value?.let(uiComponent::updateUiValue)
|
value?.let(uiComponent::updateUiValue)
|
||||||
}
|
}
|
||||||
|
|||||||
-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(),
|
ProjectImportingWizardServiceImpl(),
|
||||||
OsFileSystemWizardService(),
|
OsFileSystemWizardService(),
|
||||||
BuildSystemAvailabilityWizardServiceImpl(),
|
BuildSystemAvailabilityWizardServiceImpl(),
|
||||||
DummyFileFormattingService()
|
DummyFileFormattingService(),
|
||||||
|
KotlinVersionProviderServiceImpl()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
@@ -86,6 +86,8 @@ class ListBuilder<T> {
|
|||||||
irs += this
|
irs += this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun isNotEmpty(): Boolean = irs.isNotEmpty()
|
||||||
|
|
||||||
fun build() = irs.toList()
|
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.*
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.DefaultTargetConfigurationIR
|
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.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.kotlin.ModuleSubType
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.BuildFilePrinter
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.BuildFilePrinter
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
|
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 org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
|
|
||||||
|
interface FileIR : BuildSystemIR, IrsOwner
|
||||||
|
|
||||||
data class BuildFileIR(
|
data class BuildFileIR(
|
||||||
val name: String,
|
val name: String,
|
||||||
val directoryPath: Path,
|
val directoryPath: Path,
|
||||||
val modules: ModulesStructureIR,
|
val modules: ModulesStructureIR,
|
||||||
val pom: PomIR,
|
val pom: PomIR,
|
||||||
override val irs: List<BuildSystemIR>
|
override val irs: List<BuildSystemIR>
|
||||||
) : BuildSystemIR, IrsOwner {
|
) : FileIR {
|
||||||
override fun withReplacedIrs(irs: List<BuildSystemIR>): BuildFileIR = copy(irs = irs)
|
override fun withReplacedIrs(irs: List<BuildSystemIR>): BuildFileIR = copy(irs = irs)
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
@@ -27,7 +30,14 @@ data class BuildFileIR(
|
|||||||
|
|
||||||
private fun distinctRepositories(): List<RepositoryIR> =
|
private fun distinctRepositories(): List<RepositoryIR> =
|
||||||
irsOfType<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 ->
|
.sortedBy { repositoryIR ->
|
||||||
if (repositoryIR.repository is DefaultRepository) 0 else 1
|
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() }
|
val plugins = irsOfType<BuildSystemPluginIR>().takeIf { it.isNotEmpty() }
|
||||||
|
|
||||||
if (plugins != null) {
|
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.*
|
||||||
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.service.kotlinVersionKind
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
|
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.AndroidConfigIR
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.BuildScriptDependencyIR
|
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.JavaPackage
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository
|
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.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.javaPackage
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate
|
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate
|
||||||
@@ -34,6 +36,14 @@ object AndroidSinglePlatformModuleConfigurator : ModuleConfiguratorWithSettings(
|
|||||||
shouldExists()
|
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) =
|
override fun createBuildFileIRs(configurationData: ModuleConfigurationData, module: Module) =
|
||||||
buildList<BuildSystemIR> {
|
buildList<BuildSystemIR> {
|
||||||
+GradleOnlyPluginByNameIR("com.android.application")
|
+GradleOnlyPluginByNameIR("com.android.application")
|
||||||
@@ -45,19 +55,11 @@ object AndroidSinglePlatformModuleConfigurator : ModuleConfiguratorWithSettings(
|
|||||||
)
|
)
|
||||||
+GradleOnlyPluginByNameIR("kotlin-android-extensions")
|
+GradleOnlyPluginByNameIR("kotlin-android-extensions")
|
||||||
+AndroidConfigIR(configurationData.pomIr.artifactId)
|
+AndroidConfigIR(configurationData.pomIr.artifactId)
|
||||||
+listOf(
|
+createRepositories(configurationData).map(::RepositoryIR)
|
||||||
DefaultRepository.GRADLE_PLUGIN_PORTAL,
|
|
||||||
DefaultRepository.GOOGLE,
|
|
||||||
DefaultRepository.JCENTER
|
|
||||||
).map(::RepositoryIR)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createRootBuildFileIrs(configurationData: ModuleConfigurationData) = buildList<BuildSystemIR> {
|
override fun createRootBuildFileIrs(configurationData: ModuleConfigurationData) = buildList<BuildSystemIR> {
|
||||||
+listOf(
|
+createRepositories(configurationData).map { BuildScriptRepositoryIR(RepositoryIR(it)) }
|
||||||
DefaultRepository.GRADLE_PLUGIN_PORTAL,
|
|
||||||
DefaultRepository.GOOGLE,
|
|
||||||
DefaultRepository.JCENTER
|
|
||||||
).map { BuildScriptRepositoryIR(RepositoryIR(it)) }
|
|
||||||
+listOf(
|
+listOf(
|
||||||
RawGradleIR { call("classpath") { +"com.android.tools.build:gradle:3.2.1".quotified } },
|
RawGradleIR { call("classpath") { +"com.android.tools.build:gradle:3.2.1".quotified } },
|
||||||
RawGradleIR {
|
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
|
StdlibType.StdlibJdk7
|
||||||
|
|
||||||
override val settings: List<ModuleConfiguratorSetting<*, *>> =
|
override val settings: List<ModuleConfiguratorSetting<*, *>> =
|
||||||
|
|||||||
+1
-1
@@ -44,7 +44,7 @@ abstract class ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings() {
|
|||||||
dependencyName,
|
dependencyName,
|
||||||
isInMppModule = module.kind
|
isInMppModule = module.kind
|
||||||
.let { it == ModuleKind.multiplatform || it == ModuleKind.target },
|
.let { it == ModuleKind.multiplatform || it == ModuleKind.target },
|
||||||
version = KotlinPlugin::version.settingValue,
|
version = KotlinPlugin::version.propertyValue,
|
||||||
dependencyType = DependencyType.TEST
|
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.printer.printBuildFile
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
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 org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.updateBuildFiles
|
||||||
|
import java.nio.file.Path
|
||||||
|
|
||||||
abstract class BuildSystemPlugin(context: Context) : Plugin(context) {
|
abstract class BuildSystemPlugin(context: Context) : Plugin(context) {
|
||||||
val type by enumSetting<BuildSystemType>("Build System", GenerationPhase.FIRST_STEP) {
|
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 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) {
|
val takeRepositoriesFromDependencies by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||||
runBefore(BuildSystemPlugin::createModules)
|
runBefore(BuildSystemPlugin::createModules)
|
||||||
@@ -139,6 +143,6 @@ val TaskRunningContext.allModulesPaths
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val TaskRunningContext.buildSystemType: BuildSystemType
|
val ValuesReadingContext.buildSystemType: BuildSystemType
|
||||||
get() = BuildSystemPlugin::type.reference.settingValue
|
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.core.entity.reference
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.RootFileModuleStructureIR
|
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.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.ir.buildsystem.withIrs
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.MavenPrinter
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.MavenPrinter
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.updateBuildFiles
|
||||||
|
|
||||||
class MavenPlugin(context: Context) : BuildSystemPlugin(context) {
|
class MavenPlugin(context: Context) : BuildSystemPlugin(context) {
|
||||||
override val title: String = "Maven"
|
override val title: String = "Maven"
|
||||||
|
|
||||||
|
private val isMaven = checker {
|
||||||
|
rule(BuildSystemPlugin::type.reference shouldBeEqual BuildSystemType.Maven)
|
||||||
|
}
|
||||||
|
|
||||||
val createSettingsFileTask by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
val createSettingsFileTask by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||||
runAfter(KotlinPlugin::createModules)
|
runAfter(KotlinPlugin::createModules)
|
||||||
runBefore(BuildSystemPlugin::createModules)
|
runBefore(BuildSystemPlugin::createModules)
|
||||||
activityChecker = checker {
|
activityChecker = isMaven
|
||||||
rule(BuildSystemPlugin::type.reference shouldBeEqual BuildSystemType.Maven)
|
|
||||||
}
|
|
||||||
withAction {
|
withAction {
|
||||||
BuildSystemPlugin::buildFiles.update { buildFiles ->
|
BuildSystemPlugin::buildFiles.update { buildFiles ->
|
||||||
if (buildFiles.size == 1) return@update buildFiles.asSuccess()
|
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(
|
val addBuildSystemData by addBuildSystemData(
|
||||||
BuildSystemData(
|
BuildSystemData(
|
||||||
type = BuildSystemType.Maven,
|
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.*
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference
|
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.phases.GenerationPhase
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin
|
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.*
|
||||||
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.kotlin.KotlinPlugin
|
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.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.settings.version.Version
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate
|
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptor
|
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) {
|
val createSettingsFileTask by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||||
runBefore(TemplatesPlugin::addTemplatesToModules)
|
runAfter(KotlinPlugin::createPluginRepositories)
|
||||||
activityChecker = isGradle
|
activityChecker = isGradle
|
||||||
withAction {
|
withAction {
|
||||||
val templateDescriptor = when (buildSystemType) {
|
val (createBuildFile, buildFileName) = settingsGradleBuildFileData ?: return@withAction UNIT_SUCCESS
|
||||||
BuildSystemType.GradleKotlinDsl -> FileTemplateDescriptor(
|
|
||||||
"gradle/settings.gradle.kts.vm",
|
val repositories = buildList<RepositoryIR> {
|
||||||
"settings.gradle.kts".asPath()
|
+BuildSystemPlugin::pluginRepositoreis.propertyValue.map(::RepositoryIR)
|
||||||
)
|
if (isNotEmpty()) {
|
||||||
BuildSystemType.GradleGroovyDsl -> FileTemplateDescriptor(
|
+RepositoryIR(DefaultRepository.MAVEN_CENTRAL)
|
||||||
"gradle/settings.gradle.vm",
|
}
|
||||||
"settings.gradle".asPath()
|
|
||||||
)
|
|
||||||
else -> return@withAction UNIT_SUCCESS
|
|
||||||
}
|
}
|
||||||
TemplatesPlugin::addFileTemplate.execute(
|
val settingsGradleIR = SettingsGradleFileIR(
|
||||||
FileTemplate(
|
StructurePlugin::name.settingValue,
|
||||||
templateDescriptor,
|
allModulesPaths.map { path -> path.joinToString(separator = "") { ":$it" } },
|
||||||
StructurePlugin::projectPath.settingValue,
|
repositories
|
||||||
mapOf(
|
)
|
||||||
"projectName" to StructurePlugin::name.settingValue,
|
val buildFileText = createBuildFile().printBuildFile { settingsGradleIR.render(this) }
|
||||||
"subProjects" to allModulesPaths
|
service<FileSystemWizardService>()!!.createFile(
|
||||||
.map { path ->
|
projectPath / buildFileName,
|
||||||
path.joinToString(separator = "") { ":$it" }
|
buildFileText
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -139,3 +142,18 @@ abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) {
|
|||||||
private val defaultVersions = listOf("5.5.1").map(Version.Companion::fromString)
|
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.*
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.*
|
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.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.ir.buildsystem.*
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin
|
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.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.buildSystem.buildSystemType
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.pomIR
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.pomIR
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath
|
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
|
import java.nio.file.Path
|
||||||
|
|
||||||
class KotlinPlugin(context: Context) : Plugin(context) {
|
class KotlinPlugin(context: Context) : Plugin(context) {
|
||||||
val version by versionSetting("Kotlin Version", GenerationPhase.FIRST_STEP) {
|
val version by property(KotlinVersionProviderServiceImpl.DEFAULT)
|
||||||
defaultValue = DEFAULT_VERSION
|
|
||||||
|
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)
|
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) {
|
val createSourcesetDirectories by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||||
runAfter(KotlinPlugin::createModules)
|
runAfter(KotlinPlugin::createModules)
|
||||||
withAction {
|
withAction {
|
||||||
@@ -83,7 +105,7 @@ class KotlinPlugin(context: Context) : Plugin(context) {
|
|||||||
modules,
|
modules,
|
||||||
projectPath,
|
projectPath,
|
||||||
StructurePlugin::name.settingValue,
|
StructurePlugin::name.settingValue,
|
||||||
KotlinPlugin::version.settingValue,
|
KotlinPlugin::version.propertyValue,
|
||||||
buildSystemType,
|
buildSystemType,
|
||||||
pomIR(),
|
pomIR(),
|
||||||
this
|
this
|
||||||
|
|||||||
+2
-2
@@ -8,8 +8,8 @@ abstract class BuildFilePrinter {
|
|||||||
private val builder = StringBuilder()
|
private val builder = StringBuilder()
|
||||||
protected var currentIndent = 0
|
protected var currentIndent = 0
|
||||||
|
|
||||||
fun nl() {
|
fun nl(lineBreaks: Int = 1) {
|
||||||
+"\n"
|
+"\n".repeat(lineBreaks)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun nlIndented() {
|
fun nlIndented() {
|
||||||
|
|||||||
+2
@@ -39,4 +39,6 @@ data class BintrayRepository(val repository: String) : CustomMavenRepository {
|
|||||||
|
|
||||||
object Repositories {
|
object Repositories {
|
||||||
val KTOR_BINTRAY = BintrayRepository("kotlin/ktor")
|
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
|
package org.jetbrains.kotlin.tools.projectWizard.settings.version
|
||||||
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
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.ArtifactVersion
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.maven.DefaultArtifactVersion
|
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 compareTo(other: Version): Int = mavenVersion.compareTo(other.mavenVersion)
|
||||||
override fun equals(other: Any?): Boolean = mavenVersion == other.safeAs<Version>()?.mavenVersion
|
override fun equals(other: Any?): Boolean = mavenVersion == other.safeAs<Version>()?.mavenVersion
|
||||||
override fun hashCode(): Int = mavenVersion.hashCode()
|
override fun hashCode(): Int = mavenVersion.hashCode()
|
||||||
override fun toString(): String = mavenVersion.toString()
|
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 {
|
companion object {
|
||||||
fun fromString(string: String) = Version(
|
fun fromString(string: String) = Version(
|
||||||
DefaultArtifactVersion(string)
|
DefaultArtifactVersion(string)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
fun fromComponents(major: Int, minor: Int, incremental: Int) =
|
||||||
|
fromString("$major.$minor.$incremental")
|
||||||
|
|
||||||
val parser: Parser<Version> = valueParser { value, path ->
|
val parser: Parser<Version> = valueParser { value, path ->
|
||||||
val (stringVersion) = value.parseAs<String>(path)
|
val (stringVersion) = value.parseAs<String>(path)
|
||||||
safe { fromString(stringVersion) }.mapFailure {
|
safe { fromString(stringVersion) }.mapFailure {
|
||||||
|
|||||||
Reference in New Issue
Block a user