From 5f8930e1094c95d256217cec57bccd89a53d92ab Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Sat, 18 Jan 2020 13:45:47 +0300 Subject: [PATCH] Wizard: add validation for project name --- .../wizard/NewProjectWizardModuleBuilder.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt index 1901c5ab4cc..8d29c0c7c9f 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/NewProjectWizardModuleBuilder.kt @@ -18,6 +18,8 @@ import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.tools.projectWizard.core.Failure import org.jetbrains.kotlin.tools.projectWizard.core.Success +import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators +import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult import org.jetbrains.kotlin.tools.projectWizard.core.isSuccess import org.jetbrains.kotlin.tools.projectWizard.core.onFailure import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase @@ -50,6 +52,8 @@ class NewProjectWizardModuleBuilder : EmptyModuleBuilder() { companion object { const val MODULE_BUILDER_ID = "kotlin.newProjectWizard.builder" private const val DEFAULT_GROUP_ID = "me.user" + private val projectNameValidator = StringValidators.shouldBeValidIdentifier("Project name", setOf('-', '_')) + private const val INVALID_PROJECT_NAME_MESSAGE = "Invalid project name" } override fun isAvailable(): Boolean = NewProjectWizardService.isEnabled @@ -106,6 +110,16 @@ class NewProjectWizardModuleBuilder : EmptyModuleBuilder() { } } + override fun validateModuleName(moduleName: String): Boolean { + when (val validationResult = projectNameValidator.validate(wizard.valuesReadingContext, moduleName)) { + ValidationResult.OK -> return true + is ValidationResult.ValidationError -> { + val message = validationResult.messages.firstOrNull() ?: INVALID_PROJECT_NAME_MESSAGE + throw ConfigurationException(message, INVALID_PROJECT_NAME_MESSAGE) + } + } + } + private fun updateProjectNameAndPomDate(settingsStep: SettingsStep) { if (wizard.artifactId != null || wizard.groupId != null) return val suggestedProjectName = with(wizard.valuesReadingContext) {