diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java index fe0b5f8ace8..70345773268 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java @@ -21,42 +21,42 @@ import java.util.Collection; * @author abreslav */ public interface BindingContext { - WritableSlice ANNOTATION = Slices.createSimpleSlice("ANNOTATION"); + WritableSlice ANNOTATION = Slices.createSimpleSlice(); - WritableSlice> COMPILE_TIME_VALUE = Slices.createSimpleSlice("COMPILE_TIME_VALUE"); - WritableSlice TYPE = Slices.createSimpleSlice("TYPE"); - WritableSlice EXPRESSION_TYPE = new BasicWritableSlice("EXPRESSION_TYPE", RewritePolicy.DO_NOTHING); + WritableSlice> COMPILE_TIME_VALUE = Slices.createSimpleSlice(); + WritableSlice TYPE = Slices.createSimpleSlice(); + WritableSlice EXPRESSION_TYPE = new BasicWritableSlice(RewritePolicy.DO_NOTHING); - WritableSlice REFERENCE_TARGET = new BasicWritableSlice("REFERENCE_TARGET", RewritePolicy.DO_NOTHING); - WritableSlice> RESOLVED_CALL = new BasicWritableSlice>("RESOLVED_CALL", RewritePolicy.DO_NOTHING); + WritableSlice REFERENCE_TARGET = new BasicWritableSlice(RewritePolicy.DO_NOTHING); + WritableSlice> RESOLVED_CALL = new BasicWritableSlice>(RewritePolicy.DO_NOTHING); - WritableSlice>> AMBIGUOUS_REFERENCE_TARGET = new BasicWritableSlice>>("AMBIGUOUS_REFERENCE_TARGET", RewritePolicy.DO_NOTHING); + WritableSlice>> AMBIGUOUS_REFERENCE_TARGET = new BasicWritableSlice>>(RewritePolicy.DO_NOTHING); - WritableSlice LOOP_RANGE_ITERATOR = Slices.createSimpleSlice("LOOP_RANGE_ITERATOR"); - WritableSlice LOOP_RANGE_HAS_NEXT = Slices.createSimpleSlice("LOOP_RANGE_HAS_NEXT"); - WritableSlice LOOP_RANGE_NEXT = Slices.createSimpleSlice("LOOP_RANGE_NEXT"); + WritableSlice LOOP_RANGE_ITERATOR = Slices.createSimpleSlice(); + WritableSlice LOOP_RANGE_HAS_NEXT = Slices.createSimpleSlice(); + WritableSlice LOOP_RANGE_NEXT = Slices.createSimpleSlice(); - WritableSlice> INDEXED_LVALUE_GET = Slices.createSimpleSlice("INDEXED_LVALUE_GET"); - WritableSlice> INDEXED_LVALUE_SET = Slices.createSimpleSlice("INDEXED_LVALUE_SET"); + WritableSlice> INDEXED_LVALUE_GET = Slices.createSimpleSlice(); + WritableSlice> INDEXED_LVALUE_SET = Slices.createSimpleSlice(); - WritableSlice AUTOCAST = Slices.createSimpleSlice("AUTOCAST"); - WritableSlice RESOLUTION_SCOPE = Slices.createSimpleSlice("RESOLUTION_SCOPE"); + WritableSlice AUTOCAST = Slices.createSimpleSlice(); + WritableSlice RESOLUTION_SCOPE = Slices.createSimpleSlice(); - WritableSlice VARIABLE_REASSIGNMENT = Slices.createSimpleSetSlice("VARIABLE_REASSIGNMENT"); - WritableSlice AUTO_CREATED_IT = Slices.createSimpleSetSlice("AUTO_CREATED_IT"); - WritableSlice VARIABLE_ASSIGNMENT = Slices.createSimpleSlice("VARIABLE_ASSIGNMENT"); - WritableSlice PROCESSED = Slices.createSimpleSetSlice("PROCESSED"); - WritableSlice STATEMENT = Slices.createRemovableSetSlice("STATEMENT"); - WritableSlice DELEGATED = Slices.createRemovableSetSlice("DELEGATED"); + WritableSlice VARIABLE_REASSIGNMENT = Slices.createSimpleSetSlice(); + WritableSlice AUTO_CREATED_IT = Slices.createSimpleSetSlice(); + WritableSlice VARIABLE_ASSIGNMENT = Slices.createSimpleSlice(); + WritableSlice PROCESSED = Slices.createSimpleSetSlice(); + WritableSlice STATEMENT = Slices.createRemovableSetSlice(); + WritableSlice DELEGATED = Slices.createRemovableSetSlice(); - WritableSlice MUST_BE_WRAPPED_IN_A_REF = Slices.createSimpleSetSlice("MUST_BE_WRAPPED_IN_A_REF"); + WritableSlice MUST_BE_WRAPPED_IN_A_REF = Slices.createSimpleSetSlice(); enum DeferredTypeKey {DEFERRED_TYPE_KEY} - WritableSlice> DEFERRED_TYPES = Slices.createSimpleSlice("DEFERRED_TYPES"); + WritableSlice> DEFERRED_TYPES = Slices.createSimpleSlice(); WritableSlice DEFERRED_TYPE = new CollectionSliceWrapper(DEFERRED_TYPES, CommonSuppliers.getArrayListSupplier()); - WritableSlice BACKING_FIELD_REQUIRED = new Slices.SetSlice("BACKING_FIELD_REQUIRED", RewritePolicy.DO_NOTHING) { + WritableSlice BACKING_FIELD_REQUIRED = new Slices.SetSlice(RewritePolicy.DO_NOTHING) { @Override public Boolean computeValue(SlicedMap map, PropertyDescriptor propertyDescriptor, Boolean backingFieldRequired, boolean valueNotFound) { backingFieldRequired = valueNotFound ? false : backingFieldRequired; @@ -85,9 +85,9 @@ public interface BindingContext { return backingFieldRequired; } }; - WritableSlice IS_INITIALIZED = Slices.createSimpleSetSlice("IS_INITIALIZED"); + WritableSlice IS_INITIALIZED = Slices.createSimpleSetSlice(); - WritableSlice BLOCK = new Slices.SetSlice("BLOCK", RewritePolicy.DO_NOTHING) { + WritableSlice BLOCK = new Slices.SetSlice(RewritePolicy.DO_NOTHING) { @Override public Boolean computeValue(SlicedMap map, JetFunctionLiteralExpression expression, Boolean isBlock, boolean valueNotFound) { isBlock = valueNotFound ? false : isBlock; @@ -106,31 +106,35 @@ public interface BindingContext { return declarationDescriptor.getOriginal(); } }; - ReadOnlySlice DESCRIPTOR_TO_DECLARATION = Slices.sliceBuilder("DECLARATION_TO_DESCRIPTOR").setKeyNormalizer(DECLARATION_DESCRIPTOR_NORMALIZER).build(); + ReadOnlySlice DESCRIPTOR_TO_DECLARATION = Slices.sliceBuilder().setKeyNormalizer(DECLARATION_DESCRIPTOR_NORMALIZER).build(); - WritableSlice NAMESPACE = Slices.sliceBuilder("DECLARATION").setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); - WritableSlice CLASS = Slices.sliceBuilder("CLASS").setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); - WritableSlice TYPE_PARAMETER = Slices.sliceBuilder("TYPE_PARAMETER").setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); - WritableSlice FUNCTION = Slices.sliceBuilder("FUNCTION").setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); - WritableSlice CONSTRUCTOR = Slices.sliceBuilder("CONSTRUCTOR").setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); - WritableSlice VARIABLE = Slices.sliceBuilder("VARIABLE").setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); - WritableSlice VALUE_PARAMETER = Slices.sliceBuilder("VALUE_PARAMETER").setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); - WritableSlice PROPERTY_ACCESSOR = Slices.sliceBuilder("PROPERTY_ACCESSOR").setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); + WritableSlice NAMESPACE = Slices.sliceBuilder().setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); + WritableSlice CLASS = Slices.sliceBuilder().setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); + WritableSlice TYPE_PARAMETER = Slices.sliceBuilder().setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); + WritableSlice FUNCTION = Slices.sliceBuilder().setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); + WritableSlice CONSTRUCTOR = Slices.sliceBuilder().setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); + WritableSlice VARIABLE = Slices.sliceBuilder().setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); + WritableSlice VALUE_PARAMETER = Slices.sliceBuilder().setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); + WritableSlice PROPERTY_ACCESSOR = Slices.sliceBuilder().setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); // normalize value to getOriginal(value) - WritableSlice PRIMARY_CONSTRUCTOR_PARAMETER = Slices.sliceBuilder("PRIMARY_CONSTRUCTOR_PARAMETER").setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); - WritableSlice OBJECT_DECLARATION = Slices.sliceBuilder("OBJECT_DECLARATION").setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); + WritableSlice PRIMARY_CONSTRUCTOR_PARAMETER = Slices.sliceBuilder().setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); + WritableSlice OBJECT_DECLARATION = Slices.sliceBuilder().setOpposite((WritableSlice) DESCRIPTOR_TO_DECLARATION).build(); WritableSlice[] DECLARATIONS_TO_DESCRIPTORS = new WritableSlice[] { NAMESPACE, CLASS, TYPE_PARAMETER, FUNCTION, CONSTRUCTOR, VARIABLE, VALUE_PARAMETER, PRIMARY_CONSTRUCTOR_PARAMETER, OBJECT_DECLARATION }; - ReadOnlySlice DECLARATION_TO_DESCRIPTOR = Slices.sliceBuilder("DECLARATION_TO_DESCRIPTOR") + ReadOnlySlice DECLARATION_TO_DESCRIPTOR = Slices.sliceBuilder() .setFurtherLookupSlices(DECLARATIONS_TO_DESCRIPTORS).build(); - WritableSlice LABEL_TARGET = Slices.sliceBuilder("LABEL_TARGET").build(); - WritableSlice VALUE_PARAMETER_AS_PROPERTY = Slices.sliceBuilder("VALUE_PARAMETER_AS_PROPERTY").build(); + WritableSlice LABEL_TARGET = Slices.sliceBuilder().build(); + WritableSlice VALUE_PARAMETER_AS_PROPERTY = Slices.sliceBuilder().build(); + @SuppressWarnings("UnusedDeclaration") + @Deprecated // This field is needed only for the side effects of its initializer + Void _static_initializer = BasicWritableSlice.initSliceDebugNames(BindingContext.class); + Collection getDiagnostics(); @Nullable diff --git a/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/BasicWritableSlice.java b/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/BasicWritableSlice.java index cef0c263261..4afb0dded7e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/BasicWritableSlice.java +++ b/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/BasicWritableSlice.java @@ -1,15 +1,33 @@ package org.jetbrains.jet.util.slicedmap; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; + /** * @author abreslav */ public class BasicWritableSlice implements WritableSlice { - private final String debugName; + public static Void initSliceDebugNames(Class declarationOwner) { + for (Field field : declarationOwner.getFields()) { + if (!Modifier.isStatic(field.getModifiers())) continue; + try { + Object value = field.get(null); + if (value instanceof BasicWritableSlice) { + BasicWritableSlice slice = (BasicWritableSlice) value; + slice.debugName = field.getName(); + } + } catch (IllegalAccessException e) { + throw new IllegalStateException(e); + } + } + return null; + } + + private String debugName; private final RewritePolicy rewritePolicy; - public BasicWritableSlice(String debugName, RewritePolicy rewritePolicy) { - this.debugName = debugName; + public BasicWritableSlice(RewritePolicy rewritePolicy) { this.rewritePolicy = rewritePolicy; } diff --git a/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/Slices.java b/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/Slices.java index c5bbb7c135d..546c2fd4f45 100644 --- a/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/Slices.java +++ b/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/Slices.java @@ -34,19 +34,19 @@ public class Slices { } - public static SliceBuilder sliceBuilder(String debugName) { - return new SliceBuilder(debugName, ONLY_REWRITE_TO_EQUAL); + public static SliceBuilder sliceBuilder() { + return new SliceBuilder(ONLY_REWRITE_TO_EQUAL); } - public static WritableSlice createSimpleSlice(String debugName) { - return new BasicWritableSlice(debugName, ONLY_REWRITE_TO_EQUAL); + public static WritableSlice createSimpleSlice() { + return new BasicWritableSlice(ONLY_REWRITE_TO_EQUAL); } - public static WritableSlice createSimpleSetSlice(String debugName) { - return createRemovableSetSlice(debugName); + public static WritableSlice createSimpleSetSlice() { + return createRemovableSetSlice(); } - public static RemovableSlice createRemovableSetSlice(String debugName) { - return new SetSlice(debugName, RewritePolicy.DO_NOTHING); + public static RemovableSlice createRemovableSetSlice() { + return new SetSlice(RewritePolicy.DO_NOTHING); } public static class SliceBuilder { @@ -57,11 +57,8 @@ public class Slices { private RewritePolicy rewritePolicy; - private String debugName; - - private SliceBuilder(String debugName, RewritePolicy rewritePolicy) { + private SliceBuilder(RewritePolicy rewritePolicy) { this.rewritePolicy = rewritePolicy; - this.debugName = debugName; } public SliceBuilder setDefaultValue(V defaultValue) { @@ -86,7 +83,7 @@ public class Slices { public RemovableSlice build() { if (defaultValue != null) { - return new SliceWithOpposite(debugName, rewritePolicy, opposite, keyNormalizer) { + return new SliceWithOpposite(rewritePolicy, opposite, keyNormalizer) { @Override public V computeValue(SlicedMap map, K key, V value, boolean valueNotFound) { if (valueNotFound) return defaultValue; @@ -95,7 +92,7 @@ public class Slices { }; } if (furtherLookupSlices != null) { - return new SliceWithOpposite(debugName, rewritePolicy, opposite, keyNormalizer) { + return new SliceWithOpposite(rewritePolicy, opposite, keyNormalizer) { @Override public V computeValue(SlicedMap map, K key, V value, boolean valueNotFound) { if (valueNotFound) { @@ -110,14 +107,14 @@ public class Slices { } }; } - return new SliceWithOpposite(debugName, rewritePolicy, opposite, keyNormalizer); + return new SliceWithOpposite(rewritePolicy, opposite, keyNormalizer); } } public static class BasicRemovableSlice extends BasicWritableSlice implements RemovableSlice { - protected BasicRemovableSlice(String debugName, RewritePolicy rewritePolicy) { - super(debugName, rewritePolicy); + protected BasicRemovableSlice(RewritePolicy rewritePolicy) { + super(rewritePolicy); } } @@ -133,11 +130,11 @@ public class Slices { } public SliceWithOpposite(String debugName, RewritePolicy rewritePolicy, KeyNormalizer keyNormalizer) { - this(debugName, rewritePolicy, null, keyNormalizer); + this(rewritePolicy, null, keyNormalizer); } - public SliceWithOpposite(String debugName, RewritePolicy rewritePolicy, WritableSlice opposite, KeyNormalizer keyNormalizer) { - super(debugName, rewritePolicy); + public SliceWithOpposite(RewritePolicy rewritePolicy, WritableSlice opposite, KeyNormalizer keyNormalizer) { + super(rewritePolicy); this.opposite = opposite; this.keyNormalizer = keyNormalizer; } @@ -160,8 +157,8 @@ public class Slices { public static class SetSlice extends BasicRemovableSlice { - protected SetSlice(String debugName, RewritePolicy rewritePolicy) { - super(debugName, rewritePolicy); + protected SetSlice(RewritePolicy rewritePolicy) { + super(rewritePolicy); } @Override