Skip to content

Commit b395d33

Browse files
committed
debug names for temporary traces added
1 parent 6c1d3aa commit b395d33

22 files changed

+103
-55
lines changed

compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ public static JetFile getFileForCodegenNamedClass(
203203
) {
204204
final Ref<DeclarationDescriptor> resultingDescriptor = Ref.create();
205205

206-
DelegatingBindingTrace trace = new DelegatingBindingTrace(context) {
206+
DelegatingBindingTrace trace = new DelegatingBindingTrace(context, "trace in PsiCodegenPredictor") {
207207
@Override
208208
public <K, V> void record(WritableSlice<K, V> slice, K key, V value) {
209209
super.record(slice, key, value);

compiler/backend/src/org/jetbrains/jet/codegen/state/GenerationState.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public GenerationState(
9191
this.files = files;
9292
this.classBuilderMode = builderFactory.getClassBuilderMode();
9393

94-
bindingTrace = new DelegatingBindingTrace(exhaust.getBindingContext());
94+
bindingTrace = new DelegatingBindingTrace(exhaust.getBindingContext(), "trace in GenerationState");
9595
bindingContext = bindingTrace.getBindingContext();
9696

9797
this.typeMapper = new JetTypeMapper(bindingTrace, builtinToJavaTypesMapping == BuiltinToJavaTypesMapping.ENABLED, classBuilderMode);

compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnalyzingUtils.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.intellij.psi.PsiElementVisitor;
2121
import com.intellij.psi.PsiErrorElement;
2222
import org.jetbrains.annotations.NotNull;
23+
import org.jetbrains.annotations.Nullable;
2324
import org.jetbrains.jet.lang.diagnostics.Diagnostic;
2425
import org.jetbrains.jet.lang.diagnostics.DiagnosticHolder;
2526
import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils;
@@ -72,4 +73,14 @@ public static void throwExceptionOnErrors(BindingContext bindingContext) {
7273
}
7374

7475
// --------------------------------------------------------------------------------------------------------------------------
76+
77+
public static String formDebugNameForBindingTrace(@NotNull String debugName, @Nullable Object resolutionSubjectForMessage) {
78+
if (resolutionSubjectForMessage instanceof PsiElement) {
79+
resolutionSubjectForMessage = ((PsiElement) resolutionSubjectForMessage).getText();
80+
}
81+
if (resolutionSubjectForMessage != null) {
82+
return debugName + " '" + resolutionSubjectForMessage + "'";
83+
}
84+
return debugName;
85+
}
7586
}

compiler/frontend/src/org/jetbrains/jet/lang/resolve/ChainedTemporaryBindingTrace.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,19 @@
1616

1717
package org.jetbrains.jet.lang.resolve;
1818

19+
import org.jetbrains.annotations.Nullable;
20+
1921
/**
2022
* @author svtk
2123
*/
2224
public class ChainedTemporaryBindingTrace extends TemporaryBindingTrace {
2325

24-
public static ChainedTemporaryBindingTrace create(TemporaryBindingTrace trace) {
25-
return new ChainedTemporaryBindingTrace(trace);
26+
public static ChainedTemporaryBindingTrace create(TemporaryBindingTrace trace, String debugName, @Nullable Object resolutionSubjectForMessage) {
27+
return new ChainedTemporaryBindingTrace(trace, AnalyzingUtils.formDebugNameForBindingTrace(debugName, resolutionSubjectForMessage));
2628
}
2729

28-
private ChainedTemporaryBindingTrace(TemporaryBindingTrace trace) {
29-
super(trace);
30+
private ChainedTemporaryBindingTrace(TemporaryBindingTrace trace, String debugName) {
31+
super(trace, debugName);
3032
}
3133

3234
@Override

compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegatingBindingTrace.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public class DelegatingBindingTrace implements BindingTrace {
3636
private final BindingContext parentContext;
3737
private final MutableSlicedMap map = SlicedMapImpl.create();
3838
private final List<Diagnostic> diagnostics = Lists.newArrayList();
39+
private final String name;
3940

4041
private final BindingContext bindingContext = new BindingContext() {
4142
@Override
@@ -67,8 +68,13 @@ public <K, V> ImmutableMap<K, V> getSliceContents(@NotNull ReadOnlySlice<K, V> s
6768
}
6869
};
6970

70-
public DelegatingBindingTrace(BindingContext parentContext) {
71+
public DelegatingBindingTrace(BindingContext parentContext, String debugName) {
7172
this.parentContext = parentContext;
73+
this.name = debugName;
74+
}
75+
76+
public DelegatingBindingTrace(BindingContext parentContext, String debugName, @Nullable Object resolutionSubjectForMessage) {
77+
this(parentContext, AnalyzingUtils.formDebugNameForBindingTrace(debugName, resolutionSubjectForMessage));
7278
}
7379

7480
@Override
@@ -148,4 +154,9 @@ public void clear() {
148154
public void report(@NotNull Diagnostic diagnostic) {
149155
diagnostics.add(diagnostic);
150156
}
157+
158+
@Override
159+
public String toString() {
160+
return name;
161+
}
151162
}

compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ public static void processImportsInFile(
111111
Collection<JetImportDirective> defaultImportDirectives = Lists.newArrayList();
112112
configuration.addDefaultImports(defaultImportDirectives);
113113
for (JetImportDirective defaultImportDirective : defaultImportDirectives) {
114-
TemporaryBindingTrace temporaryTrace = TemporaryBindingTrace.create(trace); //not to trace errors of default imports
114+
TemporaryBindingTrace temporaryTrace = TemporaryBindingTrace.create(
115+
trace, "transient trace to resolve default imports"); //not to trace errors of default imports
115116
qualifiedExpressionResolver.processImportReference(defaultImportDirective, rootScope, namespaceScope, delayedImporter,
116117
temporaryTrace, configuration, onlyClasses);
117118
}

compiler/frontend/src/org/jetbrains/jet/lang/resolve/QualifiedExpressionResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ private boolean canImportMembersFrom(@NotNull Collection<? extends DeclarationDe
112112
if (descriptors.size() == 1) {
113113
return canImportMembersFrom(descriptors.iterator().next(), reference, trace, onlyClasses);
114114
}
115-
TemporaryBindingTrace temporaryTrace = TemporaryBindingTrace.create(trace);
115+
TemporaryBindingTrace temporaryTrace = TemporaryBindingTrace.create(trace, "trace to find out if members can be imported from", reference);
116116
boolean canImport = false;
117117
for (DeclarationDescriptor descriptor : descriptors) {
118118
canImport |= canImportMembersFrom(descriptor, reference, temporaryTrace, onlyClasses);

compiler/frontend/src/org/jetbrains/jet/lang/resolve/TemporaryBindingTrace.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,28 @@
1717
package org.jetbrains.jet.lang.resolve;
1818

1919
import com.google.common.base.Predicate;
20+
import com.intellij.psi.PsiElement;
2021
import org.jetbrains.annotations.NotNull;
22+
import org.jetbrains.annotations.Nullable;
2123
import org.jetbrains.jet.util.slicedmap.WritableSlice;
2224

2325
/**
2426
* @author abreslav
2527
*/
2628
public class TemporaryBindingTrace extends DelegatingBindingTrace {
2729

28-
public static TemporaryBindingTrace create(@NotNull BindingTrace trace) {
29-
return new TemporaryBindingTrace(trace);
30+
public static TemporaryBindingTrace create(@NotNull BindingTrace trace, String debugName) {
31+
return new TemporaryBindingTrace(trace, debugName);
32+
}
33+
34+
public static TemporaryBindingTrace create(@NotNull BindingTrace trace, String debugName, @Nullable Object resolutionSubjectForMessage) {
35+
return create(trace, AnalyzingUtils.formDebugNameForBindingTrace(debugName, resolutionSubjectForMessage));
3036
}
3137

3238
protected final BindingTrace trace;
3339

34-
protected TemporaryBindingTrace(@NotNull BindingTrace trace) {
35-
super(trace.getBindingContext());
40+
protected TemporaryBindingTrace(@NotNull BindingTrace trace, String debugName) {
41+
super(trace.getBindingContext(), debugName);
3642
this.trace = trace;
3743
}
3844

compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -283,12 +283,13 @@ private <D extends CallableDescriptor, F extends D> OverloadResolutionResults<F>
283283
return cachedResults;
284284
}
285285
}
286-
TemporaryBindingTrace delegatingBindingTrace = TemporaryBindingTrace.create(context.trace);
286+
TemporaryBindingTrace delegatingBindingTrace = TemporaryBindingTrace.create(context.trace, "trace to resolve call", context.call);
287287
BasicResolutionContext newContext = context.replaceTrace(delegatingBindingTrace);
288288
OverloadResolutionResults<F> results = doResolveCall(newContext,
289289
prioritizedTasks,
290290
callTransformer, reference);
291-
DelegatingBindingTrace cloneDelta = new DelegatingBindingTrace(new BindingTraceContext().getBindingContext());
291+
DelegatingBindingTrace cloneDelta = new DelegatingBindingTrace(
292+
new BindingTraceContext().getBindingContext(), "delta trace for caching resolve of", context.call);
292293
delegatingBindingTrace.addAllMyDataTo(cloneDelta);
293294
cacheResults(resolutionResultsSlice, context, results, cloneDelta);
294295

@@ -465,7 +466,7 @@ private <D extends CallableDescriptor, F extends D> OverloadResolutionResults<F>
465466
TemporaryBindingTrace traceForFirstNonemptyCandidateSet = null;
466467
OverloadResolutionResultsImpl<F> resultsForFirstNonemptyCandidateSet = null;
467468
for (ResolutionTask<D, F> task : prioritizedTasks) {
468-
TemporaryBindingTrace taskTrace = TemporaryBindingTrace.create(context.trace);
469+
TemporaryBindingTrace taskTrace = TemporaryBindingTrace.create(context.trace, "trace to resolve a task for", task.reference);
469470
OverloadResolutionResultsImpl<F> results = performResolutionGuardedForExtraFunctionLiteralArguments(task.withTrace(taskTrace),
470471
callTransformer, context.trace);
471472
if (results.isSuccess() || results.isAmbiguity()) {
@@ -530,8 +531,9 @@ private <D extends CallableDescriptor, F extends D> OverloadResolutionResultsImp
530531
// We have some candidates that failed for some reason
531532
// And we have a suspect: the function literal argument
532533
// Now, we try to remove this argument and see if it helps
533-
ResolutionTask<D, F> newTask = new ResolutionTask<D, F>(task.getCandidates(), task.reference, TemporaryBindingTrace.create(task.trace), task.scope,
534-
new DelegatingCall(task.call) {
534+
ResolutionTask<D, F> newTask = new ResolutionTask<D, F>(task.getCandidates(), task.reference,
535+
TemporaryBindingTrace.create(task.trace, "trace for resolution guarded for extra function literal arguments"),
536+
task.scope, new DelegatingCall(task.call) {
535537
@NotNull
536538
@Override
537539
public List<JetExpression> getFunctionLiteralArguments() {
@@ -554,7 +556,8 @@ private <D extends CallableDescriptor, F extends D> OverloadResolutionResultsImp
554556
@NotNull BindingTrace traceForResolutionCache) {
555557

556558
for (ResolutionCandidate<D> resolutionCandidate : task.getCandidates()) {
557-
TemporaryBindingTrace candidateTrace = TemporaryBindingTrace.create(task.trace);
559+
TemporaryBindingTrace candidateTrace = TemporaryBindingTrace.create(
560+
task.trace, "trace to resolve candidate", resolutionCandidate);
558561
Collection<CallResolutionContext<D, F>> contexts = callTransformer.createCallContexts(resolutionCandidate, task, candidateTrace);
559562
for (CallResolutionContext<D, F> context : contexts) {
560563

@@ -799,14 +802,17 @@ private boolean addConstraintForValueArgument(ValueArgument valueArgument,
799802
@NotNull ResolutionContext context) {
800803

801804
JetType effectiveExpectedType = getEffectiveExpectedType(valueParameterDescriptor, valueArgument);
802-
TemporaryBindingTrace traceForUnknown = TemporaryBindingTrace.create(context.trace);
803805
JetExpression argumentExpression = valueArgument.getArgumentExpression();
804-
JetType type = argumentExpression != null
805-
? expressionTypingServices.getType(
806-
context.scope, argumentExpression,
807-
substitutor.substitute(effectiveExpectedType, Variance.INVARIANT),
808-
context.dataFlowInfo, traceForUnknown)
809-
: null;
806+
JetType type;
807+
if (argumentExpression != null) {
808+
TemporaryBindingTrace traceForUnknown = TemporaryBindingTrace.create(
809+
context.trace, "transient trace to resolve argument", argumentExpression);
810+
type = expressionTypingServices.getType(context.scope, argumentExpression,
811+
substitutor.substitute(effectiveExpectedType, Variance.INVARIANT), context.dataFlowInfo, traceForUnknown);
812+
}
813+
else {
814+
type = null;
815+
}
810816
constraintSystem.addSupertypeConstraint(effectiveExpectedType, type, ConstraintPosition.getValueParameterPosition(
811817
valueParameterDescriptor.getIndex()));
812818
//todo no return
@@ -1149,7 +1155,7 @@ public OverloadResolutionResults<FunctionDescriptor> resolveExactSignature(@NotN
11491155
List<ResolutionCandidate<FunctionDescriptor>> candidates = findCandidatesByExactSignature(scope, receiver, name, parameterTypes);
11501156

11511157
BindingTraceContext trace = new BindingTraceContext();
1152-
TemporaryBindingTrace temporaryBindingTrace = TemporaryBindingTrace.create(trace);
1158+
TemporaryBindingTrace temporaryBindingTrace = TemporaryBindingTrace.create(trace, "trace for resolve exact signature call", name);
11531159
Set<ResolvedCallWithTrace<FunctionDescriptor>> calls = Sets.newLinkedHashSet();
11541160
for (ResolutionCandidate<FunctionDescriptor> candidate : candidates) {
11551161
ResolvedCallImpl<FunctionDescriptor> call = ResolvedCallImpl.create(candidate, temporaryBindingTrace);

compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallTransformer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public Collection<CallResolutionContext<CallableDescriptor, FunctionDescriptor>>
115115
private CallResolutionContext<CallableDescriptor, FunctionDescriptor> createContextWithChainedTrace(ResolutionCandidate<CallableDescriptor> candidate,
116116
Call call, TemporaryBindingTrace temporaryTrace, ResolutionTask<CallableDescriptor, FunctionDescriptor> task) {
117117

118-
ChainedTemporaryBindingTrace chainedTrace = ChainedTemporaryBindingTrace.create(temporaryTrace);
118+
ChainedTemporaryBindingTrace chainedTrace = ChainedTemporaryBindingTrace.create(temporaryTrace, "chained trace to resolve candidate", candidate);
119119
ResolvedCallImpl<CallableDescriptor> resolvedCall = ResolvedCallImpl.create(candidate, chainedTrace);
120120
return CallResolutionContext.create(resolvedCall, task, chainedTrace, task.tracing, call);
121121
}

compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSessionUtils.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ public boolean completeAnalysisNeeded(@NotNull PsiElement element) {
100100
@NotNull final ResolveSession resolveSession,
101101
@NotNull JetExpression expression
102102
) {
103-
final DelegatingBindingTrace trace = new DelegatingBindingTrace(resolveSession.getBindingContext());
103+
final DelegatingBindingTrace trace = new DelegatingBindingTrace(
104+
resolveSession.getBindingContext(), "trace to resolve expression", expression);
104105
JetFile file = (JetFile) expression.getContainingFile();
105106

106107
@SuppressWarnings("unchecked")
@@ -225,7 +226,8 @@ private static JetScope getExpressionResolutionScope(@NotNull ResolveSession res
225226
}
226227

227228
public static JetScope getExpressionMemberScope(@NotNull ResolveSession resolveSession, @NotNull JetExpression expression) {
228-
DelegatingBindingTrace trace = new DelegatingBindingTrace(resolveSession.getBindingContext());
229+
DelegatingBindingTrace trace = new DelegatingBindingTrace(
230+
resolveSession.getBindingContext(), "trace to resolve a member scope of expression", expression);
229231

230232
if (expression instanceof JetReferenceExpression) {
231233
QualifiedExpressionResolver qualifiedExpressionResolver = resolveSession.getInjector().getQualifiedExpressionResolver();

0 commit comments

Comments
 (0)