diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java index 95d54fd9810..93d3ae262c5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java @@ -44,6 +44,7 @@ import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.lang.types.expressions.DataFlowUtils; import org.jetbrains.jet.lang.types.expressions.DelegatedPropertyUtils; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices; +import org.jetbrains.jet.lang.types.expressions.LabelResolver; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lexer.JetTokens; import org.jetbrains.jet.util.Box; @@ -217,7 +218,7 @@ public class BodyResolver { if (type != null && supertype != null) { SimpleResolutionContext simpleResolutionContext = new SimpleResolutionContext( trace, scope, supertype, context.getOuterDataFlowInfo(), ExpressionPosition.FREE, ContextDependency.INDEPENDENT, - ResolutionResultsCacheImpl.create()); + ResolutionResultsCacheImpl.create(), LabelResolver.create()); DataFlowUtils.checkType(type, delegateExpression, simpleResolutionContext); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java index 991735d9120..b4547ef4002 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java @@ -47,6 +47,7 @@ import org.jetbrains.jet.lang.types.ErrorUtils; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils; +import org.jetbrains.jet.lang.types.expressions.LabelResolver; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lexer.JetTokens; @@ -143,7 +144,7 @@ public class CallResolver { ) { return resolveFunctionCall(BasicCallResolutionContext.create( trace, scope, call, expectedType, dataFlowInfo, ContextDependency.INDEPENDENT, CheckValueArgumentsMode.ENABLED, - ExpressionPosition.FREE, ResolutionResultsCacheImpl.create())); + ExpressionPosition.FREE, ResolutionResultsCacheImpl.create(), LabelResolver.create(), null)); } @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallTransformer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallTransformer.java index ebf320e3fd9..04899c5279f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallTransformer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallTransformer.java @@ -195,8 +195,7 @@ public class CallTransformer { DelegatingBindingTrace variableCallTrace = context.candidateCall.getTrace(); BasicCallResolutionContext basicCallResolutionContext = BasicCallResolutionContext.create( - variableCallTrace, context.scope, functionCall, context.expectedType, context.dataFlowInfo, - context.contextDependency, context.checkArguments, context.expressionPosition, context.resolutionResultsCache); + context.replaceBindingTrace(variableCallTrace), functionCall, context.checkArguments, context.dataFlowInfoForArguments); // 'invoke' call resolve OverloadResolutionResults results = callResolver.resolveCallWithGivenName(basicCallResolutionContext, task.reference, Name.identifier("invoke")); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/context/BasicCallResolutionContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/context/BasicCallResolutionContext.java index 09f18d0c8fb..20ae354d70d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/context/BasicCallResolutionContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/context/BasicCallResolutionContext.java @@ -24,6 +24,7 @@ import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.model.MutableDataFlowInfoForArguments; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.JetType; +import org.jetbrains.jet.lang.types.expressions.LabelResolver; public class BasicCallResolutionContext extends CallResolutionContext { @NotNull @@ -37,25 +38,12 @@ public class BasicCallResolutionContext extends CallResolutionContext extends CallResolutionContext> { public final ResolvedCallImpl candidateCall; @@ -46,10 +47,11 @@ public final class CallCandidateResolutionContext @NotNull CheckValueArgumentsMode checkArguments, @NotNull ExpressionPosition expressionPosition, @NotNull ResolutionResultsCache resolutionResultsCache, + @NotNull LabelResolver labelResolver, @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments ) { super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache, - dataFlowInfoForArguments); + labelResolver, dataFlowInfoForArguments); this.candidateCall = candidateCall; this.tracing = tracing; } @@ -61,7 +63,7 @@ public final class CallCandidateResolutionContext return new CallCandidateResolutionContext( candidateCall, tracing, trace, context.scope, call, context.expectedType, context.dataFlowInfo, context.contextDependency, context.checkArguments, - context.expressionPosition, context.resolutionResultsCache, context.dataFlowInfoForArguments); + context.expressionPosition, context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments); } public static CallCandidateResolutionContext create( @@ -76,7 +78,7 @@ public final class CallCandidateResolutionContext return new CallCandidateResolutionContext( candidateCall, tracing, context.trace, context.scope, context.call, context.expectedType, context.dataFlowInfo, context.contextDependency, context.checkArguments, context.expressionPosition, - context.resolutionResultsCache, context.dataFlowInfoForArguments); + context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments); } @Override @@ -87,11 +89,12 @@ public final class CallCandidateResolutionContext @NotNull JetType expectedType, @NotNull ExpressionPosition expressionPosition, @NotNull ContextDependency contextDependency, - @NotNull ResolutionResultsCache resolutionResultsCache + @NotNull ResolutionResultsCache resolutionResultsCache, + @NotNull LabelResolver labelResolver ) { return new CallCandidateResolutionContext( candidateCall, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, - checkArguments, expressionPosition, resolutionResultsCache, dataFlowInfoForArguments); + checkArguments, expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments); } @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/context/CallResolutionContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/context/CallResolutionContext.java index d6030859d73..1bcd07c4b79 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/context/CallResolutionContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/context/CallResolutionContext.java @@ -25,6 +25,7 @@ import org.jetbrains.jet.lang.resolve.calls.model.DataFlowInfoForArgumentsImpl; import org.jetbrains.jet.lang.resolve.calls.model.MutableDataFlowInfoForArguments; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.JetType; +import org.jetbrains.jet.lang.types.expressions.LabelResolver; public abstract class CallResolutionContext> extends ResolutionContext { public final Call call; @@ -42,10 +43,11 @@ public abstract class CallResolutionContext> { public final BindingTrace trace; @@ -32,6 +33,7 @@ public abstract class ResolutionContext { public SimpleResolutionContext( @@ -14,9 +15,10 @@ public class SimpleResolutionContext extends ResolutionContext extends C @NotNull TracingStrategy tracing, BindingTrace trace, JetScope scope, Call call, JetType expectedType, DataFlowInfo dataFlowInfo, ContextDependency contextDependency, CheckValueArgumentsMode checkArguments, ExpressionPosition expressionPosition, ResolutionResultsCache resolutionResultsCache, - @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments + @NotNull LabelResolver labelResolver, @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments ) { super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache, - dataFlowInfoForArguments); + labelResolver, dataFlowInfoForArguments); this.candidates = candidates; this.reference = reference; this.tracing = tracing; @@ -66,7 +67,7 @@ public class ResolutionTask extends C this(candidates, reference, tracing != null ? tracing : TracingStrategyImpl.create(reference, context.call), context.trace, context.scope, context.call, context.expectedType, context.dataFlowInfo, context.contextDependency, context.checkArguments, - context.expressionPosition, context.resolutionResultsCache, context.dataFlowInfoForArguments); + context.expressionPosition, context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments); } public ResolutionTask( @@ -106,11 +107,12 @@ public class ResolutionTask extends C @NotNull JetType expectedType, @NotNull ExpressionPosition expressionPosition, @NotNull ContextDependency contextDependency, - @NotNull ResolutionResultsCache resolutionResultsCache + @NotNull ResolutionResultsCache resolutionResultsCache, + @NotNull LabelResolver labelResolver ) { ResolutionTask newTask = new ResolutionTask( candidates, reference, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, - expressionPosition, resolutionResultsCache, dataFlowInfoForArguments); + expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments); newTask.setCheckingStrategy(checkingStrategy); return newTask; } @@ -123,7 +125,7 @@ public class ResolutionTask extends C public ResolutionTask replaceCall(@NotNull Call newCall) { return new ResolutionTask( candidates, reference, tracing, trace, scope, newCall, expectedType, dataFlowInfo, contextDependency, checkArguments, - expressionPosition, resolutionResultsCache, dataFlowInfoForArguments); + expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments); } public interface DescriptorCheckStrategy { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingContext.java index 0d534937795..f1a82361991 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingContext.java @@ -40,8 +40,9 @@ public class ExpressionTypingContext extends ResolutionContext> labeledElements = new HashMap>(); - public LabelResolver() {} + private LabelResolver() {} public void enterLabeledElement(@NotNull LabelName labelName, @NotNull JetExpression labeledExpression) { JetExpression cacheExpression = getCachingExpression(labeledExpression);