diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/expected/build.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/expected/build.gradle index 1dddac4e6cc..977a727c227 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/expected/build.gradle +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/expected/build.gradle @@ -9,6 +9,7 @@ version = '1.0-SNAPSHOT' repositories { google() + jcenter() mavenCentral() maven { url 'KOTLIN_REPO' } } diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/expected/build.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/expected/build.gradle.kts index a7fc8936a2d..da271346b3f 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/expected/build.gradle.kts +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/expected/build.gradle.kts @@ -9,6 +9,7 @@ version = "1.0-SNAPSHOT" repositories { google() + jcenter() mavenCentral() maven { url = uri("KOTLIN_REPO") } } diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/expected/settings.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/expected/settings.gradle index 391980e6f54..67b7d6f3b1e 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/expected/settings.gradle +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/expected/settings.gradle @@ -6,6 +6,12 @@ pluginManagement { mavenCentral() maven { url 'KOTLIN_REPO' } } - + resolutionStrategy { + eachPlugin { + if (requested.id.namespace == 'com.android' || requested.id.name == 'kotlin-android-extensions') { + useModule('com.android.tools.build:gradle:4.0.1') + } + } + } } rootProject.name = 'multiplatformMobileLibrary' \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/expected/settings.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/expected/settings.gradle.kts index 5db1f646f76..fbaac754e27 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/expected/settings.gradle.kts +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/expected/settings.gradle.kts @@ -6,6 +6,12 @@ pluginManagement { mavenCentral() maven { url = uri("KOTLIN_REPO") } } - + resolutionStrategy { + eachPlugin { + if (requested.id.namespace == "com.android" || requested.id.name == "kotlin-android-extensions") { + useModule("com.android.tools.build:gradle:4.0.1") + } + } + } } rootProject.name = "multiplatformMobileLibrary" \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/PluginManagementIR.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/PluginManagementIR.kt index 98d3f0def70..c4ccc99f3f6 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/PluginManagementIR.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/PluginManagementIR.kt @@ -12,6 +12,30 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version interface PluginManagementIR : GradleIR +data class AndroidResolutionStrategyIR( + val androidGradlePluginVersion: Version +) : PluginManagementIR, FreeIR, SingleIR { + override fun GradlePrinter.renderGradle() { + sectionCall("resolutionStrategy", needIndent = true) { + sectionCall("eachPlugin", needIndent = true) { + sectionCall( + "if (requested.id.namespace == ${"com.android".quotified} || requested.id.name == ${"kotlin-android-extensions".quotified})", + needIndent = true + ) { + call("useModule", forceBrackets = true) { + when (dsl) { + GradlePrinter.GradleDsl.KOTLIN -> + +"com.android.tools.build:gradle:${androidGradlePluginVersion}".quotified + GradlePrinter.GradleDsl.GROOVY -> + +"com.android.tools.build:gradle:$androidGradlePluginVersion".quotified + } + } + } + } + } + } +} + data class PluginManagementRepositoryIR(val repositoryIR: RepositoryIR) : PluginManagementIR, RepositoryWrapper { override fun GradlePrinter.renderGradle() { repositoryIR.render(this) diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidModuleConfigurator.kt index 284aee48c79..ea80fba82d7 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidModuleConfigurator.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardKotlinVersion 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.irsList import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.AndroidPlugin @@ -76,8 +77,13 @@ interface AndroidModuleConfigurator : ModuleConfigurator, fun Reader.createAndroidPlugin(module: Module): AndroidGradlePlugin - override fun Reader.createSettingsGradleIRs(module: Module) = buildList { - +createRepositories(KotlinPlugin.version.propertyValue).map { PluginManagementRepositoryIR(RepositoryIR(it)) } + override fun createSettingsGradleIRs( + reader: Reader, + module: Module, + data: ModulesToIrConversionData + ) = buildList { + +createRepositories(reader { KotlinPlugin.version.propertyValue }) + .map { PluginManagementRepositoryIR(RepositoryIR(it)) } } override fun createModuleIRs( @@ -183,6 +189,18 @@ object AndroidTargetConfigurator : TargetConfigurator, GradlePlugin.gradleProperties.addValues("android.useAndroidX" to true) } + override fun createSettingsGradleIRs( + reader: Reader, + module: Module, + data: ModulesToIrConversionData + ): List = irsList { + +super.createSettingsGradleIRs(reader, module, data) + val containsAndroidSingleplatformModule = data.allModules.any { it.configurator is AndroidSinglePlatformModuleConfigurator } + if (!containsAndroidSingleplatformModule) { + +AndroidResolutionStrategyIR(Versions.GRADLE_PLUGINS.ANDROID) + } + } + override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JUNIT4 override fun createModuleIRs(reader: Reader, configurationData: ModulesToIrConversionData, module: Module): List = diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt index 1e864a9d2de..af5c01c2f28 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt @@ -340,5 +340,9 @@ interface ModuleConfigurator : DisplayableSettingItem, EntitiesOwnerDescriptor { } interface GradleModuleConfigurator : ModuleConfigurator { - fun Reader.createSettingsGradleIRs(module: Module): List = emptyList() + fun createSettingsGradleIRs( + reader: Reader, + module: Module, + data: ModulesToIrConversionData + ): List = emptyList() } \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt index 41822a3126c..78aee3b53ad 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt @@ -291,7 +291,9 @@ class ModulesToIRsConverter( runArbitraryTask(data, module, modulePath).ensure() TemplatesPlugin.addFileTemplates.execute(createTemplates(data, module, modulePath)).ensure() if (this@with is GradleModuleConfigurator) { - GradlePlugin.settingsGradleFileIRs.addValues(createSettingsGradleIRs(module)).ensure() + GradlePlugin.settingsGradleFileIRs.addValues( + createSettingsGradleIRs(this@mutateProjectStructureByModuleConfigurator, module, data) + ).ensure() } } } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt index 8e4f45b9f94..011b00ec9a8 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt @@ -398,6 +398,7 @@ object MultiplatformMobileLibraryProjectTemplate : ProjectTemplate() { KotlinPlugin.modules.reference withValue listOf( MultiplatformModule( "library", + template = MobileMppTemplate(), targets = listOf( ModuleType.common.createDefaultTarget(), Module(