Wizard: add validation for project name

This commit is contained in:
Ilya Kirillov
2020-01-18 13:45:47 +03:00
parent 09b50a209b
commit 5f8930e109
@@ -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) {