[parameter hints] highlight pattern errors in blacklist editor

This commit is contained in:
Yaroslav Lepenkin
2017-02-16 12:27:08 +03:00
parent 612bbf2315
commit e403426717
@@ -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<String> 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<Integer> intStream = IntStream.iterate(0, i -> i + 1).boxed();
List<Integer> 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<Integer> 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