LabelResolver moved to ResolutionContext
(from ExpressionTypingContext)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -195,8 +195,7 @@ public class CallTransformer<D extends CallableDescriptor, F extends D> {
|
||||
|
||||
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<FunctionDescriptor> results = callResolver.resolveCallWithGivenName(basicCallResolutionContext, task.reference, Name.identifier("invoke"));
|
||||
|
||||
+13
-23
@@ -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<BasicCallResolutionContext> {
|
||||
@NotNull
|
||||
@@ -37,25 +38,12 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
|
||||
@NotNull CheckValueArgumentsMode checkArguments,
|
||||
@NotNull ExpressionPosition expressionPosition,
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||
@NotNull LabelResolver labelResolver,
|
||||
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments
|
||||
) {
|
||||
return new BasicCallResolutionContext(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments,
|
||||
expressionPosition, resolutionResultsCache, dataFlowInfoForArguments);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static BasicCallResolutionContext create(
|
||||
@NotNull BindingTrace trace,
|
||||
@NotNull JetScope scope,
|
||||
@NotNull Call call,
|
||||
@NotNull JetType expectedType,
|
||||
@NotNull DataFlowInfo dataFlowInfo,
|
||||
@NotNull ContextDependency contextDependency,
|
||||
@NotNull CheckValueArgumentsMode checkArguments,
|
||||
@NotNull ExpressionPosition expressionPosition,
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||
) {
|
||||
return new BasicCallResolutionContext(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache, null);
|
||||
return new BasicCallResolutionContext(
|
||||
trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition,
|
||||
resolutionResultsCache, labelResolver, dataFlowInfoForArguments);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -63,8 +51,9 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
|
||||
@NotNull ResolutionContext context, @NotNull Call call, @NotNull CheckValueArgumentsMode checkArguments,
|
||||
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments
|
||||
) {
|
||||
return create(context.trace, context.scope, call, context.expectedType, context.dataFlowInfo, context.contextDependency,
|
||||
checkArguments, context.expressionPosition, context.resolutionResultsCache, dataFlowInfoForArguments);
|
||||
return create(
|
||||
context.trace, context.scope, call, context.expectedType, context.dataFlowInfo, context.contextDependency, checkArguments,
|
||||
context.expressionPosition, context.resolutionResultsCache, context.labelResolver, dataFlowInfoForArguments);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -78,10 +67,10 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
|
||||
BindingTrace trace, JetScope scope, Call call, JetType expectedType,
|
||||
DataFlowInfo dataFlowInfo, ContextDependency contextDependency, CheckValueArgumentsMode checkArguments,
|
||||
ExpressionPosition expressionPosition, ResolutionResultsCache resolutionResultsCache,
|
||||
MutableDataFlowInfoForArguments dataFlowInfoForArguments
|
||||
LabelResolver labelResolver, MutableDataFlowInfoForArguments dataFlowInfoForArguments
|
||||
) {
|
||||
super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache,
|
||||
dataFlowInfoForArguments);
|
||||
labelResolver, dataFlowInfoForArguments);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -92,10 +81,11 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
|
||||
@NotNull JetType expectedType,
|
||||
@NotNull ExpressionPosition expressionPosition,
|
||||
@NotNull ContextDependency contextDependency,
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||
@NotNull LabelResolver labelResolver
|
||||
) {
|
||||
return create(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition,
|
||||
resolutionResultsCache, dataFlowInfoForArguments);
|
||||
resolutionResultsCache, labelResolver, dataFlowInfoForArguments);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+8
-5
@@ -28,6 +28,7 @@ import org.jetbrains.jet.lang.resolve.calls.tasks.TracingStrategy;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
import org.jetbrains.jet.lang.types.expressions.LabelResolver;
|
||||
|
||||
public final class CallCandidateResolutionContext<D extends CallableDescriptor> extends CallResolutionContext<CallCandidateResolutionContext<D>> {
|
||||
public final ResolvedCallImpl<D> candidateCall;
|
||||
@@ -46,10 +47,11 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
|
||||
@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<D extends CallableDescriptor>
|
||||
return new CallCandidateResolutionContext<D>(
|
||||
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 <D extends CallableDescriptor> CallCandidateResolutionContext<D> create(
|
||||
@@ -76,7 +78,7 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
|
||||
return new CallCandidateResolutionContext<D>(
|
||||
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<D extends CallableDescriptor>
|
||||
@NotNull JetType expectedType,
|
||||
@NotNull ExpressionPosition expressionPosition,
|
||||
@NotNull ContextDependency contextDependency,
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||
@NotNull LabelResolver labelResolver
|
||||
) {
|
||||
return new CallCandidateResolutionContext<D>(
|
||||
candidateCall, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency,
|
||||
checkArguments, expressionPosition, resolutionResultsCache, dataFlowInfoForArguments);
|
||||
checkArguments, expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-1
@@ -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<Context extends CallResolutionContext<Context>> extends ResolutionContext<Context> {
|
||||
public final Call call;
|
||||
@@ -42,10 +43,11 @@ public abstract class CallResolutionContext<Context extends CallResolutionContex
|
||||
@NotNull CheckValueArgumentsMode checkArguments,
|
||||
@NotNull ExpressionPosition expressionPosition,
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||
@NotNull LabelResolver labelResolver,
|
||||
@SuppressWarnings("NullableProblems")
|
||||
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments
|
||||
) {
|
||||
super(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache);
|
||||
super(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache, labelResolver);
|
||||
this.call = call;
|
||||
this.checkArguments = checkArguments;
|
||||
if (dataFlowInfoForArguments != null) {
|
||||
|
||||
+21
-9
@@ -23,6 +23,7 @@ import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
import org.jetbrains.jet.lang.types.TypeUtils;
|
||||
import org.jetbrains.jet.lang.types.expressions.LabelResolver;
|
||||
|
||||
public abstract class ResolutionContext<Context extends ResolutionContext<Context>> {
|
||||
public final BindingTrace trace;
|
||||
@@ -32,6 +33,7 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
|
||||
public final ExpressionPosition expressionPosition;
|
||||
public final ContextDependency contextDependency;
|
||||
public final ResolutionResultsCache resolutionResultsCache;
|
||||
public final LabelResolver labelResolver;
|
||||
|
||||
protected ResolutionContext(
|
||||
@NotNull BindingTrace trace,
|
||||
@@ -40,7 +42,8 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
|
||||
@NotNull DataFlowInfo dataFlowInfo,
|
||||
@NotNull ExpressionPosition expressionPosition,
|
||||
@NotNull ContextDependency contextDependency,
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||
@NotNull LabelResolver labelResolver
|
||||
) {
|
||||
this.trace = trace;
|
||||
this.scope = scope;
|
||||
@@ -49,6 +52,7 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
|
||||
this.expressionPosition = expressionPosition;
|
||||
this.contextDependency = contextDependency;
|
||||
this.resolutionResultsCache = resolutionResultsCache;
|
||||
this.labelResolver = labelResolver;
|
||||
}
|
||||
|
||||
protected abstract Context create(
|
||||
@@ -58,51 +62,59 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
|
||||
@NotNull JetType expectedType,
|
||||
@NotNull ExpressionPosition expressionPosition,
|
||||
@NotNull ContextDependency contextDependency,
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||
@NotNull LabelResolver labelResolver
|
||||
);
|
||||
|
||||
protected abstract Context self();
|
||||
|
||||
public Context replaceBindingTrace(@NotNull BindingTrace trace) {
|
||||
if (this.trace == trace) return self();
|
||||
return create(trace, scope, dataFlowInfo, expectedType, expressionPosition, contextDependency, resolutionResultsCache);
|
||||
return create(trace, scope, dataFlowInfo, expectedType, expressionPosition, contextDependency, resolutionResultsCache,
|
||||
labelResolver);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Context replaceExpressionPosition(@NotNull ExpressionPosition expressionPosition) {
|
||||
if (expressionPosition == this.expressionPosition) return self();
|
||||
return create(trace, scope, dataFlowInfo, expectedType, expressionPosition, contextDependency, resolutionResultsCache);
|
||||
return create(trace, scope, dataFlowInfo, expectedType, expressionPosition, contextDependency, resolutionResultsCache,
|
||||
labelResolver);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Context replaceDataFlowInfo(@NotNull DataFlowInfo newDataFlowInfo) {
|
||||
if (newDataFlowInfo == dataFlowInfo) return self();
|
||||
return create(trace, scope, newDataFlowInfo, expectedType, expressionPosition, contextDependency, resolutionResultsCache);
|
||||
return create(trace, scope, newDataFlowInfo, expectedType, expressionPosition, contextDependency, resolutionResultsCache,
|
||||
labelResolver);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Context replaceExpectedType(@Nullable JetType newExpectedType) {
|
||||
if (newExpectedType == null) return replaceExpectedType(TypeUtils.NO_EXPECTED_TYPE);
|
||||
if (expectedType == newExpectedType) return self();
|
||||
return create(trace, scope, dataFlowInfo, newExpectedType, expressionPosition, contextDependency, resolutionResultsCache);
|
||||
return create(trace, scope, dataFlowInfo, newExpectedType, expressionPosition, contextDependency, resolutionResultsCache,
|
||||
labelResolver);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Context replaceScope(@NotNull JetScope newScope) {
|
||||
if (newScope == scope) return self();
|
||||
return create(trace, newScope, dataFlowInfo, expectedType, expressionPosition, contextDependency, resolutionResultsCache);
|
||||
return create(trace, newScope, dataFlowInfo, expectedType, expressionPosition, contextDependency, resolutionResultsCache,
|
||||
labelResolver);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Context replaceContextDependency(@NotNull ContextDependency newContextDependency) {
|
||||
if (newContextDependency == contextDependency) return self();
|
||||
return create(trace, scope, dataFlowInfo, expectedType, expressionPosition, newContextDependency, resolutionResultsCache);
|
||||
return create(trace, scope, dataFlowInfo, expectedType, expressionPosition, newContextDependency, resolutionResultsCache,
|
||||
labelResolver);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Context replaceResolutionResultsCache(@NotNull ResolutionResultsCache newResolutionResultsCache) {
|
||||
if (newResolutionResultsCache == resolutionResultsCache) return self();
|
||||
return create(trace, scope, dataFlowInfo, expectedType, expressionPosition, contextDependency, newResolutionResultsCache);
|
||||
return create(trace, scope, dataFlowInfo, expectedType, expressionPosition, contextDependency, newResolutionResultsCache,
|
||||
labelResolver);
|
||||
}
|
||||
|
||||
public Context replaceTraceAndCache(@NotNull TemporaryTraceAndCache traceAndCache) {
|
||||
|
||||
+8
-4
@@ -5,6 +5,7 @@ import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
|
||||
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 SimpleResolutionContext extends ResolutionContext<SimpleResolutionContext> {
|
||||
public SimpleResolutionContext(
|
||||
@@ -14,9 +15,10 @@ public class SimpleResolutionContext extends ResolutionContext<SimpleResolutionC
|
||||
@NotNull DataFlowInfo dataFlowInfo,
|
||||
@NotNull ExpressionPosition expressionPosition,
|
||||
@NotNull ContextDependency contextDependency,
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||
@NotNull LabelResolver labelResolver
|
||||
) {
|
||||
super(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache);
|
||||
super(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache, labelResolver);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -27,9 +29,11 @@ public class SimpleResolutionContext extends ResolutionContext<SimpleResolutionC
|
||||
@NotNull JetType expectedType,
|
||||
@NotNull ExpressionPosition expressionPosition,
|
||||
@NotNull ContextDependency contextDependency,
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||
@NotNull LabelResolver labelResolver
|
||||
) {
|
||||
return new SimpleResolutionContext(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache);
|
||||
return new SimpleResolutionContext(
|
||||
trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache, labelResolver);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+8
-6
@@ -29,6 +29,7 @@ import org.jetbrains.jet.lang.resolve.calls.model.MutableDataFlowInfoForArgument
|
||||
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallWithTrace;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
import org.jetbrains.jet.lang.types.expressions.LabelResolver;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
@@ -48,10 +49,10 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> 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<D extends CallableDescriptor, F extends D> 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<D extends CallableDescriptor, F extends D> extends C
|
||||
@NotNull JetType expectedType,
|
||||
@NotNull ExpressionPosition expressionPosition,
|
||||
@NotNull ContextDependency contextDependency,
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||
@NotNull LabelResolver labelResolver
|
||||
) {
|
||||
ResolutionTask<D, F> newTask = new ResolutionTask<D, F>(
|
||||
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<D extends CallableDescriptor, F extends D> extends C
|
||||
public ResolutionTask<D, F> replaceCall(@NotNull Call newCall) {
|
||||
return new ResolutionTask<D, F>(
|
||||
candidates, reference, tracing, trace, scope, newCall, expectedType, dataFlowInfo, contextDependency, checkArguments,
|
||||
expressionPosition, resolutionResultsCache, dataFlowInfoForArguments);
|
||||
expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments);
|
||||
}
|
||||
|
||||
public interface DescriptorCheckStrategy {
|
||||
|
||||
+13
-13
@@ -40,8 +40,9 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
||||
@NotNull JetType expectedType,
|
||||
@NotNull ExpressionPosition expressionPosition
|
||||
) {
|
||||
return newContext(expressionTypingServices, new LabelResolver(), trace, scope, dataFlowInfo, expectedType, expressionPosition,
|
||||
ContextDependency.INDEPENDENT, ResolutionResultsCacheImpl.create());
|
||||
return newContext(expressionTypingServices, trace, scope, dataFlowInfo, expectedType, expressionPosition,
|
||||
ContextDependency.INDEPENDENT, ResolutionResultsCacheImpl.create(), LabelResolver.create()
|
||||
);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -49,22 +50,23 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
||||
@NotNull ExpressionTypingServices expressionTypingServices,
|
||||
@NotNull ResolutionContext resolutionContext
|
||||
) {
|
||||
return newContext(expressionTypingServices, new LabelResolver(), resolutionContext.trace, resolutionContext.scope,
|
||||
resolutionContext.dataFlowInfo, resolutionContext.expectedType, resolutionContext.expressionPosition,
|
||||
resolutionContext.contextDependency, resolutionContext.resolutionResultsCache);
|
||||
return newContext(expressionTypingServices, resolutionContext.trace, resolutionContext.scope, resolutionContext.dataFlowInfo,
|
||||
resolutionContext.expectedType, resolutionContext.expressionPosition, resolutionContext.contextDependency,
|
||||
resolutionContext.resolutionResultsCache, resolutionContext.labelResolver
|
||||
);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static ExpressionTypingContext newContext(
|
||||
@NotNull ExpressionTypingServices expressionTypingServices,
|
||||
@NotNull LabelResolver labelResolver,
|
||||
@NotNull BindingTrace trace,
|
||||
@NotNull JetScope scope,
|
||||
@NotNull DataFlowInfo dataFlowInfo,
|
||||
@NotNull JetType expectedType,
|
||||
@NotNull ExpressionPosition expressionPosition,
|
||||
@NotNull ContextDependency contextDependency,
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||
@NotNull LabelResolver labelResolver
|
||||
) {
|
||||
return new ExpressionTypingContext(
|
||||
expressionTypingServices, labelResolver, trace, scope, dataFlowInfo, expectedType, expressionPosition, contextDependency, resolutionResultsCache);
|
||||
@@ -72,8 +74,6 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
||||
|
||||
public final ExpressionTypingServices expressionTypingServices;
|
||||
|
||||
public final LabelResolver labelResolver;
|
||||
|
||||
private CompileTimeConstantResolver compileTimeConstantResolver;
|
||||
|
||||
private ExpressionTypingContext(
|
||||
@@ -87,9 +87,8 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
||||
@NotNull ContextDependency contextDependency,
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||
) {
|
||||
super(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache);
|
||||
super(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache, labelResolver);
|
||||
this.expressionTypingServices = expressionTypingServices;
|
||||
this.labelResolver = labelResolver;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -100,9 +99,10 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
||||
@NotNull JetType expectedType,
|
||||
@NotNull ExpressionPosition expressionPosition,
|
||||
@NotNull ContextDependency contextDependency,
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||
@NotNull LabelResolver labelResolver
|
||||
) {
|
||||
return new ExpressionTypingContext(expressionTypingServices, labelResolver, trace, scope, dataFlowInfo, expectedType,
|
||||
return new ExpressionTypingContext(expressionTypingServices, this.labelResolver, trace, scope, dataFlowInfo, expectedType,
|
||||
expressionPosition, contextDependency, resolutionResultsCache);
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -318,8 +318,9 @@ public class ExpressionTypingServices {
|
||||
}
|
||||
|
||||
private ExpressionTypingContext createContext(ExpressionTypingContext oldContext, BindingTrace trace, WritableScope scope, DataFlowInfo dataFlowInfo, JetType expectedType) {
|
||||
return ExpressionTypingContext.newContext(this, oldContext.labelResolver, trace, scope, dataFlowInfo, expectedType,
|
||||
oldContext.expressionPosition, oldContext.contextDependency, oldContext.resolutionResultsCache);
|
||||
return ExpressionTypingContext.newContext(this, trace, scope, dataFlowInfo, expectedType, oldContext.expressionPosition,
|
||||
oldContext.contextDependency, oldContext.resolutionResultsCache, oldContext.labelResolver
|
||||
);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -39,9 +39,14 @@ import static org.jetbrains.jet.lang.resolve.BindingContext.REFERENCE_TARGET;
|
||||
|
||||
public class LabelResolver {
|
||||
|
||||
@NotNull
|
||||
public static LabelResolver create() {
|
||||
return new LabelResolver();
|
||||
}
|
||||
|
||||
private final Map<LabelName, Stack<JetElement>> labeledElements = new HashMap<LabelName, Stack<JetElement>>();
|
||||
|
||||
public LabelResolver() {}
|
||||
private LabelResolver() {}
|
||||
|
||||
public void enterLabeledElement(@NotNull LabelName labelName, @NotNull JetExpression labeledExpression) {
|
||||
JetExpression cacheExpression = getCachingExpression(labeledExpression);
|
||||
|
||||
Reference in New Issue
Block a user