diff --git a/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties b/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties index ca15c8c042b..d43d5b6bd9a 100644 --- a/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties +++ b/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties @@ -40,6 +40,7 @@ project.kind.singleplatform=Singleplatform project project=Project plugin.structure.setting.location=Location +plugin.structure.setting.location.error.is.not.empty=Directory is not empty plugin.structure.setting.name=Name plugin.structure.setting.group.id=Group ID plugin.structure.setting.artifact.id=Artifact ID diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/Setting.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/Setting.kt index 4a697f4858e..bea23efc993 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/Setting.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/Setting.kt @@ -23,7 +23,8 @@ interface Setting> : Entity, ActivityChecker val defaultValue: SettingDefaultValue? val isRequired: Boolean val isSavable: Boolean - var neededAtPhase: GenerationPhase + val neededAtPhase: GenerationPhase + val validateOnProjectCreation: Boolean val type: T } @@ -34,8 +35,9 @@ data class InternalSetting>( override val isAvailable: Checker, override val isRequired: Boolean, override val isSavable: Boolean, - override var neededAtPhase: GenerationPhase, + override val neededAtPhase: GenerationPhase, override val validator: SettingValidator<@UnsafeVariance V>, + override val validateOnProjectCreation: Boolean, override val type: T ) : Setting, EntityWithValue() diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingBuilder.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingBuilder.kt index b3cd3a2c14e..377bc884028 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingBuilder.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingBuilder.kt @@ -19,6 +19,8 @@ abstract class SettingBuilder>( ) { var isAvailable: Reader.() -> Boolean = { true } open var defaultValue: SettingDefaultValue? = null + + var validateOnProjectCreation = true var isSavable: Boolean = false var isRequired: Boolean? = null @@ -51,6 +53,7 @@ abstract class SettingBuilder>( isSavable = isSavable, neededAtPhase = neededAtPhase, validator = validator, + validateOnProjectCreation = validateOnProjectCreation, type = type ) } \ No newline at end of file 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 bf448b6f82e..b82255c8bb4 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 @@ -4,12 +4,14 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.core.* 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.entity.settings.reference import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.PomIR import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version +import java.nio.file.Files import java.nio.file.Paths class StructurePlugin(context: Context) : Plugin(context) { @@ -18,6 +20,15 @@ class StructurePlugin(context: Context) : Plugin(context) { GenerationPhase.FIRST_STEP ) { defaultValue = value(Paths.get(".")) + + validateOnProjectCreation = false + + validate { path -> + if (!Files.exists(path)) return@validate ValidationResult.OK + ValidationResult.create(Files.list(path).noneMatch { true }) { + KotlinNewProjectWizardBundle.message("plugin.structure.setting.location.error.is.not.empty") + } + } } val name by stringSetting( KotlinNewProjectWizardBundle.message("plugin.structure.setting.name"), diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/Wizard.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/Wizard.kt index 652aa8bf1b2..440dbb043cd 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/Wizard.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/Wizard.kt @@ -42,7 +42,7 @@ abstract class Wizard(createPlugins: PluginsCreator, servicesManager: ServicesMa fun validate(phases: Set): ValidationResult = context.read { pluginSettings.map { setting -> val value = setting.reference.notRequiredSettingValue ?: return@map ValidationResult.OK - if (setting.neededAtPhase in phases && setting.isActive(this)) + if (setting.validateOnProjectCreation && setting.neededAtPhase in phases && setting.isActive(this)) (setting.validator as SettingValidator).validate(this, value) else ValidationResult.OK }.fold()