From e403426717c57d23e04669c1a4a1b472053172fc Mon Sep 17 00:00:00 2001 From: Yaroslav Lepenkin Date: Thu, 16 Feb 2017 12:20:55 +0300 Subject: [PATCH] [parameter hints] highlight pattern errors in blacklist editor --- .../ParameterNameHintsConfigurable.java | 44 ++++++++++++++++--- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hints/settings/ParameterNameHintsConfigurable.java b/platform/lang-impl/src/com/intellij/codeInsight/hints/settings/ParameterNameHintsConfigurable.java index 03ceef0895be..969a3b8f293a 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hints/settings/ParameterNameHintsConfigurable.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/hints/settings/ParameterNameHintsConfigurable.java @@ -21,10 +21,14 @@ import com.intellij.codeInsight.hints.Option; import com.intellij.codeInsight.hints.filtering.MatcherConstructor; import com.intellij.lang.Language; import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.editor.SelectionModel; import com.intellij.openapi.editor.event.DocumentAdapter; import com.intellij.openapi.editor.event.DocumentEvent; +import com.intellij.openapi.editor.markup.HighlighterLayer; +import com.intellij.openapi.editor.markup.MarkupModel; +import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.fileTypes.FileTypes; import com.intellij.openapi.ui.ComboBox; import com.intellij.openapi.ui.DialogWrapper; @@ -34,6 +38,7 @@ import com.intellij.ui.IdeBorderFactory; import com.intellij.ui.ListCellRendererWrapper; import com.intellij.ui.components.JBCheckBox; import com.intellij.util.containers.ContainerUtil; +import one.util.streamex.StreamEx; import org.jdesktop.swingx.combobox.ListComboBoxModel; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -45,6 +50,10 @@ import java.awt.event.ItemListener; import java.util.*; import java.util.List; import java.util.stream.Collectors; +import java.util.stream.IntStream; +import java.util.stream.Stream; + +import static com.intellij.openapi.editor.colors.CodeInsightColors.ERRORS_ATTRIBUTES; public class ParameterNameHintsConfigurable extends DialogWrapper { @@ -99,13 +108,34 @@ public class ParameterNameHintsConfigurable extends DialogWrapper { private void updateOkEnabled() { String text = myEditorTextField.getText(); List rules = StringUtil.split(text, "\n"); - boolean hasAnyInvalid = rules - .stream() - .filter((e) -> !e.trim().isEmpty()) - .map((s) -> MatcherConstructor.INSTANCE.createMatcher(s)) - .anyMatch((e) -> e == null); - - getOKAction().setEnabled(!hasAnyInvalid); + + + Stream intStream = IntStream.iterate(0, i -> i + 1).boxed(); + List invalidLines = StreamEx.of(rules) + .map((rule) -> MatcherConstructor.INSTANCE.createMatcher(rule)) + .zipWith(intStream) + .filter((entry) -> entry.getKey() == null) + .map((entry -> entry.getValue())) + .toList(); + + + getOKAction().setEnabled(invalidLines.isEmpty()); + highlightErrorLines(invalidLines); + } + + private void highlightErrorLines(@NotNull List lines) { + Editor editor = myEditorTextField.getEditor(); + if (editor == null) return; + + final TextAttributes attributes = editor.getColorsScheme().getAttributes(ERRORS_ATTRIBUTES); + final Document document = editor.getDocument(); + final int totalLines = document.getLineCount(); + + MarkupModel model = editor.getMarkupModel(); + model.removeAllHighlighters(); + lines.stream() + .filter((current) -> current < totalLines) + .forEach((line) -> model.addLineHighlighter(line, HighlighterLayer.ERROR, attributes)); } @Override