From 480212e3061697f639c4fa4d7b30a2feb48a7365 Mon Sep 17 00:00:00 2001 From: Sergey Simonchik Date: Thu, 15 Sep 2016 19:47:54 +0300 Subject: [PATCH] filters: allow to create multiple grayed hyperlinks for a single line --- .../intellij/execution/filters/Filter.java | 71 ++++++++++--------- 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/platform/lang-api/src/com/intellij/execution/filters/Filter.java b/platform/lang-api/src/com/intellij/execution/filters/Filter.java index bf3bc4d9372b..8c18ff960e42 100644 --- a/platform/lang-api/src/com/intellij/execution/filters/Filter.java +++ b/platform/lang-api/src/com/intellij/execution/filters/Filter.java @@ -36,19 +36,8 @@ public interface Filter { Filter[] EMPTY_ARRAY = new Filter[0]; class Result extends ResultItem { - private static final Map 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 myResultItems; + private NextAction myNextAction = NextAction.EXIT; + private final List 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 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; + } } /**