From 84c10c162336f17f1de3b828710e9cc1751b0698 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Sat, 15 Sep 2012 21:19:53 +0400 Subject: [PATCH] Added SlicedMap.getSliceContents() method returning immutable map for particular slice. --- .../jet/util/slicedmap/MutableSlicedMap.java | 8 ++++++++ .../jet/util/slicedmap/SlicedMapImpl.java | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/MutableSlicedMap.java b/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/MutableSlicedMap.java index 5d8b30b2e6b..b1af24c2492 100644 --- a/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/MutableSlicedMap.java +++ b/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/MutableSlicedMap.java @@ -16,6 +16,10 @@ package org.jetbrains.jet.util.slicedmap; +import com.google.common.collect.ImmutableMap; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.TestOnly; + /** * @author abreslav */ @@ -26,4 +30,8 @@ public interface MutableSlicedMap extends SlicedMap { V remove(RemovableSlice slice, K key); void clear(); + + @NotNull + @TestOnly + ImmutableMap getSliceContents(@NotNull ReadOnlySlice slice); } diff --git a/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/SlicedMapImpl.java b/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/SlicedMapImpl.java index 91fd6ad3aa2..07210423ee8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/SlicedMapImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/SlicedMapImpl.java @@ -16,9 +16,11 @@ package org.jetbrains.jet.util.slicedmap; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; +import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.util.CommonSuppliers; import java.util.Collection; @@ -106,4 +108,16 @@ public class SlicedMapImpl implements MutableSlicedMap { //noinspection unchecked return (Iterator) map.entrySet().iterator(); } + + @NotNull + @Override + public ImmutableMap getSliceContents(@NotNull ReadOnlySlice slice) { + ImmutableMap.Builder builder = ImmutableMap.builder(); + for (Map.Entry, ?> entry : map.entrySet()) { + if (entry.getKey().getSlice() == slice) { + builder.put((K) entry.getKey().getKey(), (V) entry.getValue()); + } + } + return builder.build(); + } }