Wizard: add resolutionStrategy for mpp library template

This commit is contained in:
Ilya Kirillov
2020-10-14 04:31:47 +03:00
parent f5d638eb8f
commit 42914b4046
9 changed files with 69 additions and 6 deletions
@@ -9,6 +9,7 @@ version = '1.0-SNAPSHOT'
repositories {
google()
jcenter()
mavenCentral()
maven { url 'KOTLIN_REPO' }
}
@@ -9,6 +9,7 @@ version = "1.0-SNAPSHOT"
repositories {
google()
jcenter()
mavenCentral()
maven { url = uri("KOTLIN_REPO") }
}
@@ -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'
@@ -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"
@@ -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)
@@ -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<BuildSystemIR> {
+createRepositories(KotlinPlugin.version.propertyValue).map { PluginManagementRepositoryIR(RepositoryIR(it)) }
override fun createSettingsGradleIRs(
reader: Reader,
module: Module,
data: ModulesToIrConversionData
) = buildList<BuildSystemIR> {
+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<BuildSystemIR> = 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<BuildSystemIR> =
@@ -340,5 +340,9 @@ interface ModuleConfigurator : DisplayableSettingItem, EntitiesOwnerDescriptor {
}
interface GradleModuleConfigurator : ModuleConfigurator {
fun Reader.createSettingsGradleIRs(module: Module): List<BuildSystemIR> = emptyList()
fun createSettingsGradleIRs(
reader: Reader,
module: Module,
data: ModulesToIrConversionData
): List<BuildSystemIR> = emptyList()
}
@@ -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()
}
}
}
@@ -398,6 +398,7 @@ object MultiplatformMobileLibraryProjectTemplate : ProjectTemplate() {
KotlinPlugin.modules.reference withValue listOf(
MultiplatformModule(
"library",
template = MobileMppTemplate(),
targets = listOf(
ModuleType.common.createDefaultTarget(),
Module(