From 3451a5f396c8ae5588169f0cf6a754fe6d7b5c1d Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 2 Oct 2012 16:44:31 +0200 Subject: [PATCH] VFP test take 2: make Disposer disposing faster --- .../openapi/vfs/impl/VirtualFilePointerTest.java | 4 ++-- .../com/intellij/openapi/util/objectTree/ObjectNode.java | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/vfs/impl/VirtualFilePointerTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/vfs/impl/VirtualFilePointerTest.java index 45e13c82bd41..55fbc5d772af 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/vfs/impl/VirtualFilePointerTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/vfs/impl/VirtualFilePointerTest.java @@ -398,11 +398,11 @@ public class VirtualFilePointerTest extends PlatformLangTestCase { PlatformTestUtil.startPerformanceTest("VF container create/delete",200, new ThrowableRunnable() { @Override public void run() throws Exception { + Disposable parent = Disposer.newDisposable(); for (int i = 0; i < 10000; i++) { - Disposable parent = Disposer.newDisposable(); myVirtualFilePointerManager.createContainer(parent); - Disposer.dispose(parent); } + Disposer.dispose(parent); } }).cpuBound().assertTiming(); } 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 2f66e82aa1e8..a349750afd75 100644 --- a/platform/util/src/com/intellij/openapi/util/objectTree/ObjectNode.java +++ b/platform/util/src/com/intellij/openapi/util/objectTree/ObjectNode.java @@ -26,6 +26,7 @@ import org.jetbrains.annotations.TestOnly; import java.util.Collection; import java.util.Collections; +import java.util.ListIterator; public final class ObjectNode { private static final ObjectNode[] EMPTY_ARRAY = new ObjectNode[0]; @@ -73,7 +74,13 @@ public final class ObjectNode { void removeChild(@NotNull ObjectNode child) { synchronized (myTree.treeLock) { assert myChildren != null: "No children to remove child: " + this + ' ' + child; - myChildren.remove(child); + ListIterator> iterator = myChildren.listIterator(myChildren.size()); + while (iterator.hasPrevious()) { + if (child.equals(iterator.previous())) { + iterator.remove(); + return; + } + } } }