mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[parameter hints] highlight pattern errors in blacklist editor
This commit is contained in:
+37
-7
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user