Wizard: improve mobile app template
This commit is contained in:
+1
-1
@@ -83,7 +83,7 @@ val ModuleSubType.icon: Icon
|
||||
ModuleSubType.jvm -> KotlinIcons.Wizard.JVM
|
||||
ModuleSubType.js -> KotlinIcons.Wizard.JS
|
||||
ModuleSubType.android, ModuleSubType.androidNativeArm32, ModuleSubType.androidNativeArm64 -> KotlinIcons.Wizard.ANDROID
|
||||
ModuleSubType.iosArm32, ModuleSubType.iosArm64, ModuleSubType.iosX64 -> KotlinIcons.Wizard.IOS
|
||||
ModuleSubType.iosArm32, ModuleSubType.iosArm64, ModuleSubType.iosX64, ModuleSubType.ios -> KotlinIcons.Wizard.IOS
|
||||
ModuleSubType.linuxArm32Hfp, ModuleSubType.linuxMips32, ModuleSubType.linuxMipsel32, ModuleSubType.linuxX64 ->
|
||||
KotlinIcons.Wizard.LINUX
|
||||
ModuleSubType.macosX64 -> KotlinIcons.Wizard.MAC_OS
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package ${package}
|
||||
|
||||
#set( $TEMPLATE_BEGIN= '${' )
|
||||
|
||||
class Greeting {
|
||||
fun greeting(): String {
|
||||
return "Hello, ${TEMPLATE_BEGIN}Platform().platform}!"
|
||||
}
|
||||
}
|
||||
+8
-1
@@ -96,8 +96,15 @@ object AndroidSinglePlatformModuleConfigurator :
|
||||
module: Module,
|
||||
modulePath: Path
|
||||
): TaskResult<Unit> = computeM {
|
||||
val sharedModule = configurationData.allModules.firstOrNull { it.configurator == MppModuleConfigurator }
|
||||
|
||||
val javaPackage = module.javaPackage(configurationData.pomIr)
|
||||
val settings = mapOf("package" to javaPackage.asCodePackage())
|
||||
val sharedPackage = sharedModule?.javaPackage(configurationData.pomIr)
|
||||
|
||||
val settings = mapOf(
|
||||
"package" to javaPackage.asCodePackage(),
|
||||
"sharedPackage" to sharedPackage?.asCodePackage()
|
||||
)
|
||||
TemplatesPlugin.addFileTemplates.execute(
|
||||
listOf(
|
||||
FileTemplate(AndroidModuleConfigurator.FileTemplateDescriptors.activityMainXml, modulePath, settings),
|
||||
|
||||
+9
-7
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileDescriptor
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptorWithPath
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTextDescriptor
|
||||
import java.nio.file.Path
|
||||
|
||||
@@ -93,6 +92,7 @@ object MppModuleConfigurator : ModuleConfigurator,
|
||||
FileTemplate(
|
||||
file.fileDescriptor,
|
||||
projectPath / pathForFileInTarget(modulePath, module, file.javaPackage, file.filename, target, file.type),
|
||||
mapOf("package" to file.javaPackage?.asCodePackage())
|
||||
)
|
||||
}
|
||||
TemplatesPlugin.fileTemplatesToRender.addValues(fileTemplates)
|
||||
@@ -168,7 +168,7 @@ class MppSources(val mppFiles: List<MppFile>, val simpleFiles: List<SimpleFiles>
|
||||
fun getFilesFor(moduleSubType: ModuleSubType): List<SimpleFile> =
|
||||
simpleFiles.filter { moduleSubType in it.moduleSubTypes }.flatMap { it.files }
|
||||
|
||||
class Builder {
|
||||
class Builder(val javaPackage: JavaPackage?) {
|
||||
private val mppFiles = mutableListOf<MppFile>()
|
||||
private val simpleFiles = mutableListOf<SimpleFiles>()
|
||||
|
||||
@@ -177,7 +177,7 @@ class MppSources(val mppFiles: List<MppFile>, val simpleFiles: List<SimpleFiles>
|
||||
}
|
||||
|
||||
fun filesFor(vararg moduleSubTypes: ModuleSubType, init: SimpleFiles.Builder.() -> Unit) {
|
||||
simpleFiles += SimpleFiles.Builder(moduleSubTypes.toList()).apply(init).build()
|
||||
simpleFiles += SimpleFiles.Builder(moduleSubTypes.toList(), javaPackage).apply(init).build()
|
||||
}
|
||||
|
||||
fun build() = MppSources(mppFiles, simpleFiles)
|
||||
@@ -186,11 +186,13 @@ class MppSources(val mppFiles: List<MppFile>, val simpleFiles: List<SimpleFiles>
|
||||
|
||||
|
||||
data class SimpleFiles(val moduleSubTypes: List<ModuleSubType>, val files: List<SimpleFile>) {
|
||||
class Builder(private val moduleSubTypes: List<ModuleSubType>) {
|
||||
class Builder(private val moduleSubTypes: List<ModuleSubType>, val filesPackage: JavaPackage?) {
|
||||
private val files = mutableListOf<SimpleFile>()
|
||||
|
||||
fun file(fileDescriptor: FileDescriptor, filename: String, type: SourcesetType, init: SimpleFile.Builder.() -> Unit = {}) {
|
||||
files += SimpleFile.Builder(fileDescriptor, filename, type).apply(init).build()
|
||||
files += SimpleFile.Builder(fileDescriptor, filename, type).apply(init).apply {
|
||||
javaPackage = filesPackage
|
||||
}.build()
|
||||
}
|
||||
|
||||
fun build() = SimpleFiles(moduleSubTypes, files)
|
||||
@@ -208,8 +210,8 @@ data class SimpleFile(val fileDescriptor: FileDescriptor, val javaPackage: JavaP
|
||||
}
|
||||
|
||||
|
||||
fun mppSources(init: MppSources.Builder.() -> Unit): MppSources =
|
||||
MppSources.Builder().apply(init).build()
|
||||
fun mppSources(javaPackage: JavaPackage, init: MppSources.Builder.() -> Unit): MppSources =
|
||||
MppSources.Builder(javaPackage).apply(init).build()
|
||||
|
||||
sealed class MppDeclaration {
|
||||
@Suppress("SpellCheckingInspection")
|
||||
|
||||
+1
-1
@@ -330,7 +330,6 @@ object MultiplatformMobileApplicationProjectTemplate : ProjectTemplate() {
|
||||
)
|
||||
)
|
||||
)
|
||||
+shared
|
||||
+Module(
|
||||
"iosApp",
|
||||
IOSSinglePlatformModuleConfigurator,
|
||||
@@ -347,6 +346,7 @@ object MultiplatformMobileApplicationProjectTemplate : ProjectTemplate() {
|
||||
subModules = emptyList(),
|
||||
dependencies = mutableListOf(ModuleReference.ByModule(shared))
|
||||
)
|
||||
+shared // shared module must be the last so dependent modules could create actual files
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+19
-11
@@ -19,6 +19,8 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConver
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.JavaPackage
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.javaPackage
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptor
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.asSrcOf
|
||||
@@ -77,10 +79,12 @@ sealed class ModuleDependencyType(
|
||||
from = AndroidSinglePlatformModuleConfigurator::class,
|
||||
to = MppModuleConfigurator::class
|
||||
) {
|
||||
override fun Writer.runArbitraryTaskBeforeIRsCreated(
|
||||
override fun Writer.runArbitraryTask(
|
||||
from: Module,
|
||||
to: Module,
|
||||
): TaskResult<Unit> = addExpectFilesForMppModuleForAndroidAndIos(to)
|
||||
toModulePath: Path,
|
||||
data: ModulesToIrConversionData
|
||||
): TaskResult<Unit> = addExpectFilesForMppModuleForAndroidAndIos(to, data)
|
||||
}
|
||||
|
||||
object IOSToMppSinglePlatformToMPP : ModuleDependencyType(
|
||||
@@ -96,6 +100,7 @@ sealed class ModuleDependencyType(
|
||||
toModulePath: Path,
|
||||
data: ModulesToIrConversionData
|
||||
): TaskResult<Unit> = compute {
|
||||
addExpectFilesForMppModuleForAndroidAndIos(to, data)
|
||||
inContextOfModuleConfigurator(from) {
|
||||
IOSSinglePlatformModuleConfigurator.dependentModule.reference.update {
|
||||
IOSSinglePlatformModuleConfigurator.DependentModuleReference(to).asSuccess()
|
||||
@@ -104,11 +109,6 @@ sealed class ModuleDependencyType(
|
||||
addDummyFileIfNeeded(to, toModulePath).ensure()
|
||||
}
|
||||
|
||||
override fun Writer.runArbitraryTaskBeforeIRsCreated(
|
||||
from: Module,
|
||||
to: Module,
|
||||
): TaskResult<Unit> = addExpectFilesForMppModuleForAndroidAndIos(to)
|
||||
|
||||
private fun Writer.addDummyFileIfNeeded(
|
||||
to: Module,
|
||||
toModulePath: Path,
|
||||
@@ -196,9 +196,13 @@ sealed class ModuleDependencyType(
|
||||
}
|
||||
}
|
||||
|
||||
private fun Writer.addExpectFilesForMppModuleForAndroidAndIos(mppModule: Module): TaskResult<Unit> {
|
||||
val expectFiles = mppSources {
|
||||
private fun Writer.addExpectFilesForMppModuleForAndroidAndIos(mppModule: Module, data: ModulesToIrConversionData): TaskResult<Unit> {
|
||||
val javaPackage = mppModule.javaPackage(data.pomIr)
|
||||
|
||||
val expectFiles = mppSources(javaPackage) {
|
||||
mppFile("Platform.kt") {
|
||||
`package` = javaPackage.asCodePackage()
|
||||
|
||||
`class`("Platform") {
|
||||
expectBody = "val platform: String"
|
||||
actualFor(
|
||||
@@ -207,7 +211,7 @@ private fun Writer.addExpectFilesForMppModuleForAndroidAndIos(mppModule: Module)
|
||||
)
|
||||
|
||||
actualFor(
|
||||
ModuleSubType.iosArm64, ModuleSubType.iosX64,
|
||||
ModuleSubType.iosArm64, ModuleSubType.iosX64, ModuleSubType.ios,
|
||||
actualBody =
|
||||
"""actual val platform: String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion"""
|
||||
) {
|
||||
@@ -216,11 +220,15 @@ private fun Writer.addExpectFilesForMppModuleForAndroidAndIos(mppModule: Module)
|
||||
}
|
||||
}
|
||||
|
||||
filesFor(ModuleSubType.common) {
|
||||
file(FileTemplateDescriptor("mppCommon/Greeting.kt.vm", relativePath = null), "Greeting.kt", SourcesetType.main)
|
||||
}
|
||||
|
||||
filesFor(ModuleSubType.android) {
|
||||
file(FileTemplateDescriptor("android/androidTest.kt.vm", relativePath = null), "androidTest.kt", SourcesetType.test)
|
||||
}
|
||||
|
||||
filesFor(ModuleSubType.iosArm64, ModuleSubType.iosX64) {
|
||||
filesFor(ModuleSubType.iosArm64, ModuleSubType.iosX64, ModuleSubType.ios) {
|
||||
file(FileTemplateDescriptor("ios/iosTest.kt.vm", relativePath = null), "iosTest.kt", SourcesetType.test)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user