Wizard: print repositories for Maven

#KT-35715 fixed
This commit is contained in:
Ilya Kirillov
2020-01-14 18:58:36 +03:00
parent bced2655e8
commit 4f4106a17e
4 changed files with 49 additions and 23 deletions
@@ -16,6 +16,13 @@
<kotlin.code.style>official</kotlin.code.style>
</properties>
<repositories>
<repository>
<id>mavenCentral</id>
<url>https://repo1.maven.org/maven2/</url>
</repository>
</repositories>
<build>
<sourceDirectory>src/main/kotlin</sourceDirectory>
<testSourceDirectory>src/test/kotlin</testSourceDirectory>
@@ -27,6 +27,13 @@ data class BuildFileIR(
fun withModulesUpdated(updater: (ModuleIR) -> TaskResult<ModuleIR>): TaskResult<BuildFileIR> =
modules.withModulesUpdated(updater).map { newModules -> copy(modules = newModules) }
private fun distinctRepositories(): List<RepositoryIR> =
irsOfType<RepositoryIR>()
.distinctBy { it.repository }
.sortedBy { repositoryIR ->
if (repositoryIR.repository is DefaultRepository) 0 else 1
}
override fun BuildFilePrinter.render() = when (this) {
is GradlePrinter -> {
irsOfTypeOrNull<GradleImportIR>()?.let { imports ->
@@ -44,13 +51,7 @@ data class BuildFileIR(
sectionCall("plugins", irsOfType<BuildSystemPluginIR>()); nlIndented()
pom.render(this); nl()
irsOfType<RepositoryIR>()
.distinctBy { it.repository }
.sortedBy { repositoryIR ->
if (repositoryIR.repository is DefaultRepository) 0 else 1
}.let {
sectionCall("repositories", it)
}
sectionCall("repositories", distinctRepositories())
nl()
modules.render(this)
irsOfTypeOrNull<FreeIR>()?.let { freeIrs ->
@@ -71,6 +72,13 @@ data class BuildFileIR(
singleLineNode("kotlin.code.style") { +"official" }
}
distinctRepositories().takeIf { it.isNotEmpty() }?.let { repositories ->
nl()
node("repositories") {
repositories.listNl()
}
}
val plugins = irsOfType<BuildSystemPluginIR>().takeIf { it.isNotEmpty() }
if (plugins != null) {
@@ -2,6 +2,7 @@ package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem
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.MavenPrinter
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.CustomMavenRepository
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
@@ -10,7 +11,7 @@ data class RepositoryIR(val repository: Repository) : BuildSystemIR {
override fun BuildFilePrinter.render() = when (this) {
is GradlePrinter -> when (repository) {
is DefaultRepository -> {
+repository.type.asGradleName()
+repository.type.gradleName
+"()"
}
is CustomMavenRepository -> {
@@ -26,15 +27,12 @@ data class RepositoryIR(val repository: Repository) : BuildSystemIR {
}
else -> Unit
}
is MavenPrinter -> {
node("repository") {
singleLineNode("id") { +repository.idForMaven }
singleLineNode("url") { +repository.url }
}
}
else -> Unit
}
companion object {
private fun DefaultRepository.Type.asGradleName() = when (this) {
DefaultRepository.Type.JCENTER -> "jcenter"
DefaultRepository.Type.MAVEN_CENTRAL -> "mavenCentral"
DefaultRepository.Type.GOOGLE -> "google"
DefaultRepository.Type.GRADLE_PLUGIN_PORTAL -> "gradlePluginPortal"
}
}
}
@@ -1,10 +1,22 @@
package org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem
interface Repository
interface Repository {
val url: String
val idForMaven: String
}
data class DefaultRepository(val type: Type) : Repository {
enum class Type {
JCENTER, MAVEN_CENTRAL, GOOGLE, GRADLE_PLUGIN_PORTAL
override val url: String
get() = type.url
override val idForMaven: String
get() = type.gradleName
enum class Type(val gradleName: String, val url: String) {
JCENTER("jcenter", "https://jcenter.bintray.com/"),
MAVEN_CENTRAL("mavenCentral", "https://repo1.maven.org/maven2/"),
GOOGLE("google", "https://dl.google.com/dl/android/maven2/"),
GRADLE_PLUGIN_PORTAL("gradlePluginPortal", "https://plugins.gradle.org/m2/")
}
companion object {
@@ -16,12 +28,13 @@ data class DefaultRepository(val type: Type) : Repository {
}
interface CustomMavenRepository : Repository {
val url: String
}
interface CustomMavenRepository : Repository
data class BintrayRepository(val repository: String) : CustomMavenRepository {
override val url: String = "https://dl.bintray.com/$repository"
override val idForMaven: String
get() = "bintray." + repository.replace('/', '.')
}
object Repositories {