From dc26138da304e6fde76e3ebca772fa891c80570b Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 21 Jan 2020 18:05:15 +0300 Subject: [PATCH] Wizard: add support of JS singleplatform projects --- .../CreateModuleOrTargetPopup.kt | 4 ++ .../modulesEditor/ModulesEditorComponent.kt | 1 + .../ModulesEditorToolbarDecorator.kt | 13 +++--- .../modulesEditor/NewModuleCreator.kt | 2 + .../secondStep/modulesEditor/TargetsModel.kt | 2 +- .../tools/projectWizard/wizard/ui/ui.kt | 3 +- .../templates/simpleJsClient/TestClient.kt.vm | 12 ++++++ .../templates/simpleJsClient/client.kt.vm | 13 +++--- .../ir/buildsystem/BuildSystemPluginIR.kt | 2 +- .../ir/buildsystem/gradle/GradleIR.kt | 2 +- .../JsModuleConfigurator.kt | 42 +++++++++++++++++++ .../moduleConfigurators/TargetConfigurator.kt | 6 +-- .../moduleConfigurators/configurators.kt | 2 +- .../plugins/kotlin/KotlinPlugin.kt | 2 +- .../plugins/kotlin/ModulesToIRsConverter.kt | 2 +- .../projectTemplates/ProjectTemplate.kt | 29 ++++++++++++- .../settings/buildsystem/Module.kt | 5 ++- .../templates/SimpleJsClientTemplate.kt | 9 ++-- 18 files changed, 121 insertions(+), 30 deletions(-) create mode 100644 libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/simpleJsClient/TestClient.kt.vm create mode 100644 libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/CreateModuleOrTargetPopup.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/CreateModuleOrTargetPopup.kt index 4edf5981778..92a5d3985d2 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/CreateModuleOrTargetPopup.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/CreateModuleOrTargetPopup.kt @@ -19,6 +19,7 @@ import javax.swing.Icon class CreateModuleOrTargetPopup private constructor( private val target: Module?, private val allowMultiplatform: Boolean, + private val allowSinglepaltformJs: Boolean, private val allowAndroid: Boolean, private val allowIos: Boolean, private val createTarget: (TargetConfigurator) -> Unit, @@ -42,6 +43,7 @@ class CreateModuleOrTargetPopup private constructor( if (allowMultiplatform) +MppModuleConfigurator +JvmSinglePlatformModuleConfigurator if (allowAndroid) +AndroidSinglePlatformModuleConfigurator + if (allowSinglepaltformJs) +JsSingleplatformModuleConfigurator //todo ios support //if (allowIos) +IOSSinglePlatformModuleConfigurator @@ -101,6 +103,7 @@ class CreateModuleOrTargetPopup private constructor( fun create( target: Module?, allowMultiplatform: Boolean, + allowSinglepaltformJs: Boolean, allowAndroid: Boolean, allowIos: Boolean, createTarget: (TargetConfigurator) -> Unit, @@ -108,6 +111,7 @@ class CreateModuleOrTargetPopup private constructor( ) = CreateModuleOrTargetPopup( target = target, allowMultiplatform = allowMultiplatform, + allowSinglepaltformJs = allowSinglepaltformJs, allowAndroid = allowAndroid, allowIos = allowIos, createTarget = createTarget, diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorComponent.kt index c21f591f949..7105e28493e 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorComponent.kt @@ -28,6 +28,7 @@ class ModulesEditorComponent( moduleCreator.create( target = null, // The empty tree case allowMultiplatform = isMppProject, + allowSinglepaltformJs = isMppProject, allowAndroid = isMppProject, allowIos = isMppProject, allModules = value ?: emptyList(), diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorToolbarDecorator.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorToolbarDecorator.kt index de62e9e3880..1ed3af1aca5 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorToolbarDecorator.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorToolbarDecorator.kt @@ -4,9 +4,7 @@ import com.intellij.icons.AllIcons import com.intellij.openapi.actionSystem.ActionToolbarPosition import com.intellij.openapi.ui.Messages import com.intellij.ui.ToolbarDecorator -import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.AndroidSinglePlatformModuleConfigurator -import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.IOSSinglePlatformModuleConfigurator -import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.MppModuleConfigurator +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.* import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.withAllSubModules import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.createPanelWithPopupHandler @@ -31,6 +29,9 @@ class ModulesEditorToolbarDecorator( allowMultiplatform = isMultiplatformProject() && isRootModule && allModules.none { it.configurator == MppModuleConfigurator }, + allowSinglepaltformJs = isMultiplatformProject() + && isRootModule + && allModules.none { it.configurator == JsSingleplatformModuleConfigurator }, allowAndroid = isRootModule && isMultiplatformProject() && allModules.none { it.configurator == AndroidSinglePlatformModuleConfigurator }, @@ -52,7 +53,8 @@ class ModulesEditorToolbarDecorator( } text = "Add" + when (tree.selectedSettingItem?.safeAs()?.kind) { ModuleKind.multiplatform -> " Target" - ModuleKind.singleplatform -> " Module" + ModuleKind.singleplatformJvm -> " Module" + ModuleKind.singleplatformJs -> " JS Module" ModuleKind.target -> "" null -> "" } @@ -105,6 +107,7 @@ class ModulesEditorToolbarDecorator( private val Module.kindText get() = when (kind) { ModuleKind.multiplatform -> "Module" - ModuleKind.singleplatform -> "Module" + ModuleKind.singleplatformJvm -> "Module" + ModuleKind.singleplatformJs -> "Module" ModuleKind.target -> "Target" } \ No newline at end of file diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/NewModuleCreator.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/NewModuleCreator.kt index b76bc5f2f9d..0e6fc602c08 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/NewModuleCreator.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/NewModuleCreator.kt @@ -36,6 +36,7 @@ class NewModuleCreator { fun create( target: Module?, allowMultiplatform: Boolean, + allowSinglepaltformJs: Boolean, allowAndroid: Boolean, allowIos: Boolean, allModules: List, @@ -43,6 +44,7 @@ class NewModuleCreator { ) = CreateModuleOrTargetPopup.create( target = target, allowMultiplatform = allowMultiplatform, + allowSinglepaltformJs = allowSinglepaltformJs, allowAndroid = allowAndroid, allowIos = allowIos, createTarget = { targetConfigurator -> diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/TargetsModel.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/TargetsModel.kt index 293bfa90d27..24e491e1adf 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/TargetsModel.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/TargetsModel.kt @@ -22,7 +22,7 @@ class TargetsModel( DefaultMutableTreeNode(moduleToAdd).apply { val userObject = parentToAdd.userObject when { - userObject is Module && userObject.kind == ModuleKind.singleplatform -> { + userObject is Module && userObject.kind == ModuleKind.singleplatformJvm -> { val indexOfLastModule = parentToAdd.children() .toList() .indexOfLast { diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/ui.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/ui.kt index dcbd9d7ce7c..be2a4d8059b 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/ui.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/ui.kt @@ -91,7 +91,8 @@ val Module.icon: Icon get() = when (kind) { ModuleKind.target -> configurator.moduleType.icon ModuleKind.multiplatform -> AllIcons.Nodes.Module - ModuleKind.singleplatform -> AllIcons.Nodes.Module + ModuleKind.singleplatformJs -> KotlinIcons.JS + ModuleKind.singleplatformJvm -> AllIcons.Nodes.Module } diff --git a/libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/simpleJsClient/TestClient.kt.vm b/libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/simpleJsClient/TestClient.kt.vm new file mode 100644 index 00000000000..f3b7fc50a58 --- /dev/null +++ b/libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/simpleJsClient/TestClient.kt.vm @@ -0,0 +1,12 @@ +import kotlin.browser.document +import kotlin.test.Test +import kotlin.test.assertEquals + +class TestClient { + @Test + fun testSayHello() { + val container = document.createElement("div") + container.sayHello() + assertEquals("Hello from JS", container.textContent) + } +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/simpleJsClient/client.kt.vm b/libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/simpleJsClient/client.kt.vm index 9bf6f9b57a8..4d89c6744ca 100644 --- a/libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/simpleJsClient/client.kt.vm +++ b/libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/simpleJsClient/client.kt.vm @@ -1,14 +1,17 @@ import kotlinx.html.div import kotlinx.html.dom.append +import org.w3c.dom.Node import kotlin.browser.document import kotlin.browser.window fun main() { - window.onload = { - document.body?.append { - div { - +"Hello from JS" - } + window.onload = { document.body?.sayHello() } +} + +fun Node.sayHello() { + append { + div { + +"Hello from JS" } } } \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/BuildSystemPluginIR.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/BuildSystemPluginIR.kt index 0eb7fa2bb64..8f7836a3a33 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/BuildSystemPluginIR.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/BuildSystemPluginIR.kt @@ -81,6 +81,6 @@ data class KotlinBuildSystemPluginIR( @Suppress("EnumEntryName", "unused", "SpellCheckingInspection") enum class Type { - jvm, multiplatform, android + jvm, multiplatform, android, js } } \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/gradle/GradleIR.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/gradle/GradleIR.kt index 6614cb7cf8c..1484844893d 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/gradle/GradleIR.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/ir/buildsystem/gradle/GradleIR.kt @@ -15,7 +15,7 @@ interface GradleIR : BuildSystemIR { data class RawGradleIR( val renderer: GradlePrinter.() -> Unit -) : GradleIR { +) : GradleIR, FreeIR { override fun GradlePrinter.renderGradle() = renderer() } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt new file mode 100644 index 00000000000..041a55e0033 --- /dev/null +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt @@ -0,0 +1,42 @@ +/* + * 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.moduleConfigurators + +import org.jetbrains.kotlin.tools.projectWizard.core.buildList +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinBuildSystemPluginIR +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.RawGradleIR +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurationData +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind + +abstract class JSConfigurator : ModuleConfiguratorWithTests() { + override val moduleType: ModuleType get() = ModuleType.js + + override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JS +} + +object JsSingleplatformModuleConfigurator : JSConfigurator() { + override val moduleKind = ModuleKind.singleplatformJs + override val suggestedModuleName = "js" + override val id = "jsSinglepaltform" + override val text = "JS for Browser" + + override val canContainSubModules = false + + override fun createKotlinPluginIR(configurationData: ModuleConfigurationData, module: Module): KotlinBuildSystemPluginIR? = + KotlinBuildSystemPluginIR( + KotlinBuildSystemPluginIR.Type.js, + version = configurationData.kotlinVersion + ) + + override fun createBuildFileIRs(configurationData: ModuleConfigurationData, module: Module): List = buildList { + +RawGradleIR { + +"kotlin.target.browser { }" + } + } +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt index 8d09f8a486e..0b86803a835 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt @@ -51,11 +51,7 @@ private fun Module.createTargetAccessIr(moduleSubType: ModuleSubType) = ) -abstract class JsTargetConfigurator : TargetConfiguratorWithTests(), SingleCoexistenceTargetConfigurator { - override val moduleType: ModuleType get() = ModuleType.js - - override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JS -} +abstract class JsTargetConfigurator : JSConfigurator(), TargetConfigurator, SingleCoexistenceTargetConfigurator object JsBrowserTargetConfigurator : JsTargetConfigurator() { override val id = "jsBrowser" diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt index d4b0178b170..414560b7cbf 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt @@ -27,7 +27,7 @@ object MppModuleConfigurator : ModuleConfigurator { interface SinglePlatformModuleConfigurator : ModuleConfigurator { - override val moduleKind get() = ModuleKind.singleplatform + override val moduleKind get() = ModuleKind.singleplatformJvm } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt index 8651c11ad3b..fe84ce35dc5 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt @@ -129,7 +129,7 @@ enum class ProjectKind(override val text: String) : DisplayableSettingItem { fun List.withAllSubModules(includeSourcesets: Boolean = false): List = buildList { fun handleModule(module: Module) { +module - if (module.kind == ModuleKind.singleplatform + if (module.kind == ModuleKind.singleplatformJvm || includeSourcesets && module.kind == ModuleKind.multiplatform ) { module.subModules.forEach(::handleModule) diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt index 0480113353a..6bacf6cc043 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt @@ -87,7 +87,7 @@ class ModulesToIRsConverter( state: ModulesToIrsState ): TaskResult> = when (module.kind) { ModuleKind.multiplatform -> createMultiplatformModule(module, state) - ModuleKind.singleplatform -> createSinglePlatformModule(module, state) + ModuleKind.singleplatformJvm, ModuleKind.singleplatformJs -> createSinglePlatformModule(module, state) else -> Success(emptyList()) } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt index 4aa1e3b7ed9..d0dfcf205eb 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt @@ -4,6 +4,7 @@ import org.intellij.lang.annotations.Language import org.jetbrains.kotlin.tools.projectWizard.core.buildList import org.jetbrains.kotlin.tools.projectWizard.core.entity.* import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.AndroidSinglePlatformModuleConfigurator +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JsSingleplatformModuleConfigurator import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.MppModuleConfigurator import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.defaultTarget import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin @@ -54,7 +55,8 @@ sealed class ProjectTemplate : DisplayableSettingItem { JvmServerJsClient, MultiplatformLibrary, AndroidApplication, - NativeConsoleApplication + NativeConsoleApplication, + JsBrowserApplication ) } } @@ -206,7 +208,7 @@ object AndroidApplication : ProjectTemplate() { KotlinPlugin::modules withValue listOf( Module( "app", - ModuleKind.singleplatform, + ModuleKind.singleplatformJvm, AndroidSinglePlatformModuleConfigurator, template = null, sourcesets = SourcesetType.ALL.map { type -> @@ -241,4 +243,27 @@ object NativeConsoleApplication : ProjectTemplate() { ) ) ) +} + +object JsBrowserApplication : ProjectTemplate() { + override val title = "Kotlin/JS Frontend Application" + override val htmlDescription = title + override val suggestedProjectName = "myKotlinJsApplication" + override val projectKind = ProjectKind.Multiplatform + + override val setsPluginSettings: List> + get() = listOf( + KotlinPlugin::modules withValue listOf( + Module( + "frontend", + ModuleKind.singleplatformJs, + JsSingleplatformModuleConfigurator, + template = SimpleJsClientTemplate(), + sourcesets = SourcesetType.ALL.map { type -> + Sourceset(type, ModuleType.jvm, dependencies = emptyList()) + }, + subModules = emptyList() + ) + ) + ) } \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt index ba7e49d26ed..443444e4146 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt @@ -13,7 +13,8 @@ import org.jetbrains.kotlin.tools.projectWizard.templates.Template enum class ModuleKind { multiplatform, target, - singleplatform + singleplatformJvm, + singleplatformJs, } // TODO separate to classes @@ -150,7 +151,7 @@ fun MultiplatformModule(name: String, targets: List = emptyList()) = fun SingleplatformModule(name: String, sourcesets: List) = Module( name, - ModuleKind.singleplatform, + ModuleKind.singleplatformJvm, JvmSinglePlatformModuleConfigurator, null, sourcesets, diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt index 17e0fd01269..64f2780f6e2 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt @@ -24,7 +24,7 @@ import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.Templa import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.interceptTemplate class SimpleJsClientTemplate : Template() { - override val title: String = "Simple JS client" + override val title: String = "JS client" override val htmlDescription: String = title override val moduleTypes: Set = setOf(ModuleType.js) override val id: String = "simpleJsClient" @@ -41,9 +41,10 @@ class SimpleJsClientTemplate : Template() { ) } - override fun TaskRunningContext.getFileTemplates(module: ModuleIR): List = listOf( - FileTemplateDescriptor("$id/client.kt.vm", "client.kt".asPath()) asSrcOf SourcesetType.main - ) + override fun TaskRunningContext.getFileTemplates(module: ModuleIR): List = buildList { + +(FileTemplateDescriptor("$id/client.kt.vm", "client.kt".asPath()) asSrcOf SourcesetType.main) + +(FileTemplateDescriptor("$id/TestClient.kt.vm", "TestClient.kt".asPath()) asSrcOf SourcesetType.test) + } override fun createInterceptors(module: ModuleIR): List = buildList { +interceptTemplate(KtorServerTemplate()) {