diff --git a/platform/util/src/com/intellij/openapi/util/objectTree/ObjectNode.java b/platform/util/src/com/intellij/openapi/util/objectTree/ObjectNode.java index 9ee59c16f62d..de9f27176ab8 100644 --- a/platform/util/src/com/intellij/openapi/util/objectTree/ObjectNode.java +++ b/platform/util/src/com/intellij/openapi/util/objectTree/ObjectNode.java @@ -73,9 +73,7 @@ public final class ObjectNode { void removeChild(@NotNull ObjectNode child) { synchronized (myTree.treeLock) { assert myChildren != null: "No children to remove child: " + this + ' ' + child; - if (myChildren.remove(child)) { - myTree.putNode(child.getObject(), null); - } + myChildren.remove(child); } } @@ -138,11 +136,11 @@ public final class ObjectNode { private void remove() { myTree.putNode(myObject, null); synchronized (myTree.treeLock) { - if (myParent != null) { - myParent.removeChild(this); + if (myParent == null) { + myTree.removeRootObject(myObject); } else { - myTree.removeRootObject(myObject); + myParent.removeChild(this); } } } diff --git a/platform/util/src/com/intellij/openapi/util/objectTree/ObjectTree.java b/platform/util/src/com/intellij/openapi/util/objectTree/ObjectTree.java index 73d7442a2c00..6b8943ab669e 100644 --- a/platform/util/src/com/intellij/openapi/util/objectTree/ObjectTree.java +++ b/platform/util/src/com/intellij/openapi/util/objectTree/ObjectTree.java @@ -67,14 +67,14 @@ public final class ObjectTree { ObjectNode childNode = getNode(child); if (childNode == null) { childNode = createNodeFor(child, parentNode); - myRootObjects.remove(child); } else { - ObjectNode childParent = childNode.getParent(); - if (childParent != null) { - childParent.removeChild(childNode); + ObjectNode oldParent = childNode.getParent(); + if (oldParent != null) { + oldParent.removeChild(childNode); } } + myRootObjects.remove(child); checkWasNotAddedAlready(childNode, child); parentNode.addChild(childNode); @@ -96,12 +96,12 @@ public final class ObjectTree { } @NotNull - private ObjectNode getOrCreateNodeFor(@NotNull T object, @Nullable ObjectNode parentNode) { + private ObjectNode getOrCreateNodeFor(@NotNull T object, @Nullable ObjectNode defaultParent) { final ObjectNode node = getNode(object); if (node != null) return node; - return createNodeFor(object, parentNode); + return createNodeFor(object, defaultParent); } @NotNull