Wizard: add mpp mobile library template

This commit is contained in:
Ilya Kirillov
2020-03-20 16:38:42 +03:00
parent d9a88b4156
commit 732154cef5
9 changed files with 215 additions and 6 deletions
@@ -2,6 +2,7 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep
import com.intellij.ui.components.JBTextField
import com.intellij.ui.layout.panel
import com.intellij.util.ui.JBUI
import com.intellij.util.ui.UIUtil
import org.jetbrains.kotlin.idea.projectWizard.UiEditorUsageStats
import org.jetbrains.kotlin.tools.projectWizard.core.Context
@@ -17,8 +18,7 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module.Comp
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.isRootModule
import org.jetbrains.kotlin.tools.projectWizard.templates.Template
import org.jetbrains.kotlin.tools.projectWizard.templates.settings
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.DynamicComponent
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.TitledComponent
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.*
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components.DropDownComponent
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components.TextFieldComponent
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.label
@@ -123,6 +123,7 @@ private class ModuleTemplateComponent(
override val needCentering: Boolean = false
private val templateDescriptionLabel = label("") {
fontColor = UIUtil.FontColor.BRIGHTER
addBorder(JBUI.Borders.empty(4, 4))
}
override fun onInit() {
@@ -134,10 +135,9 @@ private class ModuleTemplateComponent(
templateDescriptionLabel.text = template?.description
}
override val component = panel {
row {
dropDown.component(growX, comment = module.template?.description)
}
override val component = borderPanel {
addToCenter(dropDown.component)
addToBottom(templateDescriptionLabel)
}
override val title: String = "Template"
@@ -65,6 +65,11 @@ public class ProjectTemplateNewWizardProjectImportTestGenerated extends Abstract
runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformLibrary/");
}
@TestMetadata("multiplatformMobileLibrary")
public void testMultiplatformMobileLibrary() throws Exception {
runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/");
}
@TestMetadata("nativeConsoleApplication")
public void testNativeConsoleApplication() throws Exception {
runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/nativeConsoleApplication/");
@@ -118,6 +123,11 @@ public class ProjectTemplateNewWizardProjectImportTestGenerated extends Abstract
runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformLibrary/");
}
@TestMetadata("multiplatformMobileLibrary")
public void testMultiplatformMobileLibrary() throws Exception {
runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/");
}
@TestMetadata("nativeConsoleApplication")
public void testNativeConsoleApplication() throws Exception {
runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/nativeConsoleApplication/");
@@ -171,6 +181,11 @@ public class ProjectTemplateNewWizardProjectImportTestGenerated extends Abstract
runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformLibrary/");
}
@TestMetadata("multiplatformMobileLibrary")
public void testMultiplatformMobileLibrary() throws Exception {
runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/");
}
@TestMetadata("nativeConsoleApplication")
public void testNativeConsoleApplication() throws Exception {
runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/nativeConsoleApplication/");
@@ -0,0 +1,61 @@
plugins {
id 'org.jetbrains.kotlin.multiplatform' version '1.3.70'
id 'com.android.application'
id 'kotlin-android-extensions'
}
group = 'me.user'
version = '1.0-SNAPSHOT'
repositories {
gradlePluginPortal()
google()
jcenter()
mavenCentral()
}
kotlin {
android()
iosX64('ios')
sourceSets {
commonMain {
dependencies {
implementation kotlin('stdlib-common')
}
}
commonTest {
dependencies {
implementation kotlin('test-common')
implementation kotlin('test-annotations-common')
}
}
androidMain {
dependencies {
implementation kotlin('stdlib-jdk7')
implementation 'androidx.core:core-ktx:1.1.0'
}
}
androidTest {
}
iosMain {
}
iosTest {
}
}
}
android {
compileSdkVersion 29
defaultConfig {
applicationId 'me.user.android'
minSdkVersion 24
targetSdkVersion 29
versionCode 1
versionName '1.0'
}
buildTypes {
'release' {
minifyEnabled false
}
}
}
@@ -0,0 +1,55 @@
plugins {
kotlin("multiplatform") version "1.3.70"
id("com.android.application")
id("kotlin-android-extensions")
}
group = "me.user"
version = "1.0-SNAPSHOT"
repositories {
gradlePluginPortal()
google()
jcenter()
mavenCentral()
}
kotlin {
android()
iosX64("ios")
sourceSets {
val commonMain by getting {
dependencies {
implementation(kotlin("stdlib-common"))
}
}
val commonTest by getting {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
}
}
val androidMain by getting {
dependencies {
implementation(kotlin("stdlib-jdk7"))
implementation("androidx.core:core-ktx:1.1.0")
}
}
val androidTest by getting
val iosMain by getting
val iosTest by getting
}
}
android {
compileSdkVersion(29)
defaultConfig {
applicationId = "me.user.android"
minSdkVersion(24)
targetSdkVersion(29)
versionCode = 1
versionName = "1.0"
}
buildTypes {
getByName("release") {
isMinifyEnabled = false
}
}
}
@@ -0,0 +1,16 @@
pluginManagement {
repositories {
gradlePluginPortal()
google()
jcenter()
}
resolutionStrategy {
eachPlugin {
if (requested.id.namespace == 'com.android' || requested.id.name == 'kotlin-android-extensions') {
useModule('com.android.tools.build:gradle:3.5.2')
}
}
}
}
rootProject.name = 'MultiplatformMobileLibrary'
@@ -0,0 +1,16 @@
pluginManagement {
repositories {
gradlePluginPortal()
google()
jcenter()
}
resolutionStrategy {
eachPlugin {
if (requested.id.namespace == "com.android" || requested.id.name == "kotlin-android-extensions") {
useModule("com.android.tools.build:gradle:3.5.2")
}
}
}
}
rootProject.name = "MultiplatformMobileLibrary"
@@ -63,6 +63,11 @@ public class ProjectTemplateBuildFileGenerationTestGenerated extends AbstractPro
runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformLibrary/");
}
@TestMetadata("multiplatformMobileLibrary")
public void testMultiplatformMobileLibrary() throws Exception {
runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/multiplatformMobileLibrary/");
}
@TestMetadata("nativeConsoleApplication")
public void testNativeConsoleApplication() throws Exception {
runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/projectTemplatesBuildFileGeneration/nativeConsoleApplication/");
@@ -4,6 +4,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.buildList
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.*
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.*
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.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
@@ -54,6 +55,7 @@ sealed class ProjectTemplate : DisplayableSettingItem {
MultiplatformLibrary,
AndroidApplication,
IOSApplication,
MultiplatformMobileLibrary,
NativeConsoleApplication,
JsBrowserApplication
)
@@ -284,4 +286,41 @@ object IOSApplication : ProjectTemplate() {
)
)
)
}
object MultiplatformMobileLibrary : ProjectTemplate() {
override val title = "Multiplatform Mobile Library"
override val description = "Create a library that supports sharing code between iOS and Android."
override val suggestedProjectName = "myMppMobileLibrary"
override val projectKind = ProjectKind.Multiplatform
override val setsPluginSettings: List<SettingWithValue<*, *>>
get() = listOf(
KotlinPlugin::modules withValue listOf(
MultiplatformModule(
"library",
listOf(
ModuleType.common.createDefaultTarget(),
Module(
"android",
AndroidTargetConfigurator,
null,
SourcesetType.ALL.map { type ->
Sourceset(type, dependencies = emptyList())
},
emptyList()
),
Module(
"ios",
RealNativeTargetConfigurator.configuratorsByModuleType.getValue(ModuleSubType.iosX64),
null,
SourcesetType.ALL.map { type ->
Sourceset(type, dependencies = emptyList())
},
emptyList()
)
)
)
)
)
}