diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionResultsView.java b/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionResultsView.java index bf950aed295d..089dfe821ace 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionResultsView.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionResultsView.java @@ -163,6 +163,11 @@ public class InspectionResultsView extends JPanel implements Disposable, Occuren }); add(mySplitter, BorderLayout.CENTER); myExclusionHandler = new ExclusionHandler() { + @Override + public boolean isNodeExclusionAvailable(@NotNull InspectionTreeNode node) { + return true; + } + @Override public boolean isNodeExcluded(@NotNull InspectionTreeNode node) { return node.isExcluded(myExcludedInspectionTreeNodesManager); diff --git a/platform/platform-api/src/com/intellij/ide/actions/exclusion/ExclusionHandler.java b/platform/platform-api/src/com/intellij/ide/actions/exclusion/ExclusionHandler.java index d208e93daef0..102a1e492e2f 100644 --- a/platform/platform-api/src/com/intellij/ide/actions/exclusion/ExclusionHandler.java +++ b/platform/platform-api/src/com/intellij/ide/actions/exclusion/ExclusionHandler.java @@ -26,6 +26,8 @@ import javax.swing.tree.MutableTreeNode; public interface ExclusionHandler { DataKey EXCLUSION_HANDLER = DataKey.create("tree.exclusion.handler"); + boolean isNodeExclusionAvailable(@NotNull T node); + boolean isNodeExcluded(@NotNull T node); void excludeNode(@NotNull T node); diff --git a/platform/platform-api/src/com/intellij/ide/actions/exclusion/TreeNodeExclusionAction.java b/platform/platform-api/src/com/intellij/ide/actions/exclusion/TreeNodeExclusionAction.java index a5f2443f710d..62986773d869 100644 --- a/platform/platform-api/src/com/intellij/ide/actions/exclusion/TreeNodeExclusionAction.java +++ b/platform/platform-api/src/com/intellij/ide/actions/exclusion/TreeNodeExclusionAction.java @@ -63,6 +63,7 @@ abstract class TreeNodeExclusionAction extends AnActi for (TreePath path : selection) { final T node = (T)path.getLastPathComponent(); TreeUtil.traverse(node, n -> { + if (!exclusionProcessor.isNodeExclusionAvailable((T)n)) return true; final Boolean isNodeExcluded = exclusionProcessor.isNodeExcluded((T)n); if (myIsExclude != isNodeExcluded) { isEnabled[0] = true; diff --git a/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java b/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java index 0c279e77df35..fd580538a454 100644 --- a/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java +++ b/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java @@ -106,7 +106,7 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra private final ExporterToTextFile myTextFileExporter = new ExporterToTextFile(this); private final Alarm myUpdateAlarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD); - private final ExclusionHandler myExclusionHandler; + private final ExclusionHandler myExclusionHandler; private final UsageModelTracker myModelTracker; private final Map myUsageNodes = new ConcurrentHashMap(); public static final UsageNode NULL_NODE = new UsageNode(NullUsage.INSTANCE, new UsageViewTreeModelBuilder(new UsageViewPresentation(), UsageTarget.EMPTY_ARRAY)); @@ -253,21 +253,26 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra runnable.run(); return true; }, o -> isDisposed || project.isDisposed(), 200); - myExclusionHandler = new ExclusionHandler() { + myExclusionHandler = new ExclusionHandler() { @Override - public boolean isNodeExcluded(@NotNull Node node) { - return node.isDataExcluded(); + public boolean isNodeExclusionAvailable(@NotNull DefaultMutableTreeNode node) { + return node instanceof UsageNode; } @Override - public void excludeNode(@NotNull Node node) { + public boolean isNodeExcluded(@NotNull DefaultMutableTreeNode node) { + return ((UsageNode)node).isDataExcluded(); + } + + @Override + public void excludeNode(@NotNull DefaultMutableTreeNode node) { final HashSet usages = new HashSet<>(); collectUsages(node, usages); excludeUsages(usages.toArray(new Usage[usages.size()])); } @Override - public void includeNode(@NotNull Node node) { + public void includeNode(@NotNull DefaultMutableTreeNode node) { final HashSet usages = new HashSet<>(); collectUsages(node, usages); includeUsages(usages.toArray(new Usage[usages.size()]));