diff --git a/platform/util/src/com/intellij/util/diff/DiffTree.java b/platform/util/src/com/intellij/util/diff/DiffTree.java index ea63fc6a1ca2..26a5b67f01e4 100644 --- a/platform/util/src/com/intellij/util/diff/DiffTree.java +++ b/platform/util/src/com/intellij/util/diff/DiffTree.java @@ -75,9 +75,13 @@ public class DiffTree { int newSize = myNewTree.getChildren(newNode, newChildrenR); final NT[] newChildren = newChildrenR.get(); + compareLevel(level, oldNode, oldSize, oldChildren, newNode, newSize, newChildren); + disposeLevel(oldChildren, oldSize, newChildren, newSize); + } + + private void compareLevel(int level, OT oldNode, int oldSize, OT[] oldChildren, NT newNode, int newSize, NT[] newChildren) { if (Math.abs(oldSize - newSize) > CHANGE_PARENT_VERSUS_CHILDREN_THRESHOLD) { myConsumer.nodeReplaced(oldNode, newNode); - disposeLevel(oldChildren, oldSize, newChildren, newSize); return; } @@ -86,7 +90,6 @@ public class DiffTree { if (!comparator.hashcodesEqual(oldNode, newNode) || !comparator.typesEqual(oldNode, newNode)) { myConsumer.nodeReplaced(oldNode, newNode); } - disposeLevel(oldChildren, oldSize, newChildren, newSize); return; } @@ -170,8 +173,6 @@ public class DiffTree { oldIndex++; newIndex++; } - - disposeLevel(oldChildren, oldSize, newChildren, newSize); } private CompareResult looksEqual(ShallowNodeComparator comparator, OT oldChild1, NT newChild1) {