Wizard: prettify error messages

This commit is contained in:
Ilya Kirillov
2020-02-13 13:46:23 +03:00
parent 72f92d7a3b
commit 299b0f0102
2 changed files with 11 additions and 2 deletions
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemT
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectTemplates.ProjectTemplatesPlugin
import org.jetbrains.kotlin.tools.projectWizard.wizard.service.IdeaServices
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.PomWizardStepComponent
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.asHtml
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.firstStep.FirstWizardStepComponent
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep.SecondStepWizardComponent
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
@@ -178,8 +179,7 @@ abstract class WizardStep(protected val wizard: IdeWizard, private val phase: Ge
when (val result = with(wizard.valuesReadingContext) { with(wizard) { validate(setOf(phase)) } }) {
is Success<*> -> true
is Failure -> {
val messages = result.errors.joinToString(separator = "\n") { it.message }
throw ConfigurationException(messages, "Validation Error")
throw ConfigurationException(result.asHtml(), "Validation Error")
}
}
}
@@ -12,6 +12,7 @@ import com.intellij.ui.components.JBLabel
import com.intellij.ui.components.JBTextField
import com.intellij.util.ui.UIUtil
import org.jetbrains.kotlin.idea.KotlinIcons
import org.jetbrains.kotlin.tools.projectWizard.core.Failure
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.ModuleConfigurator
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.SimpleTargetConfigurator
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.TargetConfigurator
@@ -64,6 +65,14 @@ internal fun hyperlinkLabel(
internal fun String.asHtml() = "<html><body>$this</body></html>"
fun Failure.asHtml() = when (errors.size) {
0 -> ""
1 -> errors.single().message
else -> {
val errorsList = errors.joinToString(separator = "") { "<li>${it.message}</li>" }
"<ul>$errorsList</ul>".asHtml()
}
}
val DisplayableSettingItem.htmlText
get() = (text + greyText?.let { " <i>($greyText)</i>" }.orEmpty()).asHtml()