From 68dc68f172fefaf51c162146099cd1b48b2e62f1 Mon Sep 17 00:00:00 2001 From: nik Date: Wed, 19 Apr 2017 13:10:45 +0300 Subject: [PATCH] usage view: deprecate UsageFilteringRuleEx in favor of additional method in UsageFilteringRule This makes the additional 'isVisible' method more discoverable and simplifies code. --- .../usages/impl/rules/ImportFilteringRule.java | 3 ++- .../intellij/usages/impl/UsageNodeTreeBuilder.java | 12 ++---------- .../usages/impl/rules/ReadAccessFilteringRule.java | 3 ++- .../usages/impl/rules/WriteAccessFilteringRule.java | 3 ++- .../intellij/usages/rules/UsageFilteringRule.java | 12 +++++++++++- .../intellij/usages/rules/UsageFilteringRuleEx.java | 2 +- .../groovy/findUsages/GrImportFilteringRule.java | 3 ++- .../python/findUsages/PyImportFilteringRule.java | 3 ++- 8 files changed, 24 insertions(+), 17 deletions(-) diff --git a/java/java-impl/src/com/intellij/usages/impl/rules/ImportFilteringRule.java b/java/java-impl/src/com/intellij/usages/impl/rules/ImportFilteringRule.java index 0e34696e0314..f158d64d444e 100644 --- a/java/java-impl/src/com/intellij/usages/impl/rules/ImportFilteringRule.java +++ b/java/java-impl/src/com/intellij/usages/impl/rules/ImportFilteringRule.java @@ -21,6 +21,7 @@ import com.intellij.psi.PsiImportList; import com.intellij.psi.PsiJavaFile; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.usages.Usage; +import com.intellij.usages.UsageTarget; import com.intellij.usages.rules.PsiElementUsage; import org.jetbrains.annotations.NotNull; @@ -30,7 +31,7 @@ import org.jetbrains.annotations.NotNull; */ public class ImportFilteringRule extends com.intellij.usages.rules.ImportFilteringRule { @Override - public boolean isVisible(@NotNull Usage usage) { + public boolean isVisible(@NotNull Usage usage, @NotNull UsageTarget[] targets) { final PsiElement psiElement = usage instanceof PsiElementUsage? ((PsiElementUsage)usage).getElement() : null; if (psiElement != null) { final PsiFile containingFile = psiElement.getContainingFile(); diff --git a/platform/usageView/src/com/intellij/usages/impl/UsageNodeTreeBuilder.java b/platform/usageView/src/com/intellij/usages/impl/UsageNodeTreeBuilder.java index 288def7cd4c3..c828b39bde13 100644 --- a/platform/usageView/src/com/intellij/usages/impl/UsageNodeTreeBuilder.java +++ b/platform/usageView/src/com/intellij/usages/impl/UsageNodeTreeBuilder.java @@ -21,11 +21,11 @@ import com.intellij.usages.Usage; import com.intellij.usages.UsageGroup; import com.intellij.usages.UsageTarget; import com.intellij.usages.rules.UsageFilteringRule; -import com.intellij.usages.rules.UsageFilteringRuleEx; import com.intellij.usages.rules.UsageGroupingRule; import com.intellij.util.Consumer; import org.jetbrains.annotations.NotNull; +import java.util.Arrays; import java.util.List; /** @@ -59,15 +59,7 @@ class UsageNodeTreeBuilder { } public boolean isVisible(@NotNull Usage usage) { - for (final UsageFilteringRule rule : myFilteringRules) { - boolean visible = rule instanceof UsageFilteringRuleEx ? - ((UsageFilteringRuleEx)rule).isVisible(usage, myTargets) : - rule.isVisible(usage); - if (!visible) { - return false; - } - } - return true; + return Arrays.stream(myFilteringRules).allMatch(rule -> rule.isVisible(usage, myTargets)); } UsageNode appendUsage(@NotNull Usage usage, @NotNull Consumer edtInsertedUnderQueue, boolean filterDuplicateLines) { diff --git a/platform/usageView/src/com/intellij/usages/impl/rules/ReadAccessFilteringRule.java b/platform/usageView/src/com/intellij/usages/impl/rules/ReadAccessFilteringRule.java index 0e60907c3509..b044d9990876 100644 --- a/platform/usageView/src/com/intellij/usages/impl/rules/ReadAccessFilteringRule.java +++ b/platform/usageView/src/com/intellij/usages/impl/rules/ReadAccessFilteringRule.java @@ -17,6 +17,7 @@ package com.intellij.usages.impl.rules; import com.intellij.usages.ReadWriteAccessUsage; import com.intellij.usages.Usage; +import com.intellij.usages.UsageTarget; import com.intellij.usages.rules.UsageFilteringRule; import org.jetbrains.annotations.NotNull; @@ -26,7 +27,7 @@ import org.jetbrains.annotations.NotNull; */ public class ReadAccessFilteringRule implements UsageFilteringRule{ @Override - public boolean isVisible(@NotNull Usage usage) { + public boolean isVisible(@NotNull Usage usage, @NotNull UsageTarget[] targets) { if (usage instanceof ReadWriteAccessUsage) { final ReadWriteAccessUsage readWriteAccessUsage = (ReadWriteAccessUsage)usage; final boolean isForReadingOnly = readWriteAccessUsage.isAccessedForReading() && !readWriteAccessUsage.isAccessedForWriting(); diff --git a/platform/usageView/src/com/intellij/usages/impl/rules/WriteAccessFilteringRule.java b/platform/usageView/src/com/intellij/usages/impl/rules/WriteAccessFilteringRule.java index 1d3d6344cc94..32ef3efebcb3 100644 --- a/platform/usageView/src/com/intellij/usages/impl/rules/WriteAccessFilteringRule.java +++ b/platform/usageView/src/com/intellij/usages/impl/rules/WriteAccessFilteringRule.java @@ -17,6 +17,7 @@ package com.intellij.usages.impl.rules; import com.intellij.usages.ReadWriteAccessUsage; import com.intellij.usages.Usage; +import com.intellij.usages.UsageTarget; import com.intellij.usages.rules.UsageFilteringRule; import org.jetbrains.annotations.NotNull; @@ -26,7 +27,7 @@ import org.jetbrains.annotations.NotNull; */ public class WriteAccessFilteringRule implements UsageFilteringRule{ @Override - public boolean isVisible(@NotNull Usage usage) { + public boolean isVisible(@NotNull Usage usage, @NotNull UsageTarget[] targets) { if (usage instanceof ReadWriteAccessUsage) { final ReadWriteAccessUsage readWriteAccessUsage = (ReadWriteAccessUsage)usage; final boolean isForWritingOnly = readWriteAccessUsage.isAccessedForWriting() && !readWriteAccessUsage.isAccessedForReading(); diff --git a/platform/usageView/src/com/intellij/usages/rules/UsageFilteringRule.java b/platform/usageView/src/com/intellij/usages/rules/UsageFilteringRule.java index f1d7468c23d8..fc5752e6cf11 100644 --- a/platform/usageView/src/com/intellij/usages/rules/UsageFilteringRule.java +++ b/platform/usageView/src/com/intellij/usages/rules/UsageFilteringRule.java @@ -16,10 +16,20 @@ package com.intellij.usages.rules; import com.intellij.usages.Usage; +import com.intellij.usages.UsageTarget; import org.jetbrains.annotations.NotNull; public interface UsageFilteringRule { UsageFilteringRule[] EMPTY_ARRAY = new UsageFilteringRule[0]; - boolean isVisible(@NotNull Usage usage); + default boolean isVisible(@NotNull Usage usage, @NotNull UsageTarget[] targets) { + return isVisible(usage); + } + + /** + * @deprecated implement {@link #isVisible(Usage, UsageTarget[])} instead + */ + default boolean isVisible(@NotNull Usage usage) { + throw new UnsupportedOperationException(); + } } diff --git a/platform/usageView/src/com/intellij/usages/rules/UsageFilteringRuleEx.java b/platform/usageView/src/com/intellij/usages/rules/UsageFilteringRuleEx.java index e2b7a48ef565..c45059b5516b 100644 --- a/platform/usageView/src/com/intellij/usages/rules/UsageFilteringRuleEx.java +++ b/platform/usageView/src/com/intellij/usages/rules/UsageFilteringRuleEx.java @@ -20,7 +20,7 @@ import com.intellij.usages.UsageTarget; import org.jetbrains.annotations.NotNull; /** - * @author yole + * @deprecated implement {@link UsageFilteringRule#isVisible(Usage, UsageTarget[])} instead */ public interface UsageFilteringRuleEx extends UsageFilteringRule { boolean isVisible(@NotNull Usage usage, @NotNull UsageTarget[] targets); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/GrImportFilteringRule.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/GrImportFilteringRule.java index d619b79a780f..0d4b93c22032 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/GrImportFilteringRule.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/GrImportFilteringRule.java @@ -19,6 +19,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.usages.Usage; +import com.intellij.usages.UsageTarget; import com.intellij.usages.rules.ImportFilteringRule; import com.intellij.usages.rules.PsiElementUsage; import org.jetbrains.annotations.NotNull; @@ -30,7 +31,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.imports.GrImportStatem */ public class GrImportFilteringRule extends ImportFilteringRule { @Override - public boolean isVisible(@NotNull Usage usage) { + public boolean isVisible(@NotNull Usage usage, @NotNull UsageTarget[] targets) { if (usage instanceof PsiElementUsage) { final PsiElement psiElement = ((PsiElementUsage)usage).getElement(); final PsiFile containingFile = psiElement.getContainingFile(); diff --git a/python/src/com/jetbrains/python/findUsages/PyImportFilteringRule.java b/python/src/com/jetbrains/python/findUsages/PyImportFilteringRule.java index 664d8c637850..3681e0dd957b 100644 --- a/python/src/com/jetbrains/python/findUsages/PyImportFilteringRule.java +++ b/python/src/com/jetbrains/python/findUsages/PyImportFilteringRule.java @@ -19,6 +19,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.usages.Usage; +import com.intellij.usages.UsageTarget; import com.intellij.usages.rules.ImportFilteringRule; import com.intellij.usages.rules.PsiElementUsage; import com.jetbrains.python.psi.PyFile; @@ -30,7 +31,7 @@ import org.jetbrains.annotations.NotNull; */ public class PyImportFilteringRule extends ImportFilteringRule { @Override - public boolean isVisible(@NotNull Usage usage) { + public boolean isVisible(@NotNull Usage usage, @NotNull UsageTarget[] targets) { if (usage instanceof PsiElementUsage) { final PsiElement psiElement = ((PsiElementUsage)usage).getElement(); final PsiFile containingFile = psiElement.getContainingFile();