diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/FirstWizardStepComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/FirstWizardStepComponent.kt index 1c34b09f1b9..712287cef28 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/FirstWizardStepComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/FirstWizardStepComponent.kt @@ -1,10 +1,13 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.firstStep +import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingReference import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.projectTemplates.ProjectTemplatesPlugin import org.jetbrains.kotlin.tools.projectWizard.projectTemplates.ProjectTemplate +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeWizard import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.* import java.awt.BorderLayout @@ -54,6 +57,23 @@ class TemplatesSubStep(valuesReadingContext: ValuesReadingContext) : // TODO do not use settingContext directly context.settingContext[setting] = value } + allModules().forEach { module -> + module.initDefaultValuesForSettings(valuesReadingContext.context) + } + } + + private fun allModules(): List { + val modules = mutableListOf() + + fun addModule(module: Module) { + modules += module + module.subModules.forEach(::addModule) + } + + valuesReadingContext.context.settingContext[KotlinPlugin::modules.reference] + ?.forEach(::addModule) + + return modules } override fun onValueUpdated(reference: SettingReference<*, *>?) { 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 d22ca1c775e..c21f591f949 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 @@ -31,12 +31,12 @@ class ModulesEditorComponent( allowAndroid = isMppProject, allowIos = isMppProject, allModules = value ?: emptyList(), - createModule = { model.add(it) } + createModule = model::add )?.showInCenterOf(component) } ) - private val model = TargetsModel(tree, ::value) + private val model = TargetsModel(tree, ::value, valuesReadingContext.context) override fun onInit() { super.onInit() 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 ac9962729d9..5c52bab23df 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 @@ -1,5 +1,6 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep.modulesEditor +import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind import org.jetbrains.kotlin.utils.addToStdlib.safeAs @@ -9,7 +10,8 @@ import kotlin.reflect.KMutableProperty0 class TargetsModel( private val tree: ModulesEditorTree, - private val value: KMutableProperty0?> + private val value: KMutableProperty0?>, + private val context: Context ) { private val root get() = tree.model.root as DefaultMutableTreeNode @@ -57,6 +59,7 @@ class TargetsModel( } fun add(module: Module) { + module.initDefaultValuesForSettings(context) addToTheTree(module, modifyValue = true, parent = tree.selectedNode ?: root) } diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/DefaultSettingComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/DefaultSettingComponent.kt index 83fe30c47a9..0588ff2fa77 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/DefaultSettingComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/setting/DefaultSettingComponent.kt @@ -100,7 +100,9 @@ class DropdownSettingComponent( valuesReadingContext = valuesReadingContext, initialValues = setting.type.values, validator = setting.validator, - filter = { value -> setting.type.filter(valuesReadingContext, reference, value) }, + filter = { value -> + setting.type.filter(valuesReadingContext, reference, value) + }, labelText = setting.title, onValueUpdate = { newValue -> value = newValue } ).asSubComponent() diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/SettingsOwner.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/SettingsOwner.kt index 877aa8e74df..38b2997d128 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/SettingsOwner.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/SettingsOwner.kt @@ -2,6 +2,7 @@ package org.jetbrains.kotlin.tools.projectWizard import org.jetbrains.kotlin.tools.projectWizard.core.EntitiesOwnerDescriptor import org.jetbrains.kotlin.tools.projectWizard.core.Parser +import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext import org.jetbrains.kotlin.tools.projectWizard.core.entity.* import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Setting.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Setting.kt index 36348399121..1feeffcf295 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Setting.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Setting.kt @@ -41,13 +41,10 @@ data class PluginSettingReference>( settingContext.getPluginSetting(this@PluginSettingReference) } -data class ModuleConfiguratorSettingReference>( - val descriptor: ModuleConfigurator, - val moduleId: Identificator, - val setting: ModuleConfiguratorSetting -) : SettingReference() { - constructor(descriptor: ModuleConfigurator, module: Module, setting: ModuleConfiguratorSetting) : - this(descriptor, module.identificator, setting) +sealed class ModuleConfiguratorSettingReference> : SettingReference() { + abstract val descriptor: ModuleConfigurator + abstract val moduleId: Identificator + abstract val setting: ModuleConfiguratorSetting override val path: String get() = "${descriptor.id}/$moduleId/${setting.path}" @@ -56,6 +53,24 @@ data class ModuleConfiguratorSettingReference>( get() = setting.type::class override fun Context.getSetting(): Setting = setting + abstract val module: Module? +} + +data class ModuleBasedConfiguratorSettingReference>( + override val descriptor: ModuleConfigurator, + override val module: Module, + override val setting: ModuleConfiguratorSetting +) : ModuleConfiguratorSettingReference() { + override val moduleId: Identificator + get() = module.identificator +} + +data class IdBasedConfiguratorSettingReference>( + override val descriptor: ModuleConfigurator, + override val moduleId: Identificator, + override val setting: ModuleConfiguratorSetting +) : ModuleConfiguratorSettingReference() { + override val module: Module? = null } sealed class TemplateSettingReference> : SettingReference() { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt index 7aa874ecc7e..543f6922dd0 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt @@ -19,22 +19,37 @@ import java.nio.file.Path import kotlin.properties.ReadOnlyProperty -class ModuleSettingsEnvironment(private val configurator: ModuleConfigurator, private val moduleId: Identificator) { - val > ModuleConfiguratorSetting.reference - get() = ModuleConfiguratorSettingReference(configurator, moduleId, this) +sealed class ModuleCondifuratorSettingsEnvironment { + abstract val > ModuleConfiguratorSetting.reference: ModuleConfiguratorSettingReference +} + +class ModuleBasedConfiguratorSettingsEnvironment( + private val configurator: ModuleConfigurator, + private val module: Module +) : ModuleCondifuratorSettingsEnvironment() { + override val > ModuleConfiguratorSetting.reference: ModuleConfiguratorSettingReference + get() = ModuleBasedConfiguratorSettingReference(configurator, module, this) +} + +class IdBasedConfiguratorSettingsEnvironment( + private val configurator: ModuleConfigurator, + private val moduleId: Identificator +) : ModuleCondifuratorSettingsEnvironment() { + override val > ModuleConfiguratorSetting.reference: ModuleConfiguratorSettingReference + get() = IdBasedConfiguratorSettingReference(configurator, moduleId, this) } fun withSettingsOf( moduleId: Identificator, configurator: ModuleConfigurator, - function: ModuleSettingsEnvironment.() -> T -): T = function(ModuleSettingsEnvironment(configurator, moduleId)) + function: ModuleCondifuratorSettingsEnvironment.() -> T +): T = function(IdBasedConfiguratorSettingsEnvironment(configurator, moduleId)) fun withSettingsOf( module: Module, configurator: ModuleConfigurator = module.configurator, - function: ModuleSettingsEnvironment.() -> T -): T = function(ModuleSettingsEnvironment(configurator, module.identificator)) + function: ModuleCondifuratorSettingsEnvironment.() -> T +): T = function(ModuleBasedConfiguratorSettingsEnvironment(configurator, module)) abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwner { @@ -144,6 +159,16 @@ abstract class ModuleConfiguratorWithSettings : ModuleConfigurator, SettingsOwne values = enumValues().asList() init() } + + + fun initDefaultValuesFor(module: Module, context: Context) { + withSettingsOf(module) { + settings.forEach { setting -> + val defaultValue = setting.defaultValue ?: return@forEach + context.settingContext[setting.reference] = defaultValue + } + } + } } val ModuleConfigurator.settings @@ -154,7 +179,7 @@ val ModuleConfigurator.settings val Module.configuratorSettings get() = configurator.settings.map { setting -> - ModuleConfiguratorSettingReference(configurator, this, setting) + ModuleBasedConfiguratorSettingReference(configurator, this, setting) } interface ModuleConfigurator : DisplayableSettingItem, EntitiesOwnerDescriptor { @@ -169,7 +194,7 @@ interface ModuleConfigurator : DisplayableSettingItem, EntitiesOwnerDescriptor { fun createBuildFileIRs(configurationData: ModuleConfigurationData, module: Module): List = emptyList() - fun createModuleIRs(configurationData: ModuleConfigurationData, module: Module): List = + fun ValuesReadingContext.createModuleIRs(configurationData: ModuleConfigurationData, module: Module): List = emptyList() fun createStdlibType(configurationData: ModuleConfigurationData, module: Module): StdlibType? = diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt new file mode 100644 index 00000000000..cb5c5692be3 --- /dev/null +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt @@ -0,0 +1,67 @@ +/* + * 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.ValuesReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.entity.ModuleConfiguratorSetting +import org.jetbrains.kotlin.tools.projectWizard.core.entity.ModuleConfiguratorSettingReference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.TemplateSettingReference +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.DependencyType +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinArbitraryDependencyIR +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.ModuleConfigurationData +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType +import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind + +abstract class ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings() { + val framework by enumSetting( + "Test Framework", + neededAtPhase = GenerationPhase.PROJECT_GENERATION + ) { + defaultValue = defaultTestFramework() + + filter = filter@{ reference, kotlinTestFramework -> + if (reference !is ModuleConfiguratorSettingReference<*, *>) return@filter true + + val moduleType = reference.module?.configurator?.moduleType + kotlinTestFramework.moduleType == moduleType + } + } + + abstract fun defaultTestFramework(): KotlinTestFramework + + override fun ValuesReadingContext.createModuleIRs(configurationData: ModuleConfigurationData, module: Module): List = + withSettingsOf(module) { + framework.reference.settingValue.dependencyNames.map { dependencyName -> + KotlinArbitraryDependencyIR( + dependencyName, + isInMppModule = module.kind + .let { it == ModuleKind.multiplatform || it == ModuleKind.target }, + version = KotlinPlugin::version.settingValue, + dependencyType = DependencyType.TEST + ) + } + } + + override val settings: List> = listOf(framework) +} + + +enum class KotlinTestFramework( + override val text: String, + val moduleType: ModuleType, + val dependencyNames: List +) : DisplayableSettingItem { + JUNIT4("JUnit 4 Test Framework", ModuleType.jvm, listOf("test-junit")), + JUNIT5("JUnit 5 Test Framework", ModuleType.jvm, listOf("test-junit5")), + TEST_NG("Test NG Test Framework", ModuleType.jvm, listOf("test-testng")), + JS("JavaScript Test Framework", ModuleType.js, listOf("test-js")), + COMMON("Common Test Framework", ModuleType.common, listOf("test-common", "test-annotations-common")), +} \ 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 6d399fd6f0d..8d09f8a486e 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 @@ -20,6 +20,8 @@ interface TargetConfigurator : ModuleConfigurator { fun createInnerTargetIrs(module: Module): List = emptyList() } +abstract class TargetConfiguratorWithTests : ModuleConfiguratorWithTests(), TargetConfigurator + interface SingleCoexistenceTargetConfigurator : TargetConfigurator { override fun canCoexistsWith(other: List): Boolean = other.none { it == this } @@ -49,11 +51,13 @@ private fun Module.createTargetAccessIr(moduleSubType: ModuleSubType) = ) -interface JsTargetConfigurator : TargetConfigurator, SingleCoexistenceTargetConfigurator { +abstract class JsTargetConfigurator : TargetConfiguratorWithTests(), SingleCoexistenceTargetConfigurator { override val moduleType: ModuleType get() = ModuleType.js + + override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JS } -object JsBrowserTargetConfigurator : JsTargetConfigurator { +object JsBrowserTargetConfigurator : JsTargetConfigurator() { override val id = "jsBrowser" override val text = "Browser" override val suggestedModuleName = "browser" @@ -70,11 +74,12 @@ object JsBrowserTargetConfigurator : JsTargetConfigurator { } } -object JsNodeTargetConfigurator : JsTargetConfigurator { +object JsNodeTargetConfigurator : JsTargetConfigurator() { override val id = "jsNode" override val text = "Node.js" override val suggestedModuleName = "nodeJs" + override fun createTargetIrs(module: Module): List = buildList { +DefaultTargetConfigurationIR( module.createTargetAccessIr(ModuleSubType.js), @@ -87,15 +92,20 @@ object JsNodeTargetConfigurator : JsTargetConfigurator { } } -object CommonTargetConfigurator : SimpleTargetConfigurator, SingleCoexistenceTargetConfigurator { +object CommonTargetConfigurator : TargetConfiguratorWithTests(), SimpleTargetConfigurator, SingleCoexistenceTargetConfigurator { override val moduleSubType = ModuleSubType.common + + override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.COMMON } -object JvmTargetConfigurator : TargetConfigurator, +object JvmTargetConfigurator : TargetConfiguratorWithTests(), + TargetConfigurator, SimpleTargetConfigurator, JvmModuleConfigurator, SingleCoexistenceTargetConfigurator { override val moduleSubType = ModuleSubType.jvm + + override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JUNIT4 } object AndroidTargetConfigurator : TargetConfigurator, 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 336fdef7f3b..d4b0178b170 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 @@ -31,12 +31,15 @@ interface SinglePlatformModuleConfigurator : ModuleConfigurator { } -object JvmSinglePlatformModuleConfigurator : SinglePlatformModuleConfigurator, +object JvmSinglePlatformModuleConfigurator : ModuleConfiguratorWithTests(), + SinglePlatformModuleConfigurator, JvmModuleConfigurator { - override val moduleType = ModuleType.jvm + override val moduleType get() = ModuleType.jvm override val suggestedModuleName = "jvm" override val id = "JVM Module" + override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JUNIT4 + override val canContainSubModules = true override fun createKotlinPluginIR(configurationData: ModuleConfigurationData, module: Module): KotlinBuildSystemPluginIR? = @@ -49,7 +52,7 @@ object JvmSinglePlatformModuleConfigurator : SinglePlatformModuleConfigurator, object IOSSinglePlatformModuleConfigurator : SinglePlatformModuleConfigurator { - override val moduleType = ModuleType.jvm //todo + override val moduleType get() = ModuleType.jvm //todo override val id = "IOS Module" override val suggestedModuleName = "ios" override val greyText = "Requires Apple Xcode" diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/Plugins.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/Plugins.kt index 9c88de7e9b1..3b8793775ff 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/Plugins.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/Plugins.kt @@ -24,7 +24,6 @@ object Plugins { ProjectTemplatesPlugin(context), // templates - KotlinTestTemplatePlugin(context), ConsoleJvmApplicationTemplatePlugin(context), KtorTemplatesPlugin(context), JsTemplatesPlugin(context), 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 29c8fdef6b8..39e7aa40c53 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 @@ -77,17 +77,19 @@ class KotlinPlugin(context: Context) : Plugin(context) { private fun TaskRunningContext.createBuildFiles(modules: List): TaskResult> = - ModulesToIRsConverter( - ModuleConfigurationData( - modules, - projectPath, - StructurePlugin::name.settingValue, - KotlinPlugin::version.settingValue, - buildSystemType, - pomIR(), - this + with( + ModulesToIRsConverter( + ModuleConfigurationData( + modules, + projectPath, + StructurePlugin::name.settingValue, + KotlinPlugin::version.settingValue, + buildSystemType, + pomIR(), + this + ) ) - ).createBuildFiles() + ) { createBuildFiles() } companion object { 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 cbec352e8f3..0480113353a 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 @@ -57,7 +57,7 @@ class ModulesToIRsConverter( else -> rootPath / module.name } - fun createBuildFiles(): TaskResult> = with(data) { + fun ValuesReadingContext.createBuildFiles(): TaskResult> = with(data) { val needExplicitRootBuildFile = !needFlattening val parentModuleHasTransitivelySpecifiedKotlinVersion = allModules.any { modules -> modules.configurator == AndroidSinglePlatformModuleConfigurator @@ -82,7 +82,7 @@ class ModulesToIRsConverter( } - private fun createBuildFileForModule( + private fun ValuesReadingContext.createBuildFileForModule( module: Module, state: ModulesToIrsState ): TaskResult> = when (module.kind) { @@ -91,7 +91,7 @@ class ModulesToIRsConverter( else -> Success(emptyList()) } - private fun createSinglePlatformModule( + private fun ValuesReadingContext.createSinglePlatformModule( module: Module, state: ModulesToIrsState ): TaskResult> = with(data) { @@ -102,7 +102,7 @@ class ModulesToIRsConverter( +module.sourcesets.flatMap { sourceset -> sourceset.dependencies.map { it.toIR(sourceset.sourcesetType.toDependencyType()) } } - +configurator.createModuleIRs(data, module) + with(configurator) { +createModuleIRs(data, module) } addIfNotNull( configurator.createStdlibType(data, module)?.let { stdlibType -> KotlinStdlibDependencyIR( diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/KotlinTestTemplatePlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/KotlinTestTemplatePlugin.kt deleted file mode 100644 index 6ab40d3b1ff..00000000000 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/KotlinTestTemplatePlugin.kt +++ /dev/null @@ -1,8 +0,0 @@ -package org.jetbrains.kotlin.tools.projectWizard.plugins.templates - -import org.jetbrains.kotlin.tools.projectWizard.core.* -import org.jetbrains.kotlin.tools.projectWizard.templates.* - -class KotlinTestTemplatePlugin(context: Context) : TemplatePlugin(context) { - val addTemplate by addTemplateTask(KotlinTestTemplate()) -} \ No newline at end of file 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 60114ecd323..4aa1e3b7ed9 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 @@ -157,24 +157,9 @@ object MultiplatformLibrary : ProjectTemplate() { MultiplatformModule( "library", listOf( - ModuleType.common.createDefaultTarget().apply { - // testSourceset?.withTemplate(KotlinTestTemplate()) { -// template.framework withValue KotlinTestFramework.COMMON -// template.generateDummyTest withValue false -// } - }, - ModuleType.jvm.createDefaultTarget().apply { - // testSourceset?.withTemplate(KotlinTestTemplate()) { -// template.framework withValue KotlinTestFramework.JUNIT4 -// template.generateDummyTest withValue false -// } - }, - ModuleType.js.createDefaultTarget().apply { - // testSourceset?.withTemplate(KotlinTestTemplate()) { -// template.framework withValue KotlinTestFramework.JS -// template.generateDummyTest withValue false -// } - }, + ModuleType.common.createDefaultTarget(), + ModuleType.jvm.createDefaultTarget(), + ModuleType.js.createDefaultTarget(), ModuleType.native.createDefaultTarget() ) ) 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 19ef0bf4c81..e513d4cf241 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 @@ -75,6 +75,11 @@ class Module( else -> "Module" } + fun initDefaultValuesForSettings(context: Context) { + configurator.safeAs()?.initDefaultValuesFor(this, context) + template?.initDefaultValuesFor(this, context) + } + companion object { val parser: Parser = mapParser { map, path -> val (name) = map.parseValue(path, "name") diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/KotlinTestTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/KotlinTestTemplate.kt deleted file mode 100644 index db4d449c2d9..00000000000 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/KotlinTestTemplate.kt +++ /dev/null @@ -1,81 +0,0 @@ -package org.jetbrains.kotlin.tools.projectWizard.templates - -import org.intellij.lang.annotations.Language -import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem -import org.jetbrains.kotlin.tools.projectWizard.core.* -import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext -import org.jetbrains.kotlin.tools.projectWizard.core.entity.TemplateSetting -import org.jetbrains.kotlin.tools.projectWizard.core.entity.TemplateSettingReference -import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* -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.ModuleType -import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind -import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType - -class KotlinTestTemplate : Template() { - override val id: String = "kotlinTest" - override val title: String = "Kotlin Test framework" - @Language("HTML") - override val htmlDescription = """A unit test module using Kotlin Test Framework
- | For JVM JUnit4/5 and TestNG can be used
- | For Kotlin/JS Jasmine, Mocha, and Jest may be used

- | More information can be found here - """.trimMargin() - override val moduleTypes = setOf(ModuleType.common, ModuleType.js, ModuleType.jvm) - - override fun TaskRunningContext.getRequiredLibraries(module: ModuleIR): List = - withSettingsOf(module.originalModule) { - framework.reference.settingValue.dependencyNames.map { dependencyName -> - KotlinArbitraryDependencyIR( - dependencyName, - isInMppModule = module.originalModule.kind - .let { it == ModuleKind.multiplatform || it == ModuleKind.target }, - version = KotlinPlugin::version.settingValue, - dependencyType = DependencyType.MAIN - ) - } - } - - override fun TaskRunningContext.getFileTemplates(module: ModuleIR): List = - withSettingsOf(module.originalModule) { - buildList { - if (generateDummyTest.reference.settingValue) { - +(FileTemplateDescriptor("kotlinTestFramework/dummyTest.kt.vm", "Test.kt".asPath()) asSrcOf SourcesetType.main) - } - } - } - - val framework by enumSetting( - "Test Framework", - neededAtPhase = GenerationPhase.PROJECT_GENERATION - ) { - filter = filter@{ reference, kotlinTestFramework -> - if (reference !is TemplateSettingReference) return@filter true - - val moduleType = reference.module?.configurator?.moduleType - kotlinTestFramework.moduleType == moduleType - } - } - - val generateDummyTest by booleanSetting( - "Generate Simple test case", - neededAtPhase = GenerationPhase.PROJECT_GENERATION - ) { - defaultValue = false - } - override val settings: List> = - listOf(framework, generateDummyTest) -} - -enum class KotlinTestFramework( - override val text: String, - val moduleType: ModuleType, - val dependencyNames: List -) : DisplayableSettingItem { - JUNIT4("JUnit 4 Test Framework", ModuleType.jvm, listOf("test-junit")), - JUNIT5("JUnit 5 Test Framework", ModuleType.jvm, listOf("test-junit5")), - TEST_NG("Test NG Test Framework", ModuleType.jvm, listOf("test-testng")), - JS("JavaScript Test Framework", ModuleType.js, listOf("test-js")), - COMMON("Common Test Framework", ModuleType.common, listOf("test-common", "test-annotations-common")), -} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/Template.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/Template.kt index 87d90c1da2c..a8b94ba1741 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/Template.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/Template.kt @@ -66,6 +66,15 @@ abstract class Template : SettingsOwner { open val settings: List> = emptyList() open val interceptionPoints: List> = emptyList() + fun initDefaultValuesFor(module: Module, context: Context) { + withSettingsOf(module) { + settings.forEach { setting -> + val defaultValue = setting.defaultValue ?: return@forEach + context.settingContext[setting.reference] = defaultValue + } + } + } + open fun TaskRunningContext.getRequiredLibraries(module: ModuleIR): List = emptyList() //TODO: use setting reading context