filters: allow to create multiple grayed hyperlinks for a single line
authorSergey Simonchik <sergey.simonchik@jetbrains.com>
Thu, 15 Sep 2016 16:47:54 +0000 (19:47 +0300)
committerSergey Simonchik <sergey.simonchik@jetbrains.com>
Thu, 15 Sep 2016 16:47:54 +0000 (19:47 +0300)
platform/lang-api/src/com/intellij/execution/filters/Filter.java

index bf3bc4d9372b41abdd6a0dd142cc4825eaed2fb8..8c18ff960e4223ccfd986a8c7b6d2b3cc4b57c9a 100644 (file)
@@ -36,19 +36,8 @@ public interface Filter {
   Filter[] EMPTY_ARRAY = new Filter[0];
 
   class Result extends ResultItem {
-    private static final Map<TextAttributesKey, TextAttributes> GRAYED_BY_NORMAL_CACHE = ContainerUtil.newConcurrentMap(2);
-    static {
-      ApplicationManager.getApplication().getMessageBus().connect().subscribe(EditorColorsManager.TOPIC, new EditorColorsListener() {
-        @Override
-        public void globalSchemeChange(EditorColorsScheme scheme) {
-          // invalidate cache on Appearance Theme/Editor Scheme change
-          GRAYED_BY_NORMAL_CACHE.clear();
-        }
-      });
-    }
-
-    protected NextAction myNextAction = NextAction.EXIT;
-    protected final List<ResultItem> myResultItems;
+    private NextAction myNextAction = NextAction.EXIT;
+    private final List<ResultItem> myResultItems;
 
     public Result(final int highlightStartOffset, final int highlightEndOffset, @Nullable final HyperlinkInfo hyperlinkInfo) {
       this(highlightStartOffset, highlightEndOffset, hyperlinkInfo, null);
@@ -75,9 +64,7 @@ public interface Filter {
                   final int highlightEndOffset,
                   @Nullable final HyperlinkInfo hyperlinkInfo,
                   final boolean grayedHyperlink) {
-      super(highlightStartOffset, highlightEndOffset, hyperlinkInfo,
-            grayedHyperlink ? getGrayedHyperlinkAttributes(CodeInsightColors.HYPERLINK_ATTRIBUTES) : null,
-            grayedHyperlink ? getGrayedHyperlinkAttributes(CodeInsightColors.FOLLOWED_HYPERLINK_ATTRIBUTES) : null);
+      super(highlightStartOffset, highlightEndOffset, hyperlinkInfo, grayedHyperlink);
       myResultItems = null;
     }
 
@@ -154,22 +141,6 @@ public interface Filter {
     public void setNextAction(NextAction nextAction) {
       myNextAction = nextAction;
     }
-
-    @Nullable
-    private static TextAttributes getGrayedHyperlinkAttributes(@NotNull TextAttributesKey normalHyperlinkAttrsKey) {
-      EditorColorsScheme globalScheme = EditorColorsManager.getInstance().getGlobalScheme();
-      TextAttributes grayedHyperlinkAttrs = GRAYED_BY_NORMAL_CACHE.get(normalHyperlinkAttrsKey);
-      if (grayedHyperlinkAttrs == null) {
-        TextAttributes normalHyperlinkAttrs = globalScheme.getAttributes(normalHyperlinkAttrsKey);
-        if (normalHyperlinkAttrs != null) {
-          grayedHyperlinkAttrs = normalHyperlinkAttrs.clone();
-          grayedHyperlinkAttrs.setForegroundColor(UIUtil.getInactiveTextColor());
-          grayedHyperlinkAttrs.setEffectColor(UIUtil.getInactiveTextColor());
-          GRAYED_BY_NORMAL_CACHE.put(normalHyperlinkAttrsKey, grayedHyperlinkAttrs);
-        }
-      }
-      return grayedHyperlinkAttrs;
-    }
   }
 
   enum NextAction {
@@ -177,6 +148,17 @@ public interface Filter {
   }
 
   class ResultItem {
+    private static final Map<TextAttributesKey, TextAttributes> GRAYED_BY_NORMAL_CACHE = ContainerUtil.newConcurrentMap(2);
+    static {
+      ApplicationManager.getApplication().getMessageBus().connect().subscribe(EditorColorsManager.TOPIC, new EditorColorsListener() {
+        @Override
+        public void globalSchemeChange(EditorColorsScheme scheme) {
+          // invalidate cache on Appearance Theme/Editor Scheme change
+          GRAYED_BY_NORMAL_CACHE.clear();
+        }
+      });
+    }
+
     /**
      * @deprecated use getter, the visibility of this field will be decreased.
      */
@@ -213,6 +195,15 @@ public interface Filter {
       this(highlightStartOffset, highlightEndOffset, hyperlinkInfo, highlightAttributes, null);
     }
 
+    public ResultItem(int highlightStartOffset,
+                      int highlightEndOffset,
+                      @Nullable HyperlinkInfo hyperlinkInfo,
+                      boolean grayedHyperlink) {
+      this(highlightStartOffset, highlightEndOffset, hyperlinkInfo,
+           grayedHyperlink ? getGrayedHyperlinkAttributes(CodeInsightColors.HYPERLINK_ATTRIBUTES) : null,
+           grayedHyperlink ? getGrayedHyperlinkAttributes(CodeInsightColors.FOLLOWED_HYPERLINK_ATTRIBUTES) : null);
+    }
+
     @SuppressWarnings("deprecation")
     public ResultItem(final int highlightStartOffset,
                       final int highlightEndOffset,
@@ -252,6 +243,22 @@ public interface Filter {
       //noinspection deprecation
       return hyperlinkInfo;
     }
+
+    @Nullable
+    private static TextAttributes getGrayedHyperlinkAttributes(@NotNull TextAttributesKey normalHyperlinkAttrsKey) {
+      EditorColorsScheme globalScheme = EditorColorsManager.getInstance().getGlobalScheme();
+      TextAttributes grayedHyperlinkAttrs = GRAYED_BY_NORMAL_CACHE.get(normalHyperlinkAttrsKey);
+      if (grayedHyperlinkAttrs == null) {
+        TextAttributes normalHyperlinkAttrs = globalScheme.getAttributes(normalHyperlinkAttrsKey);
+        if (normalHyperlinkAttrs != null) {
+          grayedHyperlinkAttrs = normalHyperlinkAttrs.clone();
+          grayedHyperlinkAttrs.setForegroundColor(UIUtil.getInactiveTextColor());
+          grayedHyperlinkAttrs.setEffectColor(UIUtil.getInactiveTextColor());
+          GRAYED_BY_NORMAL_CACHE.put(normalHyperlinkAttrsKey, grayedHyperlinkAttrs);
+        }
+      }
+      return grayedHyperlinkAttrs;
+    }
   }
 
   /**