diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/Interner.java b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/Interner.java index 2cf1d493786..21b614fb25a 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/Interner.java +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/Interner.java @@ -18,21 +18,21 @@ package org.jetbrains.jet.descriptors.serialization; import gnu.trove.TObjectHashingStrategy; import gnu.trove.TObjectIntHashMap; +import kotlin.Function1; +import kotlin.KotlinPackage; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.List; public final class Interner { private final Interner parent; private final int firstIndex; private final TObjectIntHashMap interned; - private final List all = new ArrayList(); public Interner(Interner parent, @NotNull TObjectHashingStrategy hashing) { this.parent = parent; - this.firstIndex = parent != null ? parent.all.size() + parent.firstIndex : 0; + this.firstIndex = parent != null ? parent.interned.size() + parent.firstIndex : 0; this.interned = new TObjectIntHashMap(hashing); } @@ -50,7 +50,7 @@ public final class Interner { } private int find(@NotNull T obj) { - assert parent == null || parent.all.size() + parent.firstIndex == firstIndex : + assert parent == null || parent.interned.size() + parent.firstIndex == firstIndex : "Parent changed in parallel with child: indexes will be wrong"; if (parent != null) { int index = parent.find(obj); @@ -68,12 +68,17 @@ public final class Interner { index = firstIndex + interned.size(); interned.put(obj, index); - all.add(obj); return index; } + @SuppressWarnings("unchecked") @NotNull public List getAllInternedObjects() { - return all; + return KotlinPackage.toSortedListBy((T[]) interned.keys(), new Function1() { + @Override + public Integer invoke(T key) { + return interned.get(key); + } + }); } }