From 96ded4d5d2b20c1eba5b9c2133474eba250b2fcb Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 28 Jul 2015 18:34:55 +0300 Subject: [PATCH] Simplify slices: remove SliceWithOpposite, defaultValue, etc. --- .../codegen/binding/CodegenBinding.java | 5 +- .../kotlin/resolve/BindingContext.java | 53 ++++++++--------- .../kotlin/util/slicedMap/Slices.java | 59 +++---------------- .../util/slicedMap/TrackingSliceMapTest.java | 12 ---- 4 files changed, 34 insertions(+), 95 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenBinding.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenBinding.java index ebac3428ae2..778cd7edc2b 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenBinding.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenBinding.java @@ -61,11 +61,10 @@ public class CodegenBinding { public static final WritableSlice SAM_CONSTRUCTOR_TO_ARGUMENT = Slices.createSimpleSlice(); - public static final WritableSlice MAPPING_FOR_WHEN_BY_ENUM = - Slices.sliceBuilder().build(); + public static final WritableSlice MAPPING_FOR_WHEN_BY_ENUM = Slices.createSimpleSlice(); public static final WritableSlice> MAPPINGS_FOR_WHENS_BY_ENUM_IN_CLASS_FILE = - Slices.>sliceBuilder().build(); + Slices.createSimpleSlice(); static { BasicWritableSlice.initSliceDebugNames(CodegenBinding.class); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContext.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContext.java index 7d6286ac3f1..7ecba0bdd2b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContext.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContext.java @@ -151,8 +151,8 @@ public interface BindingContext { * Has type of current expression has been already resolved */ WritableSlice PROCESSED = Slices.createSimpleSetSlice(); - WritableSlice USED_AS_EXPRESSION = Slices.createRemovableSetSlice(); - WritableSlice UNREACHABLE_CODE = Slices.createRemovableSetSlice(); + WritableSlice USED_AS_EXPRESSION = Slices.createSimpleSetSlice(); + WritableSlice UNREACHABLE_CODE = Slices.createSimpleSetSlice(); WritableSlice CAPTURED_IN_CLOSURE = new BasicWritableSlice(DO_NOTHING); @@ -196,50 +196,45 @@ public interface BindingContext { @Override public Boolean computeValue(SlicedMap map, JetFunctionLiteralExpression expression, Boolean isBlock, boolean valueNotFound) { isBlock = valueNotFound ? false : isBlock; - assert isBlock != null; return isBlock && !expression.getFunctionLiteral().hasParameterSpecification(); } }; - WritableSlice CLASS = Slices.sliceBuilder().build(); - WritableSlice SCRIPT = Slices.sliceBuilder().build(); - WritableSlice TYPE_PARAMETER = - Slices.sliceBuilder().build(); + WritableSlice CLASS = Slices.createSimpleSlice(); + WritableSlice SCRIPT = Slices.createSimpleSlice(); + WritableSlice TYPE_PARAMETER = Slices.createSimpleSlice(); /** * @see BindingContextUtils#recordFunctionDeclarationToDescriptor(BindingTrace, PsiElement, SimpleFunctionDescriptor)} */ - WritableSlice FUNCTION = Slices.sliceBuilder().build(); - WritableSlice CONSTRUCTOR = Slices.sliceBuilder().build(); + WritableSlice FUNCTION = Slices.createSimpleSlice(); + WritableSlice CONSTRUCTOR = Slices.createSimpleSlice(); WritableSlice> CONSTRUCTOR_RESOLVED_DELEGATION_CALL = - Slices.>sliceBuilder().build(); - WritableSlice VARIABLE = Slices.sliceBuilder().build(); - WritableSlice VALUE_PARAMETER = Slices.sliceBuilder().build(); - WritableSlice PROPERTY_ACCESSOR = - Slices.sliceBuilder().build(); - WritableSlice PRIMARY_CONSTRUCTOR_PARAMETER = - Slices.sliceBuilder().build(); + Slices.createSimpleSlice(); + WritableSlice VARIABLE = Slices.createSimpleSlice(); + WritableSlice VALUE_PARAMETER = Slices.createSimpleSlice(); + WritableSlice PROPERTY_ACCESSOR = Slices.createSimpleSlice(); + WritableSlice PRIMARY_CONSTRUCTOR_PARAMETER = Slices.createSimpleSlice(); WritableSlice[] DECLARATIONS_TO_DESCRIPTORS = new WritableSlice[] { CLASS, TYPE_PARAMETER, FUNCTION, CONSTRUCTOR, VARIABLE, VALUE_PARAMETER, PROPERTY_ACCESSOR, PRIMARY_CONSTRUCTOR_PARAMETER }; - ReadOnlySlice DECLARATION_TO_DESCRIPTOR = Slices.sliceBuilder() - .setFurtherLookupSlices(DECLARATIONS_TO_DESCRIPTORS).build(); + @SuppressWarnings("unchecked") + ReadOnlySlice DECLARATION_TO_DESCRIPTOR = + Slices.sliceBuilder() + .setFurtherLookupSlices(DECLARATIONS_TO_DESCRIPTORS) + .build(); - WritableSlice LABEL_TARGET = Slices.sliceBuilder().build(); - @KotlinSignature("val AMBIGUOUS_LABEL_TARGET: WritableSlice>") - WritableSlice> AMBIGUOUS_LABEL_TARGET = - Slices.>sliceBuilder().build(); - WritableSlice VALUE_PARAMETER_AS_PROPERTY = - Slices.sliceBuilder().build(); + WritableSlice LABEL_TARGET = Slices.createSimpleSlice(); + WritableSlice> AMBIGUOUS_LABEL_TARGET = Slices.createSimpleSlice(); + WritableSlice VALUE_PARAMETER_AS_PROPERTY = Slices.createSimpleSlice(); - WritableSlice DATA_CLASS_COMPONENT_FUNCTION = - Slices.sliceBuilder().build(); - WritableSlice DATA_CLASS_COPY_FUNCTION = - Slices.sliceBuilder().build(); + WritableSlice DATA_CLASS_COMPONENT_FUNCTION = Slices.createSimpleSlice(); + WritableSlice DATA_CLASS_COPY_FUNCTION = Slices.createSimpleSlice(); - WritableSlice FQNAME_TO_CLASS_DESCRIPTOR = new BasicWritableSlice(DO_NOTHING, true); + WritableSlice FQNAME_TO_CLASS_DESCRIPTOR = + new BasicWritableSlice(DO_NOTHING, true); WritableSlice FILE_TO_PACKAGE_FRAGMENT = Slices.createSimpleSlice(); WritableSlice> PACKAGE_TO_FILES = Slices.createSimpleSlice(); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/util/slicedMap/Slices.java b/compiler/frontend/src/org/jetbrains/kotlin/util/slicedMap/Slices.java index 6560483c60d..68223383031 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/util/slicedMap/Slices.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/util/slicedMap/Slices.java @@ -60,70 +60,43 @@ public class Slices { } public static WritableSlice createSimpleSetSlice() { - return createRemovableSetSlice(); + return new SetSlice(RewritePolicy.DO_NOTHING); } public static WritableSlice createCollectiveSetSlice() { return new SetSlice(RewritePolicy.DO_NOTHING, true); } - public static RemovableSlice createRemovableSetSlice() { - return new SetSlice(RewritePolicy.DO_NOTHING, false); - } - public static class SliceBuilder { - private V defaultValue = null; - private List> furtherLookupSlices = null; - private WritableSlice opposite = null; - + private List> furtherLookupSlices; private final RewritePolicy rewritePolicy; - private String debugName; private SliceBuilder(RewritePolicy rewritePolicy) { this.rewritePolicy = rewritePolicy; } - public SliceBuilder setDefaultValue(V defaultValue) { - this.defaultValue = defaultValue; - return this; - } - public SliceBuilder setFurtherLookupSlices(ReadOnlySlice... furtherLookupSlices) { this.furtherLookupSlices = Arrays.asList(furtherLookupSlices); return this; } - public SliceBuilder setOpposite(WritableSlice opposite) { - this.opposite = opposite; - return this; - } - public SliceBuilder setDebugName(@NotNull String debugName) { this.debugName = debugName; return this; } - public RemovableSlice build() { - SliceWithOpposite result = doBuild(); + public RemovableSlice build() { + BasicRemovableSlice result = doBuild(); if (debugName != null) { result.setDebugName(debugName); } return result; } - private SliceWithOpposite doBuild() { - if (defaultValue != null) { - return new SliceWithOpposite(rewritePolicy, opposite) { - @Override - public V computeValue(SlicedMap map, K key, V value, boolean valueNotFound) { - if (valueNotFound) return defaultValue; - return super.computeValue(map, key, value, false); - } - }; - } + private BasicRemovableSlice doBuild() { if (furtherLookupSlices != null) { - return new SliceWithOpposite(rewritePolicy, opposite) { + return new BasicRemovableSlice(rewritePolicy) { @Override public V computeValue(SlicedMap map, K key, V value, boolean valueNotFound) { if (valueNotFound) { @@ -133,13 +106,13 @@ public class Slices { return v; } } - return defaultValue; + return null; } return super.computeValue(map, key, value, false); } }; } - return new SliceWithOpposite(rewritePolicy, opposite); + return new BasicRemovableSlice(rewritePolicy); } } @@ -153,22 +126,6 @@ public class Slices { } } - public static class SliceWithOpposite extends BasicRemovableSlice { - private final WritableSlice opposite; - - public SliceWithOpposite(RewritePolicy rewritePolicy, WritableSlice opposite) { - super(rewritePolicy); - this.opposite = opposite; - } - - @Override - public void afterPut(MutableSlicedMap map, K key, V value) { - if (opposite != null) { - map.put(opposite, value, key); - } - } - } - public static class SetSlice extends BasicRemovableSlice { protected SetSlice(RewritePolicy rewritePolicy) { diff --git a/compiler/tests/org/jetbrains/kotlin/util/slicedMap/TrackingSliceMapTest.java b/compiler/tests/org/jetbrains/kotlin/util/slicedMap/TrackingSliceMapTest.java index df6e1925e76..162ef7346bb 100644 --- a/compiler/tests/org/jetbrains/kotlin/util/slicedMap/TrackingSliceMapTest.java +++ b/compiler/tests/org/jetbrains/kotlin/util/slicedMap/TrackingSliceMapTest.java @@ -31,18 +31,6 @@ public class TrackingSliceMapTest extends TestCase { assertEquals(42, (int) answer); } - public void testOppositeSlice() { - WritableSlice COLOR_NAME = Slices.sliceBuilder().setDebugName("COLOR_NAME").build(); - WritableSlice NAME_COLOR = Slices.sliceBuilder().setOpposite(COLOR_NAME).setDebugName("NAME_COLOR").build(); - - BindingTraceContext traceContext = BindingTraceContext.createTraceableBindingTrace(); - - traceContext.record(NAME_COLOR, "RED", 0xff0000); - String redName = traceContext.get(COLOR_NAME, 0xff0000); - - assertEquals("RED", redName); - } - public void testFurtherSlices() { WritableSlice NAME_COLOR = Slices.sliceBuilder().setDebugName("NAME_COLOR").build();