From 42f1f252c426165b81d4b8a7406fd48d4dd2912d Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 21 Jun 2017 13:38:52 +0200 Subject: [PATCH] IDEA-123295 (Replace In Path stats are incorrect after replacement) --- .../com/intellij/usages/impl/GroupNode.java | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/platform/usageView/src/com/intellij/usages/impl/GroupNode.java b/platform/usageView/src/com/intellij/usages/impl/GroupNode.java index 8ba58bd8eb33..8d763afff667 100644 --- a/platform/usageView/src/com/intellij/usages/impl/GroupNode.java +++ b/platform/usageView/src/com/intellij/usages/impl/GroupNode.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -156,39 +156,41 @@ public class GroupNode extends Node implements Navigatable, Comparable usages, @NotNull DefaultTreeModel treeModel) { + int removeUsagesBulk(@NotNull Set usages, @NotNull DefaultTreeModel treeModel) { ApplicationManager.getApplication().assertIsDispatchThread(); - boolean removed; + int removed = 0; synchronized (this) { - removed = myChildren.removeAll(usages); + for (UsageNode usage : usages) { + if (myChildren.remove(usage)) { + removed++; + } + } - if (!removed) { + if (removed == 0) { for (GroupNode groupNode : getSubGroups()) { - if (groupNode.removeUsagesBulk(usages, treeModel)) { + int delta = groupNode.removeUsagesBulk(usages, treeModel); + if (delta > 0) { if (groupNode.getRecursiveUsageCount() == 0) { treeModel.removeNodeFromParent(groupNode); myChildren.remove(groupNode); } - removed = true; - break; + removed += delta; + if (removed == usages.size()) break; } } } } - if (removed) { - wasRemoved(treeModel); + if (removed > 0) { + myRecursiveUsageCount -= removed; + if (myRecursiveUsageCount != 0) { + treeModel.nodeChanged(this); + } } return removed; } - private void wasRemoved(@NotNull DefaultTreeModel treeModel) { - ApplicationManager.getApplication().assertIsDispatchThread(); - myRecursiveUsageCount--; - treeModel.nodeChanged(this); - } - @NotNull UsageNode addUsage(@NotNull Usage usage, @NotNull Consumer edtInsertedUnderQueue, boolean filterDuplicateLines) { final UsageNode newNode;