Adapt AS wizard to changes in main wizard
This commit is contained in:
+2
-2
@@ -19,5 +19,5 @@ pluginManagement {
|
|||||||
rootProject.name = 'multiplatformMobileApplication'
|
rootProject.name = 'multiplatformMobileApplication'
|
||||||
|
|
||||||
|
|
||||||
include(':shared')
|
include(':androidApp')
|
||||||
include(':androidApp')
|
include(':shared')
|
||||||
+2
-2
@@ -19,5 +19,5 @@ pluginManagement {
|
|||||||
rootProject.name = "multiplatformMobileApplication"
|
rootProject.name = "multiplatformMobileApplication"
|
||||||
|
|
||||||
|
|
||||||
include(":shared")
|
include(":androidApp")
|
||||||
include(":androidApp")
|
include(":shared")
|
||||||
+2
-2
@@ -18,9 +18,9 @@ class MainActivity : AppCompatActivity() {
|
|||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_main)
|
setContentView(R.layout.activity_main)
|
||||||
|
|
||||||
#if( $sharedPackage )
|
#if( $sharedPackage )
|
||||||
val tv: TextView = findViewById(R.id.text_view)
|
val tv: TextView = findViewById(R.id.text_view)
|
||||||
tv.text = greet()
|
tv.text = greet()
|
||||||
#end
|
#end
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
package ${package}
|
||||||
|
|
||||||
import org.junit.Assert.assertTrue
|
import org.junit.Assert.assertTrue
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
package ${package}
|
||||||
|
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
import kotlin.test.assertTrue
|
import kotlin.test.assertTrue
|
||||||
|
|
||||||
|
|||||||
+4
-5
@@ -17,10 +17,7 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.irsList
|
|||||||
import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact
|
import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin
|
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.*
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repositories
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.javaPackage
|
import org.jetbrains.kotlin.tools.projectWizard.settings.javaPackage
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate
|
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate
|
||||||
@@ -96,7 +93,9 @@ object AndroidSinglePlatformModuleConfigurator :
|
|||||||
module: Module,
|
module: Module,
|
||||||
modulePath: Path
|
modulePath: Path
|
||||||
): TaskResult<Unit> = computeM {
|
): TaskResult<Unit> = computeM {
|
||||||
val sharedModule = configurationData.allModules.firstOrNull { it.configurator == MppModuleConfigurator }
|
val sharedModule = module.dependencies
|
||||||
|
.map { if (it is ModuleReference.ByModule) it.module else null }
|
||||||
|
.firstOrNull { it?.configurator == MppModuleConfigurator }
|
||||||
|
|
||||||
val javaPackage = module.javaPackage(configurationData.pomIr)
|
val javaPackage = module.javaPackage(configurationData.pomIr)
|
||||||
val sharedPackage = sharedModule?.javaPackage(configurationData.pomIr)
|
val sharedPackage = sharedModule?.javaPackage(configurationData.pomIr)
|
||||||
|
|||||||
+27
-16
@@ -9,7 +9,10 @@ import org.jetbrains.annotations.NonNls
|
|||||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.ModuleConfiguratorProperty
|
import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.ModuleConfiguratorProperty
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ModuleConfiguratorSetting
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinBuildSystemPluginIR
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinBuildSystemPluginIR
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath
|
||||||
@@ -50,6 +53,13 @@ object MppModuleConfigurator : ModuleConfigurator,
|
|||||||
override fun getConfiguratorProperties(): List<ModuleConfiguratorProperty<*>> =
|
override fun getConfiguratorProperties(): List<ModuleConfiguratorProperty<*>> =
|
||||||
listOf(mppSources)
|
listOf(mppSources)
|
||||||
|
|
||||||
|
val generateTests by booleanSetting("Generate Tests", GenerationPhase.PROJECT_GENERATION) {
|
||||||
|
defaultValue = value(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getConfiguratorSettings(): List<ModuleConfiguratorSetting<*, *>> =
|
||||||
|
super.getConfiguratorSettings() + generateTests
|
||||||
|
|
||||||
override fun Writer.runArbitraryTask(
|
override fun Writer.runArbitraryTask(
|
||||||
configurationData: ModulesToIrConversionData,
|
configurationData: ModulesToIrConversionData,
|
||||||
module: Module,
|
module: Module,
|
||||||
@@ -84,18 +94,20 @@ object MppModuleConfigurator : ModuleConfigurator,
|
|||||||
modulePath: Path
|
modulePath: Path
|
||||||
): TaskResult<Unit> = inContextOfModuleConfigurator(module) {
|
): TaskResult<Unit> = inContextOfModuleConfigurator(module) {
|
||||||
val mppFiles = mppSources.reference.propertyValue
|
val mppFiles = mppSources.reference.propertyValue
|
||||||
module.subModules.mapSequenceIgnore mapTargets@{ target ->
|
val filesWithPaths = module.subModules.flatMap { target ->
|
||||||
val moduleSubType = //TODO handle for non-simple target configurator
|
val moduleSubType = //TODO handle for non-simple target configurator
|
||||||
target.configurator.safeAs<SimpleTargetConfigurator>()?.moduleSubType ?: return@mapTargets UNIT_SUCCESS
|
target.configurator.safeAs<SimpleTargetConfigurator>()?.moduleSubType ?: return@flatMap emptyList()
|
||||||
val files = mppFiles.flatMap { it.getFilesFor(moduleSubType) }.distinctBy { it.uniqueIdentifier }
|
mppFiles
|
||||||
val fileTemplates = files.map { file ->
|
.flatMap { it.getFilesFor(moduleSubType) }
|
||||||
FileTemplate(
|
.distinctBy { it.uniqueIdentifier }
|
||||||
file.fileDescriptor,
|
.map { file ->
|
||||||
projectPath / pathForFileInTarget(modulePath, module, file.javaPackage, file.filename, target, file.type),
|
val path = projectPath / pathForFileInTarget(modulePath, module, file.javaPackage, file.filename, target, file.type)
|
||||||
mapOf("package" to file.javaPackage?.asCodePackage())
|
file to path
|
||||||
)
|
}
|
||||||
}
|
}.distinctBy { (_, path) -> path }
|
||||||
TemplatesPlugin.fileTemplatesToRender.addValues(fileTemplates)
|
filesWithPaths.mapSequenceIgnore { (file, path) ->
|
||||||
|
val fileTemplate = FileTemplate(file.fileDescriptor, path, mapOf("package" to file.javaPackage?.asCodePackage()))
|
||||||
|
TemplatesPlugin.fileTemplatesToRender.addValues(fileTemplate)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,8 +157,7 @@ data class MppFile(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ExpectFileDSL
|
@ExpectFileDSL
|
||||||
class Builder(private val filename: String) {
|
class Builder(private val filename: String, val javaPackage: JavaPackage? = null) {
|
||||||
var `package`: String? = null
|
|
||||||
private val declarations = mutableListOf<MppDeclaration>()
|
private val declarations = mutableListOf<MppDeclaration>()
|
||||||
|
|
||||||
fun function(signature: String, init: MppFunction.Builder.() -> Unit = {}) {
|
fun function(signature: String, init: MppFunction.Builder.() -> Unit = {}) {
|
||||||
@@ -157,7 +168,7 @@ data class MppFile(
|
|||||||
declarations += MppClass.Builder(name).apply(init).build()
|
declarations += MppClass.Builder(name).apply(init).build()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun build() = MppFile(filename, `package`?.let(::JavaPackage), declarations)
|
fun build() = MppFile(filename, javaPackage, declarations)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,7 +184,7 @@ class MppSources(val mppFiles: List<MppFile>, val simpleFiles: List<SimpleFiles>
|
|||||||
private val simpleFiles = mutableListOf<SimpleFiles>()
|
private val simpleFiles = mutableListOf<SimpleFiles>()
|
||||||
|
|
||||||
fun mppFile(filename: String, init: MppFile.Builder.() -> Unit) {
|
fun mppFile(filename: String, init: MppFile.Builder.() -> Unit) {
|
||||||
mppFiles += MppFile.Builder(filename).apply(init).build()
|
mppFiles += MppFile.Builder(filename, javaPackage).apply(init).build()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun filesFor(vararg moduleSubTypes: ModuleSubType, init: SimpleFiles.Builder.() -> Unit) {
|
fun filesFor(vararg moduleSubTypes: ModuleSubType, init: SimpleFiles.Builder.() -> Unit) {
|
||||||
@@ -210,7 +221,7 @@ data class SimpleFile(val fileDescriptor: FileDescriptor, val javaPackage: JavaP
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun mppSources(javaPackage: JavaPackage, init: MppSources.Builder.() -> Unit): MppSources =
|
fun mppSources(javaPackage: JavaPackage? = null, init: MppSources.Builder.() -> Unit): MppSources =
|
||||||
MppSources.Builder(javaPackage).apply(init).build()
|
MppSources.Builder(javaPackage).apply(init).build()
|
||||||
|
|
||||||
sealed class MppDeclaration {
|
sealed class MppDeclaration {
|
||||||
|
|||||||
+16
-1
@@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin
|
package org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin
|
||||||
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||||
@@ -11,6 +16,7 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildFileIR
|
|||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.RepositoryIR
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.RepositoryIR
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.withIrs
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.withIrs
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.ModuleConfigurator
|
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.ModuleConfigurator
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.inContextOfModuleConfigurator
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
|
||||||
@@ -129,13 +135,21 @@ class KotlinPlugin(context: Context) : Plugin(context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val createResourceDirectories by booleanSetting("Generate Resource Folders", GenerationPhase.PROJECT_GENERATION) {
|
||||||
|
defaultValue = value(true)
|
||||||
|
}
|
||||||
|
|
||||||
val createSourcesetDirectories by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
val createSourcesetDirectories by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||||
runAfter(KotlinPlugin.createModules)
|
runAfter(KotlinPlugin.createModules)
|
||||||
withAction {
|
withAction {
|
||||||
fun Path.createKotlinAndResourceDirectories(moduleConfigurator: ModuleConfigurator) =
|
fun Path.createKotlinAndResourceDirectories(moduleConfigurator: ModuleConfigurator) =
|
||||||
with(service<FileSystemWizardService>()) {
|
with(service<FileSystemWizardService>()) {
|
||||||
createDirectory(this@createKotlinAndResourceDirectories / moduleConfigurator.kotlinDirectoryName) andThen
|
createDirectory(this@createKotlinAndResourceDirectories / moduleConfigurator.kotlinDirectoryName) andThen
|
||||||
createDirectory(this@createKotlinAndResourceDirectories / moduleConfigurator.resourcesDirectoryName)
|
if (createResourceDirectories.settingValue) {
|
||||||
|
createDirectory(this@createKotlinAndResourceDirectories / moduleConfigurator.resourcesDirectoryName)
|
||||||
|
} else {
|
||||||
|
UNIT_SUCCESS
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
forEachModule { moduleIR ->
|
forEachModule { moduleIR ->
|
||||||
@@ -165,6 +179,7 @@ class KotlinPlugin(context: Context) : Plugin(context) {
|
|||||||
listOf(
|
listOf(
|
||||||
projectKind,
|
projectKind,
|
||||||
modules,
|
modules,
|
||||||
|
createResourceDirectories,
|
||||||
)
|
)
|
||||||
|
|
||||||
override val pipelineTasks: List<PipelineTask> =
|
override val pipelineTasks: List<PipelineTask> =
|
||||||
|
|||||||
+11
-8
@@ -201,8 +201,6 @@ private fun Writer.addExpectFilesForMppModuleForAndroidAndIos(mppModule: Module,
|
|||||||
|
|
||||||
val expectFiles = mppSources(javaPackage) {
|
val expectFiles = mppSources(javaPackage) {
|
||||||
mppFile("Platform.kt") {
|
mppFile("Platform.kt") {
|
||||||
`package` = javaPackage.asCodePackage()
|
|
||||||
|
|
||||||
`class`("Platform") {
|
`class`("Platform") {
|
||||||
expectBody = "val platform: String"
|
expectBody = "val platform: String"
|
||||||
actualFor(
|
actualFor(
|
||||||
@@ -213,7 +211,7 @@ private fun Writer.addExpectFilesForMppModuleForAndroidAndIos(mppModule: Module,
|
|||||||
actualFor(
|
actualFor(
|
||||||
ModuleSubType.iosArm64, ModuleSubType.iosX64, ModuleSubType.ios,
|
ModuleSubType.iosArm64, ModuleSubType.iosX64, ModuleSubType.ios,
|
||||||
actualBody =
|
actualBody =
|
||||||
"""actual val platform: String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion"""
|
"""actual val platform: String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion"""
|
||||||
) {
|
) {
|
||||||
import("platform.UIKit.UIDevice")
|
import("platform.UIKit.UIDevice")
|
||||||
}
|
}
|
||||||
@@ -224,13 +222,18 @@ private fun Writer.addExpectFilesForMppModuleForAndroidAndIos(mppModule: Module,
|
|||||||
file(FileTemplateDescriptor("mppCommon/Greeting.kt.vm", relativePath = null), "Greeting.kt", SourcesetType.main)
|
file(FileTemplateDescriptor("mppCommon/Greeting.kt.vm", relativePath = null), "Greeting.kt", SourcesetType.main)
|
||||||
}
|
}
|
||||||
|
|
||||||
filesFor(ModuleSubType.android) {
|
inContextOfModuleConfigurator(mppModule) {
|
||||||
file(FileTemplateDescriptor("android/androidTest.kt.vm", relativePath = null), "androidTest.kt", SourcesetType.test)
|
if (MppModuleConfigurator.generateTests.reference.settingValue) {
|
||||||
|
filesFor(ModuleSubType.android) {
|
||||||
|
file(FileTemplateDescriptor("android/androidTest.kt.vm", relativePath = null), "androidTest.kt", SourcesetType.test)
|
||||||
|
}
|
||||||
|
|
||||||
|
filesFor(ModuleSubType.iosArm64, ModuleSubType.iosX64, ModuleSubType.ios) {
|
||||||
|
file(FileTemplateDescriptor("ios/iosTest.kt.vm", relativePath = null), "iosTest.kt", SourcesetType.test)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
filesFor(ModuleSubType.iosArm64, ModuleSubType.iosX64, ModuleSubType.ios) {
|
|
||||||
file(FileTemplateDescriptor("ios/iosTest.kt.vm", relativePath = null), "iosTest.kt", SourcesetType.test)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return inContextOfModuleConfigurator(mppModule) { MppModuleConfigurator.mppSources.reference.addValues(listOf(expectFiles)) }
|
return inContextOfModuleConfigurator(mppModule) { MppModuleConfigurator.mppSources.reference.addValues(listOf(expectFiles)) }
|
||||||
}
|
}
|
||||||
+4
-4
@@ -18,7 +18,7 @@ class ExpectedFileTest {
|
|||||||
function("f(x: Int): String")
|
function("f(x: Int): String")
|
||||||
function("y(x: Int): String")
|
function("y(x: Int): String")
|
||||||
}
|
}
|
||||||
}.first()
|
}.mppFiles.first()
|
||||||
val generatedFileText = file.printForModuleSubType(ModuleSubType.common)
|
val generatedFileText = file.printForModuleSubType(ModuleSubType.common)
|
||||||
val expectedFileText = """
|
val expectedFileText = """
|
||||||
expect fun f(x: Int): String
|
expect fun f(x: Int): String
|
||||||
@@ -35,7 +35,7 @@ class ExpectedFileTest {
|
|||||||
`class`("A")
|
`class`("A")
|
||||||
`class`("B")
|
`class`("B")
|
||||||
}
|
}
|
||||||
}.first()
|
}.mppFiles.first()
|
||||||
val generatedFileText = file.printForModuleSubType(ModuleSubType.common)
|
val generatedFileText = file.printForModuleSubType(ModuleSubType.common)
|
||||||
val expectedFileText = """
|
val expectedFileText = """
|
||||||
expected class A expected constructor()
|
expected class A expected constructor()
|
||||||
@@ -58,7 +58,7 @@ class ExpectedFileTest {
|
|||||||
default("TODO()")
|
default("TODO()")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.first()
|
}.mppFiles.first()
|
||||||
run {
|
run {
|
||||||
val generatedFileText = file.printForModuleSubType(ModuleSubType.jvm)
|
val generatedFileText = file.printForModuleSubType(ModuleSubType.jvm)
|
||||||
val expectedFileText = """
|
val expectedFileText = """
|
||||||
@@ -103,7 +103,7 @@ class ExpectedFileTest {
|
|||||||
default("// nothing here")
|
default("// nothing here")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.first()
|
}.mppFiles.first()
|
||||||
run {
|
run {
|
||||||
val generatedFileText = file.printForModuleSubType(ModuleSubType.jvm)
|
val generatedFileText = file.printForModuleSubType(ModuleSubType.jvm)
|
||||||
val expectedFileText = """
|
val expectedFileText = """
|
||||||
|
|||||||
Reference in New Issue
Block a user