Wizard: allow creating module without unit test engine & create JPS projects without one by default
This commit is contained in:
+2
-1
@@ -96,7 +96,8 @@ module.configurator.tests.setting.framework.junit4=JUnit 4
|
||||
module.configurator.tests.setting.framework.junit5=JUnit 5
|
||||
module.configurator.tests.setting.framework.test.ng=TestNG
|
||||
module.configurator.tests.setting.framework.js=JavaScript
|
||||
module.configurator.tests.setting.framework.common=common
|
||||
module.configurator.tests.setting.framework.common=Common
|
||||
module.configurator.tests.setting.framework.none=None
|
||||
module.configurator.native.for.current.system=Your system
|
||||
|
||||
project.template.empty.singleplatform.title=Backend Application
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@ class TemplateSetting<out V : Any, out T : SettingType<V>>(
|
||||
sealed class SettingDefaultValue<out V : Any> {
|
||||
data class Value<V : Any>(val value: V) : SettingDefaultValue<V>()
|
||||
data class Dynamic<V : Any>(
|
||||
val getter: Reader.(SettingReference<V, SettingType<V>>) -> V
|
||||
val getter: Reader.(SettingReference<V, SettingType<V>>) -> V?
|
||||
) : SettingDefaultValue<V>()
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ abstract class SettingBuilder<V : Any, T : SettingType<V>>(
|
||||
var isRequired: Boolean? = null
|
||||
|
||||
fun value(value: V) = SettingDefaultValue.Value(value)
|
||||
fun dynamic(getter: Reader.(SettingReference<V, SettingType<V>>) -> V) =
|
||||
fun dynamic(getter: Reader.(SettingReference<V, SettingType<V>>) -> V?) =
|
||||
SettingDefaultValue.Dynamic(getter)
|
||||
|
||||
protected var validator =
|
||||
|
||||
+6
-1
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.correspondingStdl
|
||||
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
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModulePath
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate
|
||||
import java.nio.file.Path
|
||||
@@ -55,6 +54,12 @@ fun <T> withSettingsOf(
|
||||
): T = function(ModuleBasedConfiguratorSettingsEnvironment(configurator, module))
|
||||
|
||||
|
||||
fun <V : Any, T : SettingType<V>> Reader.settingValue(module: Module, setting: ModuleConfiguratorSetting<V, T>): V? =
|
||||
withSettingsOf(module) {
|
||||
setting.reference.notRequiredSettingValue
|
||||
}
|
||||
|
||||
|
||||
abstract class ModuleConfiguratorSettings : SettingsOwner {
|
||||
final override fun <V : Any, T : SettingType<V>> settingDelegate(
|
||||
create: (path: String) -> SettingBuilder<V, T>
|
||||
|
||||
+29
-10
@@ -6,19 +6,21 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
|
||||
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ModuleConfiguratorSetting
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ModuleConfiguratorSettingReference
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
|
||||
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.buildSystem.BuildSystemType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.buildSystemType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData
|
||||
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
|
||||
@@ -33,7 +35,16 @@ interface ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings {
|
||||
if (reference !is ModuleConfiguratorSettingReference<*, *>) return@filter true
|
||||
|
||||
val moduleType = reference.module?.configurator?.safeAs<ModuleConfiguratorWithModuleType>()?.moduleType
|
||||
kotlinTestFramework.moduleType == moduleType
|
||||
moduleType in kotlinTestFramework.moduleTypes
|
||||
}
|
||||
defaultValue = dynamic { reference ->
|
||||
if (buildSystemType == BuildSystemType.Jps) return@dynamic KotlinTestFramework.NONE
|
||||
reference
|
||||
.safeAs<ModuleConfiguratorSettingReference<*, *>>()
|
||||
?.module
|
||||
?.configurator
|
||||
?.safeAs<ModuleConfiguratorWithTests>()
|
||||
?.defaultTestFramework()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -66,32 +77,40 @@ interface ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings {
|
||||
|
||||
enum class KotlinTestFramework(
|
||||
override val text: String,
|
||||
val moduleType: ModuleType,
|
||||
val moduleTypes: List<ModuleType>,
|
||||
val dependencyNames: List<String>
|
||||
) : DisplayableSettingItem {
|
||||
NONE(
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.tests.setting.framework.none"),
|
||||
ModuleType.ALL.toList(),
|
||||
emptyList()
|
||||
),
|
||||
JUNIT4(
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.tests.setting.framework.junit4"),
|
||||
ModuleType.jvm,
|
||||
listOf(ModuleType.jvm),
|
||||
listOf("test-junit")
|
||||
),
|
||||
JUNIT5(
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.tests.setting.framework.junit5"),
|
||||
ModuleType.jvm,
|
||||
listOf(ModuleType.jvm),
|
||||
listOf("test-junit5")
|
||||
),
|
||||
TEST_NG(
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.tests.setting.framework.test.ng"),
|
||||
ModuleType.jvm,
|
||||
listOf(ModuleType.jvm),
|
||||
listOf("test-testng")
|
||||
),
|
||||
JS(
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.tests.setting.framework.js"),
|
||||
ModuleType.js,
|
||||
listOf(ModuleType.js),
|
||||
listOf("test-js")
|
||||
),
|
||||
COMMON(
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.tests.setting.framework.common"),
|
||||
ModuleType.common,
|
||||
listOf(ModuleType.common),
|
||||
listOf("test-common", "test-annotations-common")
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
val KotlinTestFramework.isPresent
|
||||
get() = this != KotlinTestFramework.NONE
|
||||
+1
-1
@@ -17,7 +17,7 @@ enum class ModuleType(val projectTypeName: String) {
|
||||
;
|
||||
|
||||
companion object {
|
||||
val ALL = setOf(jvm, js, native, common)
|
||||
val ALL = setOf(jvm, js, native, common, android)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+26
-15
@@ -7,15 +7,20 @@ import org.jetbrains.kotlin.tools.projectWizard.core.Defaults.RESOURCES_DIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.Defaults.SRC_DIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.TemplateEngineService
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.ModuleConfiguratorWithTests
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.isPresent
|
||||
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectName
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.updateBuildFiles
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.InterceptionPoint
|
||||
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.TemplateInterceptionApplicationState
|
||||
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.applyAll
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.settingValue
|
||||
import java.nio.file.Path
|
||||
|
||||
class TemplatesPlugin(context: Context) : Plugin(context) {
|
||||
val templates by property<Map<String, Template>>(
|
||||
@@ -90,8 +95,8 @@ class TemplatesPlugin(context: Context) : Plugin(context) {
|
||||
val modules = buildFile.modules.modules
|
||||
|
||||
val applicationState = modules.mapNotNull { module ->
|
||||
module.template?.createInterceptors(module)
|
||||
}.flatten()
|
||||
module.template?.createInterceptors(module)
|
||||
}.flatten()
|
||||
.applyAll(TemplateInterceptionApplicationState(buildFile, emptyMap()))
|
||||
|
||||
val templateEngine = service<TemplateEngineService>()
|
||||
@@ -118,8 +123,8 @@ class TemplatesPlugin(context: Context) : Plugin(context) {
|
||||
putAll(interceptionPointSettings.mapKeys { it.key.name })
|
||||
putAll(defaultSettings(module))
|
||||
}
|
||||
return with(template) { getFileTemplates(module) }.map { (fileTemplateDescriptor, filePath) ->
|
||||
val path = generatePathForFileTemplate(module, filePath)
|
||||
return with(template) { getFileTemplates(module) }.mapNotNull { (fileTemplateDescriptor, filePath) ->
|
||||
val path = generatePathForFileTemplate(module, filePath) ?: return@mapNotNull null
|
||||
val fileTemplate = FileTemplate(
|
||||
fileTemplateDescriptor,
|
||||
module.path / path,
|
||||
@@ -134,20 +139,26 @@ class TemplatesPlugin(context: Context) : Plugin(context) {
|
||||
"moduleName" to moduleIR.name
|
||||
)
|
||||
|
||||
private fun generatePathForFileTemplate(module: ModuleIR, filePath: FilePath) = when (module) {
|
||||
is SingleplatformModuleIR -> {
|
||||
when (filePath) {
|
||||
is SrcFilePath -> SRC_DIR / filePath.sourcesetType.toString() / KOTLIN_DIR
|
||||
is ResourcesFilePath -> SRC_DIR / filePath.sourcesetType.toString() / RESOURCES_DIR
|
||||
private fun Reader.generatePathForFileTemplate(module: ModuleIR, filePath: FilePath): Path? {
|
||||
if (filePath is SrcFilePath
|
||||
&& filePath.sourcesetType == SourcesetType.test
|
||||
&& settingValue(module.originalModule, ModuleConfiguratorWithTests.testFramework)?.isPresent != true
|
||||
) return null
|
||||
return when (module) {
|
||||
is SingleplatformModuleIR -> {
|
||||
when (filePath) {
|
||||
is SrcFilePath -> SRC_DIR / filePath.sourcesetType.toString() / KOTLIN_DIR
|
||||
is ResourcesFilePath -> SRC_DIR / filePath.sourcesetType.toString() / RESOURCES_DIR
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
is MultiplatformModuleIR -> {
|
||||
val directory = when (filePath) {
|
||||
is SrcFilePath -> KOTLIN_DIR
|
||||
is ResourcesFilePath -> RESOURCES_DIR
|
||||
is MultiplatformModuleIR -> {
|
||||
val directory = when (filePath) {
|
||||
is SrcFilePath -> KOTLIN_DIR
|
||||
is ResourcesFilePath -> RESOURCES_DIR
|
||||
}
|
||||
SRC_DIR / "${module.name}${filePath.sourcesetType.name.capitalize()}" / directory
|
||||
}
|
||||
SRC_DIR / "${module.name}${filePath.sourcesetType.name.capitalize()}" / directory
|
||||
}
|
||||
}
|
||||
}
|
||||
+5
@@ -58,6 +58,11 @@ fun <T> withSettingsOf(
|
||||
function: TemplateEnvironment.() -> T
|
||||
): T = function(IdBasedTemplateEnvironment(template, identificator))
|
||||
|
||||
fun <V : Any, T : SettingType<V>> Reader.settingValue(module: Module, setting: TemplateSetting<V, T>): V? =
|
||||
withSettingsOf(module) {
|
||||
setting.reference.notRequiredSettingValue
|
||||
}
|
||||
|
||||
|
||||
abstract class Template : SettingsOwner, EntitiesOwnerDescriptor, DisplayableSettingItem {
|
||||
final override fun <V : Any, T : SettingType<V>> settingDelegate(
|
||||
|
||||
Reference in New Issue
Block a user