From cb37a0479f9eea83d194052c6595ea92d85fa96f Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 12 Dec 2018 19:52:40 +0300 Subject: [PATCH] override toArray() to use more efficient arraycopy instead of the default iterator() creation/traversing --- .../intellij/util/containers/ContainerUtil.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/platform/util/src/com/intellij/util/containers/ContainerUtil.java b/platform/util/src/com/intellij/util/containers/ContainerUtil.java index cb65db4aadd9..b3b4a2921db3 100644 --- a/platform/util/src/com/intellij/util/containers/ContainerUtil.java +++ b/platform/util/src/com/intellij/util/containers/ContainerUtil.java @@ -582,6 +582,20 @@ public class ContainerUtil extends ContainerUtilRt { public int size() { return myStore.length; } + + // override for more efficient arraycopy vs. iterator() creation/traversing + @NotNull + @Override + public T[] toArray(@NotNull T[] a) { + int size = size(); + //noinspection unchecked + T[] result = a.length >= size ? a : (T[])Array.newInstance(a.getClass().getComponentType(), size); + System.arraycopy(myStore, 0, result, 0, size); + if (result.length > size) { + result[size] = null; + } + return result; + } } @NotNull