From ca675290a838bbdb3f44d2bb1b154226e3c32fd7 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 5 Aug 2013 19:10:56 +0400 Subject: [PATCH] Allow to monitor only thread name --- .../jet/lang/resolve/BindingTraceContext.java | 7 ++-- .../jet/util/slicedmap/TrackingSlicedMap.java | 37 +++++++++++-------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java index bbe10bbac6e..312437f670f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java @@ -29,8 +29,9 @@ import java.util.List; public class BindingTraceContext implements BindingTrace { private final List diagnostics = Lists.newArrayList(); - // This flag is used for debugging of "Rewrite at slice..." exceptions + // These flags are used for debugging of "Rewrite at slice..." exceptions private final static boolean TRACK_REWRITES = false; + private final static boolean TRACK_WITH_STACK_TRACES = true; private final MutableSlicedMap map; @@ -62,7 +63,7 @@ public class BindingTraceContext implements BindingTrace { public BindingTraceContext() { //noinspection ConstantConditions - this(TRACK_REWRITES ? new TrackingSlicedMap() : SlicedMapImpl.create()); + this.map = TRACK_REWRITES ? new TrackingSlicedMap(TRACK_WITH_STACK_TRACES) : SlicedMapImpl.create(); } @@ -72,7 +73,7 @@ public class BindingTraceContext implements BindingTrace { @TestOnly public static BindingTraceContext createTraceableBindingTrace() { - return new BindingTraceContext(new TrackingSlicedMap()); + return new BindingTraceContext(new TrackingSlicedMap(TRACK_WITH_STACK_TRACES)); } @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/TrackingSlicedMap.java b/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/TrackingSlicedMap.java index 995c89fe133..fc7f2dccccb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/TrackingSlicedMap.java +++ b/compiler/frontend/src/org/jetbrains/jet/util/slicedmap/TrackingSlicedMap.java @@ -27,12 +27,12 @@ import java.util.Iterator; import java.util.Map; public class TrackingSlicedMap extends SlicedMapImpl { - - // private final MutableSlicedMap delegate; private final Map, SliceWithStackTrace> sliceTranslationMap = Maps.newHashMap(); + private final boolean trackWithStackTraces; - public TrackingSlicedMap() { + public TrackingSlicedMap(boolean trackWithStackTraces) { super(Maps., Object>newLinkedHashMap()); + this.trackWithStackTraces = trackWithStackTraces; } private SliceWithStackTrace wrapSlice(ReadOnlySlice slice) { @@ -65,7 +65,7 @@ public class TrackingSlicedMap extends SlicedMapImpl { //noinspection WhileLoopReplaceableByForEach while (iterator.hasNext()) { Map.Entry, ?> entry = iterator.next(); - map.put(entry.getKey(), ((WithStackTrace) entry.getValue()).value); + map.put(entry.getKey(), ((TrackableValue) entry.getValue()).value); } //noinspection unchecked @@ -74,7 +74,7 @@ public class TrackingSlicedMap extends SlicedMapImpl { @Override public void put(WritableSlice slice, K key, V value) { - super.put(wrapSlice(slice), key, new WithStackTrace(value)); + super.put(wrapSlice(slice), key, new TrackableValue(value, trackWithStackTraces)); } @Override @@ -94,18 +94,23 @@ public class TrackingSlicedMap extends SlicedMapImpl { return super.getSliceContents(slice); } - private static class WithStackTrace { + private static class TrackableValue { + private final static StackTraceElement[] EMPTY_STACK_TRACE = new StackTraceElement[0]; + private final V value; private final StackTraceElement[] stackTrace; + private final String threadName; - private WithStackTrace(V value) { + private TrackableValue(V value, boolean storeStack) { this.value = value; - this.stackTrace = Thread.currentThread().getStackTrace(); + this.stackTrace = storeStack ? Thread.currentThread().getStackTrace() : EMPTY_STACK_TRACE; + this.threadName = Thread.currentThread().getName(); } private Appendable printStackTrace(Appendable appendable) { Printer s = new Printer(appendable); s.println(value); + s.println("Thread: " + threadName); s.println("Written at "); StackTraceElement[] trace = stackTrace; for (StackTraceElement aTrace : trace) { @@ -125,7 +130,7 @@ public class TrackingSlicedMap extends SlicedMapImpl { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - WithStackTrace other = (WithStackTrace) o; + TrackableValue other = (TrackableValue) o; if (value != null ? !value.equals(other.value) : other.value != null) return false; @@ -138,7 +143,7 @@ public class TrackingSlicedMap extends SlicedMapImpl { } } - public class SliceWithStackTrace implements RemovableSlice> { + public class SliceWithStackTrace implements RemovableSlice> { private final ReadOnlySlice delegate; @@ -149,18 +154,18 @@ public class TrackingSlicedMap extends SlicedMapImpl { // Methods of ReadOnlySlice @Override - public SlicedMapKey> makeKey(K key) { + public SlicedMapKey> makeKey(K key) { //noinspection unchecked return (SlicedMapKey) delegate.makeKey(key); } @Override - public WithStackTrace computeValue(SlicedMap map, K key, WithStackTrace value, boolean valueNotFound) { - return new WithStackTrace(delegate.computeValue(map, key, value == null ? null : value.value, valueNotFound)); + public TrackableValue computeValue(SlicedMap map, K key, TrackableValue value, boolean valueNotFound) { + return new TrackableValue(delegate.computeValue(map, key, value == null ? null : value.value, valueNotFound), trackWithStackTraces); } @Override - public ReadOnlySlice> makeRawValueVersion() { + public ReadOnlySlice> makeRawValueVersion() { return wrapSlice(delegate.makeRawValueVersion()); } @@ -181,12 +186,12 @@ public class TrackingSlicedMap extends SlicedMapImpl { } @Override - public void afterPut(MutableSlicedMap map, K key, WithStackTrace value) { + public void afterPut(MutableSlicedMap map, K key, TrackableValue value) { getWritableDelegate().afterPut(map, key, value.value); } @Override - public boolean check(K key, WithStackTrace value) { + public boolean check(K key, TrackableValue value) { return getWritableDelegate().check(key, value.value); } }