summaryrefslogtreecommitdiff
path: root/platform/lang-impl/src/com/intellij/codeInspection/actions/InspectionListCellRenderer.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/lang-impl/src/com/intellij/codeInspection/actions/InspectionListCellRenderer.java')
-rw-r--r--platform/lang-impl/src/com/intellij/codeInspection/actions/InspectionListCellRenderer.java80
1 files changed, 65 insertions, 15 deletions
diff --git a/platform/lang-impl/src/com/intellij/codeInspection/actions/InspectionListCellRenderer.java b/platform/lang-impl/src/com/intellij/codeInspection/actions/InspectionListCellRenderer.java
index 8608a2d13142..c7386b2ffcb5 100644
--- a/platform/lang-impl/src/com/intellij/codeInspection/actions/InspectionListCellRenderer.java
+++ b/platform/lang-impl/src/com/intellij/codeInspection/actions/InspectionListCellRenderer.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,6 +20,10 @@ import com.intellij.ide.util.gotoByName.ChooseByNameBase;
import com.intellij.lang.Language;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.fileTypes.UnknownFileType;
+import com.intellij.openapi.util.TextRange;
+import com.intellij.openapi.util.registry.Registry;
+import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.psi.codeStyle.MinusculeMatcher;
import com.intellij.ui.JBColor;
import com.intellij.ui.SimpleColoredComponent;
import com.intellij.ui.SimpleTextAttributes;
@@ -31,6 +35,8 @@ import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
+import java.util.ArrayList;
+import java.util.List;
/**
* @author Konstantin Bulenkov
@@ -38,24 +44,31 @@ import java.awt.*;
@SuppressWarnings({"GtkPreferredJComboBoxRenderer"})
public class InspectionListCellRenderer extends DefaultListCellRenderer implements MatcherHolder {
private Matcher myMatcher;
- private final SimpleTextAttributes SELECTED;
- private final SimpleTextAttributes PLAIN;
+ private final SimpleTextAttributes mySelected;
+ private final SimpleTextAttributes myPlain;
+ private final SimpleTextAttributes myHighlighted;
public InspectionListCellRenderer() {
- SELECTED = new SimpleTextAttributes(UIUtil.getListSelectionBackground(),
- UIUtil.getListSelectionForeground(),
- JBColor.RED,
- SimpleTextAttributes.STYLE_PLAIN);
- PLAIN = new SimpleTextAttributes(UIUtil.getListBackground(),
- UIUtil.getListForeground(),
- JBColor.RED,
- SimpleTextAttributes.STYLE_PLAIN);
+ mySelected = new SimpleTextAttributes(UIUtil.getListSelectionBackground(),
+ UIUtil.getListSelectionForeground(),
+ JBColor.RED,
+ SimpleTextAttributes.STYLE_PLAIN);
+ myPlain = new SimpleTextAttributes(UIUtil.getListBackground(),
+ UIUtil.getListForeground(),
+ JBColor.RED,
+ SimpleTextAttributes.STYLE_PLAIN);
+ myHighlighted = new SimpleTextAttributes(UIUtil.getListBackground(),
+ UIUtil.getListForeground(),
+ null,
+ SimpleTextAttributes.STYLE_SEARCH_MATCH);
}
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean sel, boolean focus) {
- final JPanel panel = new JPanel(new BorderLayout());
+ final BorderLayout layout = new BorderLayout();
+ layout.setHgap(5);
+ final JPanel panel = new JPanel(layout);
panel.setOpaque(true);
final Color bg = sel ? UIUtil.getListSelectionBackground() : UIUtil.getListBackground();
@@ -63,15 +76,37 @@ public class InspectionListCellRenderer extends DefaultListCellRenderer implemen
panel.setBackground(bg);
panel.setForeground(fg);
- SimpleTextAttributes attr = sel ? SELECTED : PLAIN;
if (value instanceof InspectionToolWrapper) {
final InspectionToolWrapper toolWrapper = (InspectionToolWrapper)value;
+ final String inspectionName = " " + toolWrapper.getDisplayName();
+ final String groupName = StringUtil.join(toolWrapper.getGroupPath(), " | ");
+ final String matchingText = inspectionName + "|" + groupName;
+ List<TextRange> fragments = ((MinusculeMatcher)myMatcher).matchingFragments(matchingText);
+ List<TextRange> adjustedFragments = new ArrayList<TextRange>();
+ if (fragments != null) {
+ adjustedFragments.addAll(fragments);
+ }
+ final int splitPoint = adjustRanges(adjustedFragments, inspectionName.length() + 1);
final SimpleColoredComponent c = new SimpleColoredComponent();
- SpeedSearchUtil.appendColoredFragmentForMatcher(" " + toolWrapper.getDisplayName(), c, attr, myMatcher, bg, sel);
+ final boolean matchHighlighting = Registry.is("ide.highlight.match.in.selected.only") && !sel;
+ if (matchHighlighting) {
+ c.append(inspectionName, myPlain);
+ }
+ else {
+ final List<TextRange> ranges = adjustedFragments.subList(0, splitPoint);
+ SpeedSearchUtil.appendColoredFragments(c, inspectionName, ranges, sel ? mySelected : myPlain, myHighlighted);
+ }
panel.add(c, BorderLayout.WEST);
final SimpleColoredComponent group = new SimpleColoredComponent();
- SpeedSearchUtil.appendColoredFragmentForMatcher(toolWrapper.getGroupDisplayName() + " ", group, attr, myMatcher, bg, sel);
+ if (matchHighlighting) {
+ group.append(groupName, SimpleTextAttributes.GRAYED_ATTRIBUTES);
+ }
+ else {
+ final SimpleTextAttributes attributes = sel ? mySelected : SimpleTextAttributes.GRAYED_ATTRIBUTES;
+ final List<TextRange> ranges = adjustedFragments.subList(splitPoint, adjustedFragments.size());
+ SpeedSearchUtil.appendColoredFragments(group, groupName, ranges, attributes, myHighlighted);
+ }
final JPanel right = new JPanel(new BorderLayout());
right.setBackground(bg);
right.setForeground(fg);
@@ -91,6 +126,21 @@ public class InspectionListCellRenderer extends DefaultListCellRenderer implemen
return panel;
}
+ private static int adjustRanges(List<TextRange> ranges, int offset) {
+ int result = 0;
+ for (int i = 0; i < ranges.size(); i++) {
+ final TextRange range = ranges.get(i);
+ final int startOffset = range.getStartOffset();
+ if (startOffset < offset) {
+ result = i + 1;
+ }
+ else {
+ ranges.set(i, new TextRange(startOffset - offset, range.getEndOffset() - offset));
+ }
+ }
+ return result;
+ }
+
@NotNull
private static Icon getIcon(@NotNull InspectionToolWrapper tool) {
Icon icon = null;