From eec068545660be3480a269281d33816c5042edaa Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Mon, 23 Feb 2015 11:14:40 +0100 Subject: [PATCH] [performance optimization] no equals / hashCode invokations for V during deserialization --- .../util/indexing/ValueContainerImpl.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/util/indexing/ValueContainerImpl.java b/platform/lang-impl/src/com/intellij/util/indexing/ValueContainerImpl.java index 55586b5e8b76..f80786273af7 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/ValueContainerImpl.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/ValueContainerImpl.java @@ -390,8 +390,8 @@ class ValueContainerImpl extends UpdatableValueContainer implement return container; } - private void ensureFileSetCapacityForValue(Value value, int count) { - if (count <= 1) return; + private @Nullable ChangeBufferingList ensureFileSetCapacityForValue(Value value, int count) { + if (count <= 1) return null; Object fileSetObject = getFileSetObject(value); if (fileSetObject != null) { @@ -399,15 +399,18 @@ class ValueContainerImpl extends UpdatableValueContainer implement ChangeBufferingList list = new ChangeBufferingList(count + 1); list.add(((Integer)fileSetObject).intValue()); resetFileSetForValue(value, list); + return list; } else if (fileSetObject instanceof ChangeBufferingList) { ChangeBufferingList list = (ChangeBufferingList)fileSetObject; list.ensureCapacity(count); + return list; } - return; + return null; } - final Object fileSet = new ChangeBufferingList(count); + final ChangeBufferingList fileSet = new ChangeBufferingList(count); attachFileSetForNewValue(value, fileSet); + return fileSet; } private void attachFileSetForNewValue(Value value, Object fileSet) { @@ -551,12 +554,13 @@ class ValueContainerImpl extends UpdatableValueContainer implement if (mapping != null) mapping.associateFileIdToValue(idCountOrSingleValue, value); } else { idCountOrSingleValue = -idCountOrSingleValue; - ensureFileSetCapacityForValue(value, idCountOrSingleValue); + ChangeBufferingList changeBufferingList = ensureFileSetCapacityForValue(value, idCountOrSingleValue); int prev = 0; for (int i = 0; i < idCountOrSingleValue; i++) { final int id = DataInputOutputUtil.readINT(stream); - addValue(prev + id, value); + if (changeBufferingList != null) changeBufferingList.add(prev + id); + else addValue(prev + id, value); if (mapping != null) mapping.associateFileIdToValue(prev + id, value); prev += id; }