From f330cd36978527931e06ffa5ab4c7e5b89d8ba27 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 23 Jul 2020 22:09:27 +0300 Subject: [PATCH] Wizard: relocate AndroidManifest.xml for MPP module --- .../expected/shared/build.gradle | 1 + .../expected/shared/build.gradle.kts | 1 + .../expected/build.gradle | 1 + .../expected/build.gradle.kts | 1 + .../ir/buildsystem/gradle/AndroidIR.kt | 14 +++++++- .../AndroidModuleConfigurator.kt | 35 ++++++++++++------- ...AndroidSinglePlatformModuleConfigurator.kt | 4 ++- 7 files changed, 42 insertions(+), 15 deletions(-) diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileApplication/expected/shared/build.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileApplication/expected/shared/build.gradle index d7247b788cd..9d5fd4d7132 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileApplication/expected/shared/build.gradle +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileApplication/expected/shared/build.gradle @@ -56,6 +56,7 @@ kotlin { } android { compileSdkVersion 29 + sourceSets.main.manifest.srcFile('src/androidMain/AndroidManifest.xml') defaultConfig { minSdkVersion 24 targetSdkVersion 29 diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileApplication/expected/shared/build.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileApplication/expected/shared/build.gradle.kts index c8075139c4e..5a2fbb21027 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileApplication/expected/shared/build.gradle.kts +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileApplication/expected/shared/build.gradle.kts @@ -50,6 +50,7 @@ kotlin { } android { compileSdkVersion(29) + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") defaultConfig { minSdkVersion(24) targetSdkVersion(29) 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 3a0031579fc..c954a1576a8 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 @@ -54,6 +54,7 @@ kotlin { } android { compileSdkVersion 29 + sourceSets.main.manifest.srcFile('src/androidMain/AndroidManifest.xml') defaultConfig { minSdkVersion 24 targetSdkVersion 29 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 20e5a59c1de..cb5c421c91d 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 @@ -48,6 +48,7 @@ kotlin { } android { compileSdkVersion(29) + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") defaultConfig { minSdkVersion(24) targetSdkVersion(29) diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/gradle/AndroidIR.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/gradle/AndroidIR.kt index a844b21ed77..fe7a96b6a12 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/gradle/AndroidIR.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/gradle/AndroidIR.kt @@ -3,14 +3,26 @@ package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.FreeIR import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter import org.jetbrains.kotlin.tools.projectWizard.settings.JavaPackage +import java.nio.file.Path interface AndroidIR : GradleIR //TODO parematrize -data class AndroidConfigIR(val javaPackage: JavaPackage?) : AndroidIR, FreeIR { +data class AndroidConfigIR(val javaPackage: JavaPackage?, val newManifestPath: Path?) : AndroidIR, FreeIR { override fun GradlePrinter.renderGradle() { sectionCall("android", needIndent = true) { call("compileSdkVersion") { +"29" }; nlIndented() // TODO dehardcode + if (newManifestPath != null) { + when (dsl) { + GradlePrinter.GradleDsl.KOTLIN -> { + +"""sourceSets["main"].manifest.srcFile("$newManifestPath")""" + } + GradlePrinter.GradleDsl.GROOVY -> { + +"""sourceSets.main.manifest.srcFile('$newManifestPath')""" + } + } + nlIndented() + } sectionCall("defaultConfig", needIndent = true) { if (javaPackage != null) { assignmentOrCall("applicationId") { +javaPackage.asCodePackage().quotified }; nlIndented() 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 a2e3938eb91..4e6a5dc2699 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 @@ -40,6 +40,21 @@ interface AndroidModuleConfigurator : ModuleConfigurator, ModuleConfiguratorWithModuleType, GradleModuleConfigurator { + fun getNewAndroidManifestPath(module: Module): Path? + + private fun getManifestPathOrDefault(module: Module): Path = + getNewAndroidManifestPath(module) ?: ("src" / "main" / "AndroidManifest.xml") + + fun getAndroidManifestXml(module: Module) = FileTemplateDescriptor( + "android/AndroidManifest.xml.vm", + getManifestPathOrDefault(module) + ) + + fun getAndroidManifestForLibraryXml(module: Module) = FileTemplateDescriptor( + "android/AndroidManifestLibrary.xml.vm", + getManifestPathOrDefault(module) + ) + override val moduleType: ModuleType get() = ModuleType.android @@ -55,10 +70,11 @@ interface AndroidModuleConfigurator : ModuleConfigurator, +GradleOnlyPluginByNameIR("kotlin-android-extensions", priority = 3) +AndroidConfigIR( - when (reader.createAndroidPlugin(module)) { + javaPackage = when (reader.createAndroidPlugin(module)) { AndroidGradlePlugin.APPLICATION -> module.javaPackage(configurationData.pomIr) AndroidGradlePlugin.LIBRARY -> null - } + }, + newManifestPath = getNewAndroidManifestPath(module) ) +createRepositories(configurationData.kotlinVersion).map(::RepositoryIR) } @@ -93,16 +109,6 @@ interface AndroidModuleConfigurator : ModuleConfigurator, "src" / "main" / "res" / "layout" / "activity_main.xml" ) - val androidManifestXml = FileTemplateDescriptor( - "android/AndroidManifest.xml.vm", - "src" / "main" / "AndroidManifest.xml" - ) - - val androidManifestForLibraryXml = FileTemplateDescriptor( - "android/AndroidManifestLibrary.xml.vm", - "src" / "main" / "AndroidManifest.xml" - ) - val colorsXml = FileTemplateDescriptor( "android/colors.xml", "src" / "main" / "res" / "values" / "colors.xml" @@ -139,6 +145,9 @@ object AndroidTargetConfigurator : TargetConfigurator, override val text = KotlinNewProjectWizardBundle.message("module.configurator.android") + override fun getNewAndroidManifestPath(module: Module): Path? = + Defaults.SRC_DIR / "${module.name}Main" / "AndroidManifest.xml" + override fun Reader.createAndroidPlugin(module: Module): AndroidGradlePlugin = inContextOfModuleConfigurator(module) { androidPlugin.reference.settingValue } @@ -167,7 +176,7 @@ object AndroidTargetConfigurator : TargetConfigurator, TemplatesPlugin.addFileTemplates.execute( listOf( - FileTemplate(AndroidModuleConfigurator.FileTemplateDescriptors.androidManifestForLibraryXml, modulePath, settings) + FileTemplate(getAndroidManifestForLibraryXml(module), modulePath, settings) ) ) } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidSinglePlatformModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidSinglePlatformModuleConfigurator.kt index 889bd94adf2..dccee843223 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidSinglePlatformModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidSinglePlatformModuleConfigurator.kt @@ -31,6 +31,8 @@ object AndroidSinglePlatformModuleConfigurator : AndroidModuleConfigurator { override val moduleKind: ModuleKind get() = ModuleKind.singleplatformAndroid + override fun getNewAndroidManifestPath(module: Module): Path? = null + @NonNls override val id = "android" @@ -99,7 +101,7 @@ object AndroidSinglePlatformModuleConfigurator : TemplatesPlugin.addFileTemplates.execute( listOf( FileTemplate(AndroidModuleConfigurator.FileTemplateDescriptors.activityMainXml, modulePath, settings), - FileTemplate(AndroidModuleConfigurator.FileTemplateDescriptors.androidManifestXml, modulePath, settings), + FileTemplate(getAndroidManifestXml(module), modulePath, settings), FileTemplate(AndroidModuleConfigurator.FileTemplateDescriptors.colorsXml, modulePath, settings), FileTemplate(AndroidModuleConfigurator.FileTemplateDescriptors.stylesXml, modulePath, settings), FileTemplate(AndroidModuleConfigurator.FileTemplateDescriptors.mainActivityKt(javaPackage), modulePath, settings)