From eb958100ac3994f9cdc7127bf41df7fd29295634 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 26 Mar 2020 10:08:55 +0300 Subject: [PATCH] Wizard: do not show validation error on parent module --- .../wizard/ui/secondStep/modulesEditor/ModulesEditorTree.kt | 4 +++- .../tools/projectWizard/core/entity/SettingValidator.kt | 4 ++++ .../kotlin/tools/projectWizard/settings/buildsystem/Module.kt | 4 ++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorTree.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorTree.kt index 64d9061a530..5952a2959a2 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorTree.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorTree.kt @@ -140,7 +140,9 @@ private class CellRenderer(private val context: Context, renderErrors: Boolean) if (renderErrors) { if (setting is Module) context.read { val validationResult = setting.validator.validate(this, setting) - setError(validationResult as? ValidationResult.ValidationError) + val error = validationResult.safeAs() + ?.takeIf { it.target === setting } + setError(error) } else { setError(null) } 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 f9b7e0dae36..e1b4cbf535d 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 @@ -78,6 +78,10 @@ sealed class ValidationResult { } } +fun SettingValidator.withTarget(target: Any) = SettingValidator { value -> + this.validate(value).withTarget(target) +} + infix fun ValidationResult.isSpecificError(error: ValidationResult.ValidationError) = this is ValidationResult.ValidationError && messages.firstOrNull() == error.messages.firstOrNull() 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 04d3a8d4042..a5cd5d08ec1 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 @@ -44,9 +44,9 @@ class Module( val kind: ModuleKind get() = configurator.moduleKind - override val validator = moduleNameValidator and + override val validator = (moduleNameValidator and moduleConfiguratorValidator and - moduleTemplateValidator and + moduleTemplateValidator).withTarget(this) and subModulesValidator var subModules = subModules