usage view: deprecate UsageFilteringRuleEx in favor of additional method in UsageFilteringRule

This makes the additional 'isVisible' method more discoverable and simplifies code.
This commit is contained in:
nik
2017-04-19 13:11:29 +03:00
parent 3681ee542b
commit 68dc68f172
8 changed files with 24 additions and 17 deletions
@@ -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();
@@ -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<Node> edtInsertedUnderQueue, boolean filterDuplicateLines) {
@@ -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();
@@ -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();
@@ -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();
}
}
@@ -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);
@@ -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();
@@ -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();