From 6230a7861aaf54e32448dda78f5fa226c0b1f1f6 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Wed, 23 Dec 2020 17:35:45 +0100 Subject: [PATCH] Wizard: do not print plugin repositories in build files if all of them are default ones Also, use space dev repo for kotlin dev plugins --- .../settings.gradle.kts | 1 - .../cli/AbstractBuildFileGenerationTest.kt | 2 +- .../KotlinVersionProviderTestWizardService.kt | 23 +++-------- .../service/KotlinVersionProviderService.kt | 38 +++++++++++++++++-- .../plugins/buildSystem/BuildSystemPlugin.kt | 20 ++++++++++ .../plugins/buildSystem/MavenPlugin.kt | 2 +- .../buildSystem/gradle/GradlePlugin.kt | 11 +----- .../plugins/kotlin/KotlinPlugin.kt | 14 +++++-- .../settings/buildsystem/Repository.kt | 6 +-- 9 files changed, 77 insertions(+), 40 deletions(-) diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/composeDesktopApplication/settings.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/composeDesktopApplication/settings.gradle.kts index 2be82a340a2..38673624af5 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/composeDesktopApplication/settings.gradle.kts +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/composeDesktopApplication/settings.gradle.kts @@ -1,7 +1,6 @@ pluginManagement { repositories { gradlePluginPortal() - mavenCentral() maven { url = uri("https://maven.pkg.jetbrains.space/public/p/compose/dev") } } diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/AbstractBuildFileGenerationTest.kt b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/AbstractBuildFileGenerationTest.kt index 4afbc62d74d..a0c758fe2eb 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/AbstractBuildFileGenerationTest.kt +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/AbstractBuildFileGenerationTest.kt @@ -53,7 +53,7 @@ abstract class AbstractBuildFileGenerationTest : UsefulTestCase() { KOTLIN_VERSION_PLACEHOLDER ).replaceAllTo( listOf( - Repositories.KOTLIN_DEV_BINTRAY.url, + Repositories.JETBRAINS_KOTLIN_DEV.url, KotlinVersionProviderTestWizardService.KOTLIN_DEV_BINTRAY_WITH_CACHE_REDIRECTOR.url, ), KOTLIN_REPO_PLACEHOLDER diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/KotlinVersionProviderTestWizardService.kt b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/KotlinVersionProviderTestWizardService.kt index aad9bd8b7ff..9c3df810f77 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/KotlinVersionProviderTestWizardService.kt +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/KotlinVersionProviderTestWizardService.kt @@ -11,9 +11,7 @@ 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 +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.* class KotlinVersionProviderTestWizardService() : KotlinVersionProviderService(), TestWizardService { private val useCacheRedirector @@ -28,23 +26,14 @@ class KotlinVersionProviderTestWizardService() : KotlinVersionProviderService(), } ) - override fun getKotlinVersionRepository(versionKind: KotlinVersionKind): Repository = if (useCacheRedirector) { - getKotlinVersionRepositoryWithCacheRedirector(versionKind) - } else { - super.getKotlinVersionRepository(versionKind) - } - - private fun getKotlinVersionRepositoryWithCacheRedirector(versionKind: KotlinVersionKind): Repository = when (versionKind) { - KotlinVersionKind.STABLE -> DefaultRepository.MAVEN_CENTRAL - KotlinVersionKind.EAP -> DefaultRepository.MAVEN_CENTRAL - KotlinVersionKind.DEV -> KOTLIN_DEV_BINTRAY_WITH_CACHE_REDIRECTOR - KotlinVersionKind.M -> DefaultRepository.MAVEN_CENTRAL - } + override fun getDevVersionRepository(): Repository = + if (useCacheRedirector) KOTLIN_DEV_BINTRAY_WITH_CACHE_REDIRECTOR + else super.getDevVersionRepository() companion object { - private const val CACHE_REDIRECTOR_BINTRAY_URL = "https://cache-redirector.jetbrains.com/dl.bintray.com" + private const val CACHE_REDIRECTOR_JETBRAINS_SPACE_URL = "https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space" - val KOTLIN_DEV_BINTRAY_WITH_CACHE_REDIRECTOR = BintrayRepository("kotlin/kotlin-dev", CACHE_REDIRECTOR_BINTRAY_URL) + val KOTLIN_DEV_BINTRAY_WITH_CACHE_REDIRECTOR = BintrayRepository("kotlin/p/kotlin/dev", CACHE_REDIRECTOR_JETBRAINS_SPACE_URL) val TEST_KOTLIN_VERSION by lazy { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/KotlinVersionProviderService.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/KotlinVersionProviderService.kt index 4c152fe8fc6..40597674e77 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/KotlinVersionProviderService.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/KotlinVersionProviderService.kt @@ -13,6 +13,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.buildSystem.BuildSystemType 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 @@ -23,7 +24,12 @@ import java.io.InputStreamReader import java.net.URL import java.util.stream.Collectors -data class WizardKotlinVersion(val version: Version, val kind: KotlinVersionKind, val repository: Repository) +data class WizardKotlinVersion( + val version: Version, + val kind: KotlinVersionKind, + val repository: Repository, + val buildSystemPluginRepository: (BuildSystemType) -> Repository?, +) abstract class KotlinVersionProviderService : WizardService { abstract fun getKotlinVersion(projectKind: ProjectKind): WizardKotlinVersion @@ -31,23 +37,47 @@ abstract class KotlinVersionProviderService : WizardService { protected fun kotlinVersionWithDefaultValues(version: Version) = WizardKotlinVersion( version, getKotlinVersionKind(version), - getKotlinVersionRepository(version) + getKotlinVersionRepository(version), + getBuildSystemPluginRepository(getKotlinVersionKind(version), getDevVersionRepository()), ) - protected open fun getKotlinVersionRepository(versionKind: KotlinVersionKind): Repository = when (versionKind) { + + private fun getKotlinVersionRepository(versionKind: KotlinVersionKind): Repository = when (versionKind) { KotlinVersionKind.STABLE, KotlinVersionKind.EAP, KotlinVersionKind.M -> DefaultRepository.MAVEN_CENTRAL - KotlinVersionKind.DEV -> Repositories.KOTLIN_DEV_BINTRAY + KotlinVersionKind.DEV -> getDevVersionRepository() } + protected open fun getDevVersionRepository(): Repository = Repositories.JETBRAINS_KOTLIN_DEV + private fun getKotlinVersionRepository(version: Version) = getKotlinVersionRepository(getKotlinVersionKind(version)) + private fun getKotlinVersionKind(version: Version) = when { "eap" in version.toString().toLowerCase() -> KotlinVersionKind.EAP "rc" in version.toString().toLowerCase() -> KotlinVersionKind.EAP "dev" in version.toString().toLowerCase() -> KotlinVersionKind.DEV "m" in version.toString().toLowerCase() -> KotlinVersionKind.M else -> KotlinVersionKind.STABLE + + + } + + companion object { + fun getBuildSystemPluginRepository( + versionKind: KotlinVersionKind, + devRepository: Repository + ): (BuildSystemType) -> Repository? = + when (versionKind) { + KotlinVersionKind.STABLE, KotlinVersionKind.EAP, KotlinVersionKind.M -> { buildSystem -> + when (buildSystem) { + BuildSystemType.GradleKotlinDsl, BuildSystemType.GradleGroovyDsl -> DefaultRepository.GRADLE_PLUGIN_PORTAL + BuildSystemType.Maven -> DefaultRepository.MAVEN_CENTRAL + BuildSystemType.Jps -> null + } + } + KotlinVersionKind.DEV -> { _ -> devRepository } + } } } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt index 22484825a22..8ddcabcc324 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt @@ -23,6 +23,7 @@ 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.DisplayableSettingItem +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.updateBuildFiles @@ -125,6 +126,19 @@ abstract class BuildSystemPlugin(context: Context) : Plugin(context) { ) } +fun Reader.getPluginRepositoriesWithDefaultOnes(): List { + val allRepositories = BuildSystemPlugin.pluginRepositoreis.propertyValue + buildSystemType.getDefaultPluginRepositories() + return allRepositories.filterOutOnlyDefaultPluginRepositories(buildSystemType) +} + +private fun List.filterOutOnlyDefaultPluginRepositories(buildSystem: BuildSystemType): List { + val isAllDefault = all { it.isDefaultPluginRepository(buildSystem) } + return if (isAllDefault) emptyList() else this +} + +private fun Repository.isDefaultPluginRepository(buildSystem: BuildSystemType) = + this in buildSystem.getDefaultPluginRepositories() + fun PluginSettingsOwner.addBuildSystemData(data: BuildSystemData) = pipelineTask(GenerationPhase.PREPARE) { runBefore(BuildSystemPlugin.createModules) withAction { @@ -198,6 +212,12 @@ val Writer.allModulesPaths } } +fun BuildSystemType.getDefaultPluginRepositories(): List = when (this) { + BuildSystemType.GradleKotlinDsl, BuildSystemType.GradleGroovyDsl -> listOf(DefaultRepository.GRADLE_PLUGIN_PORTAL) + BuildSystemType.Maven -> listOf(DefaultRepository.MAVEN_CENTRAL) + BuildSystemType.Jps -> emptyList() +} + val Reader.buildSystemType: BuildSystemType get() = BuildSystemPlugin.type.settingValue diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/MavenPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/MavenPlugin.kt index 1a2913db59d..8f90c747aa8 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/MavenPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/MavenPlugin.kt @@ -52,7 +52,7 @@ class MavenPlugin(context: Context) : BuildSystemPlugin(context) { isAvailable = isMaven withAction { - val repositories = pluginRepositoreis.propertyValue + val repositories = getPluginRepositoriesWithDefaultOnes() updateBuildFiles { buildFile -> buildFile.withIrs(repositories.map(::PluginRepositoryMavenIR)).asSuccess() } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GradlePlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GradlePlugin.kt index 7f990a8acd1..dd73fe6ca26 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GradlePlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GradlePlugin.kt @@ -18,10 +18,7 @@ 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.Repository import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.updateBuildFiles -import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.updateModules import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptor @@ -152,13 +149,7 @@ abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) { withAction { val (createBuildFile, buildFileName) = settingsGradleBuildFileData ?: return@withAction UNIT_SUCCESS - val repositories = buildList { - +pluginRepositoreis.propertyValue.map(::RepositoryIR) - if (isNotEmpty()) { - +RepositoryIR(DefaultRepository.MAVEN_CENTRAL) - +RepositoryIR(DefaultRepository.GRADLE_PLUGIN_PORTAL) - } - }.map(::PluginManagementRepositoryIR) + val repositories = getPluginRepositoriesWithDefaultOnes().map { PluginManagementRepositoryIR(RepositoryIR(it)) } val settingsGradleIR = SettingsGradleFileIR( StructurePlugin.name.settingValue, diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt index d777281bb41..3a9d30cf513 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt @@ -55,7 +55,15 @@ class KotlinPlugin(context: Context) : Plugin(context) { val version by property( // todo do not hardcode kind & repository - WizardKotlinVersion(Versions.KOTLIN, KotlinVersionKind.M, Repositories.KOTLIN_EAP_MAVEN_CENTRAL) + WizardKotlinVersion( + Versions.KOTLIN, + KotlinVersionKind.M, + Repositories.KOTLIN_EAP_MAVEN_CENTRAL, + KotlinVersionProviderService.getBuildSystemPluginRepository( + KotlinVersionKind.M, + devRepository = Repositories.JETBRAINS_KOTLIN_DEV + ) + ) ) val initKotlinVersions by pipelineTask(GenerationPhase.PREPARE_GENERATION) { @@ -127,10 +135,10 @@ class KotlinPlugin(context: Context) : Plugin(context) { withAction { val version = version.propertyValue if (version.kind.isStable) return@withAction UNIT_SUCCESS - val pluginRepository = version.repository + val pluginRepository = version.buildSystemPluginRepository(buildSystemType) ?: return@withAction UNIT_SUCCESS BuildSystemPlugin.pluginRepositoreis.addValues(pluginRepository) andThen updateBuildFiles { buildFile -> - buildFile.withIrs(RepositoryIR(pluginRepository)).asSuccess() + buildFile.withIrs(RepositoryIR(version.repository)).asSuccess() } } } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Repository.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Repository.kt index f4a0fe533c4..f71ce763c2f 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Repository.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Repository.kt @@ -38,7 +38,7 @@ data class BintrayRepository(val repository: String, val base: String = "https:/ } data class JetBrainsSpace(val repository: String) : CustomMavenRepository { - override val url: String = "https://maven.pkg.jetbrains.space/public/p/$repository" + override val url: String = "https://maven.pkg.jetbrains.space/$repository" override val idForMaven: String get() = "jetbrains." + repository.replace('/', '.') @@ -49,6 +49,6 @@ object Repositories { val KOTLINX = BintrayRepository("kotlin/kotlinx") val KOTLIN_JS_WRAPPERS_BINTRAY = BintrayRepository("kotlin/kotlin-js-wrappers") val KOTLIN_EAP_MAVEN_CENTRAL = DefaultRepository.MAVEN_CENTRAL - val KOTLIN_DEV_BINTRAY = BintrayRepository("kotlin/kotlin-dev") - val JETBRAINS_COMPOSE_DEV = JetBrainsSpace("compose/dev") + val JETBRAINS_COMPOSE_DEV = JetBrainsSpace("public/p/compose/dev") + val JETBRAINS_KOTLIN_DEV = JetBrainsSpace("kotlin/p/kotlin/dev") }