diff --git a/compiler/frontend/src/org/jetbrains/kotlin/util/slicedMap/SlicedMapImpl.java b/compiler/frontend/src/org/jetbrains/kotlin/util/slicedMap/SlicedMapImpl.java index 1f52470d1d9..88b77db744c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/util/slicedMap/SlicedMapImpl.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/util/slicedMap/SlicedMapImpl.java @@ -23,6 +23,7 @@ import com.intellij.openapi.util.Key; import com.intellij.util.keyFMap.KeyFMap; import kotlin.jvm.functions.Function3; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.Collections; @@ -31,7 +32,8 @@ import java.util.Map; public class SlicedMapImpl implements MutableSlicedMap { private final boolean alwaysAllowRewrite; - private final Map map = new OpenAddressLinearProbingHashTable<>(); + @Nullable + private Map map = null; private Multimap, Object> collectiveSliceKeys = null; public SlicedMapImpl(boolean alwaysAllowRewrite) { @@ -44,6 +46,10 @@ public class SlicedMapImpl implements MutableSlicedMap { return; } + if (map == null) { + map = new OpenAddressLinearProbingHashTable<>(); + } + KeyFMap holder = map.get(key); if (holder == null) { holder = KeyFMap.EMPTY_MAP; @@ -76,13 +82,13 @@ public class SlicedMapImpl implements MutableSlicedMap { @Override public void clear() { - map.clear(); + map = null; collectiveSliceKeys = null; } @Override public V get(ReadOnlySlice slice, K key) { - KeyFMap holder = map.get(key); + KeyFMap holder = map != null ? map.get(key) : null; V value = holder == null ? null : holder.get(slice.getKey()); @@ -100,6 +106,7 @@ public class SlicedMapImpl implements MutableSlicedMap { @Override public void forEach(@NotNull Function3 f) { + if (map == null) return; map.forEach((key, holder) -> { if (holder == null) return; @@ -114,6 +121,8 @@ public class SlicedMapImpl implements MutableSlicedMap { @NotNull @Override public ImmutableMap getSliceContents(@NotNull ReadOnlySlice slice) { + if (map == null) return ImmutableMap.of(); + ImmutableMap.Builder builder = ImmutableMap.builder(); map.forEach((key, holder) -> {