diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/ModuleSettingsComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/ModuleSettingsComponent.kt index 7233a9f60ee..3f655885171 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/ModuleSettingsComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/ModuleSettingsComponent.kt @@ -1,16 +1,17 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep import com.intellij.ui.components.JBTabbedPane -import com.intellij.ui.components.panels.VerticalLayout -import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext -import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.ModuleConfigurator +import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.configuratorSettings import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType -import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.* -import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.* -import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components.DropDownComponent +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module.Companion.ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind +import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.DynamicComponent +import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.UiConstants import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components.TextFieldComponent +import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.panel import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.SettingsList import java.awt.BorderLayout import javax.swing.BorderFactory @@ -19,7 +20,7 @@ import javax.swing.JComponent class ModuleSettingsComponent(valuesReadingContext: ValuesReadingContext) : DynamicComponent(valuesReadingContext) { private val validateModuleName = StringValidators.shouldNotBeBlank("Module name") and - StringValidators.shouldBeValidIdentifier("Module Name") + StringValidators.shouldBeValidIdentifier("Module Name", ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES) private val moduleConfiguratorSettingsList = SettingsList(emptyList(), valuesReadingContext).asSubComponent() private val templateComponent = TemplatesComponent(valuesReadingContext).asSubComponent() diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/SettingValidator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/SettingValidator.kt index ff103d4198c..37783228665 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/SettingValidator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/SettingValidator.kt @@ -31,15 +31,18 @@ object StringValidators { else ValidationResult.OK } - fun shouldBeValidIdentifier(name: String) = settingValidator { value: String -> - if (value.any { char -> !char.isLetterOrDigit() && char !in ALLOWED_SPECIAL_CHARS_FOR_IDENTIFIERS }) + fun shouldBeValidIdentifier(name: String, allowedExtraSymbols: Set) = settingValidator { value: String -> + if (value.any { char -> !char.isLetterOrDigit() && char !in allowedExtraSymbols }) { + val allowedExtraSymbolsStringified = allowedExtraSymbols + .takeIf { it.isNotEmpty() } + ?.joinToString(separator = ", ") { char -> "'$char'" } + ?.let { chars -> ", and symbols: $chars" } + .orEmpty() ValidationResult.ValidationError( - "${name.capitalize()} should consist only of letters, digits, '_', or '-'" + "${name.capitalize()} should consist only of letters, digits$allowedExtraSymbolsStringified" ) - else ValidationResult.OK + } else ValidationResult.OK } - - private val ALLOWED_SPECIAL_CHARS_FOR_IDENTIFIERS = setOf('_', '-') } fun List.fold() = fold(ValidationResult.OK, ValidationResult::and) diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/StructurePlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/StructurePlugin.kt index 3b78fd46968..0ba3e1a013a 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/StructurePlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/StructurePlugin.kt @@ -3,6 +3,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.core.Plugin import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext +import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference import org.jetbrains.kotlin.tools.projectWizard.core.pathParser import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService @@ -19,12 +20,15 @@ class StructurePlugin(context: Context) : Plugin(context) { val groupId by stringSetting("Group ID", GenerationPhase.PROJECT_GENERATION) { shouldNotBeBlank() + validate(StringValidators.shouldBeValidIdentifier("Group ID", setOf('.', '_'))) } val artifactId by stringSetting("Artifact ID", GenerationPhase.PROJECT_GENERATION) { shouldNotBeBlank() + validate(StringValidators.shouldBeValidIdentifier("Artifact ID", setOf('_'))) } val version by stringSetting("Version", GenerationPhase.PROJECT_GENERATION) { shouldNotBeBlank() + validate(StringValidators.shouldBeValidIdentifier("Version", setOf('_', '-', '.'))) defaultValue = "1.0-SNAPSHOT" } 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 e513d4cf241..ba7e49d26ed 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 @@ -31,7 +31,7 @@ class Module( override val validator: SettingValidator = settingValidator { module -> StringValidators.shouldNotBeBlank("Module name").validate(this, module.name) } and settingValidator { module -> - StringValidators.shouldBeValidIdentifier("Module name `$name`").validate(this, module.name) + StringValidators.shouldBeValidIdentifier("Module name `$name`", ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES).validate(this, module.name) } and settingValidator { module -> withSettingsOf(module) { configurator.settings.map { setting -> @@ -81,6 +81,8 @@ class Module( } companion object { + val ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES = setOf('-', '_') + val parser: Parser = mapParser { map, path -> val (name) = map.parseValue(path, "name") val identificator = GeneratedIdentificator(name)