Made LabelResolver a singleton

This commit is contained in:
Svetlana Isakova
2014-05-13 15:06:17 +04:00
parent f3f2bf5123
commit 2952ff558a
11 changed files with 40 additions and 64 deletions
@@ -25,7 +25,6 @@ import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
import org.jetbrains.jet.lang.resolve.calls.model.MutableDataFlowInfoForArguments; import org.jetbrains.jet.lang.resolve.calls.model.MutableDataFlowInfoForArguments;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.expressions.LabelResolver;
public class BasicCallResolutionContext extends CallResolutionContext<BasicCallResolutionContext> { public class BasicCallResolutionContext extends CallResolutionContext<BasicCallResolutionContext> {
private BasicCallResolutionContext( private BasicCallResolutionContext(
@@ -37,13 +36,12 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull CheckValueArgumentsMode checkArguments, @NotNull CheckValueArgumentsMode checkArguments,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver,
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments, @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
@NotNull CallResolverExtension callResolverExtension, @NotNull CallResolverExtension callResolverExtension,
boolean isAnnotationContext, boolean isAnnotationContext,
boolean collectAllCandidates boolean collectAllCandidates
) { ) {
super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache, labelResolver, super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache,
dataFlowInfoForArguments, callResolverExtension, isAnnotationContext, collectAllCandidates); dataFlowInfoForArguments, callResolverExtension, isAnnotationContext, collectAllCandidates);
} }
@@ -60,7 +58,7 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
boolean isAnnotationContext boolean isAnnotationContext
) { ) {
return new BasicCallResolutionContext(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, return new BasicCallResolutionContext(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments,
new ResolutionResultsCacheImpl(), LabelResolver.create(), null, new ResolutionResultsCacheImpl(), null,
callResolverExtension, isAnnotationContext, false); callResolverExtension, isAnnotationContext, false);
} }
@@ -70,7 +68,7 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments
) { ) {
return new BasicCallResolutionContext(context.trace, context.scope, call, context.expectedType, context.dataFlowInfo, context.contextDependency, checkArguments, return new BasicCallResolutionContext(context.trace, context.scope, call, context.expectedType, context.dataFlowInfo, context.contextDependency, checkArguments,
context.resolutionResultsCache, context.labelResolver, dataFlowInfoForArguments, context.callResolverExtension, context.resolutionResultsCache, dataFlowInfoForArguments, context.callResolverExtension,
context.isAnnotationContext, context.collectAllCandidates); context.isAnnotationContext, context.collectAllCandidates);
} }
@@ -89,17 +87,16 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
@NotNull JetType expectedType, @NotNull JetType expectedType,
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver,
boolean collectAllCandidates boolean collectAllCandidates
) { ) {
return new BasicCallResolutionContext( return new BasicCallResolutionContext(
trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache, trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache,
labelResolver, dataFlowInfoForArguments, callResolverExtension, isAnnotationContext, collectAllCandidates); dataFlowInfoForArguments, callResolverExtension, isAnnotationContext, collectAllCandidates);
} }
public BasicCallResolutionContext replaceCall(@NotNull Call newCall) { public BasicCallResolutionContext replaceCall(@NotNull Call newCall) {
return new BasicCallResolutionContext( return new BasicCallResolutionContext(
trace, scope, newCall, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache, trace, scope, newCall, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache,
labelResolver, dataFlowInfoForArguments, callResolverExtension, isAnnotationContext, collectAllCandidates); dataFlowInfoForArguments, callResolverExtension, isAnnotationContext, collectAllCandidates);
} }
} }
@@ -29,7 +29,6 @@ import org.jetbrains.jet.lang.resolve.calls.tasks.TracingStrategy;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
import org.jetbrains.jet.lang.types.JetType; 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 class CallCandidateResolutionContext<D extends CallableDescriptor> extends CallResolutionContext<CallCandidateResolutionContext<D>> {
public final MutableResolvedCall<D> candidateCall; public final MutableResolvedCall<D> candidateCall;
@@ -47,14 +46,13 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull CheckValueArgumentsMode checkArguments, @NotNull CheckValueArgumentsMode checkArguments,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver,
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments, @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
@NotNull CallResolverExtension callResolverExtension, @NotNull CallResolverExtension callResolverExtension,
@NotNull ReceiverValue explicitExtensionReceiverForInvoke, @NotNull ReceiverValue explicitExtensionReceiverForInvoke,
boolean isAnnotationContext, boolean isAnnotationContext,
boolean collectAllCandidates boolean collectAllCandidates
) { ) {
super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache, labelResolver, super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache,
dataFlowInfoForArguments, callResolverExtension, isAnnotationContext, collectAllCandidates); dataFlowInfoForArguments, callResolverExtension, isAnnotationContext, collectAllCandidates);
this.candidateCall = candidateCall; this.candidateCall = candidateCall;
this.tracing = tracing; this.tracing = tracing;
@@ -69,7 +67,7 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
return new CallCandidateResolutionContext<D>( return new CallCandidateResolutionContext<D>(
candidateCall, tracing, trace, context.scope, call, context.expectedType, candidateCall, tracing, trace, context.scope, call, context.expectedType,
context.dataFlowInfo, context.contextDependency, context.checkArguments, context.dataFlowInfo, context.contextDependency, context.checkArguments,
context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments, context.resolutionResultsCache, context.dataFlowInfoForArguments,
context.callResolverExtension, explicitExtensionReceiverForInvoke, context.isAnnotationContext, context.collectAllCandidates); context.callResolverExtension, explicitExtensionReceiverForInvoke, context.isAnnotationContext, context.collectAllCandidates);
} }
@@ -92,7 +90,7 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
return new CallCandidateResolutionContext<D>( return new CallCandidateResolutionContext<D>(
candidateCall, tracing, context.trace, context.scope, context.call, context.expectedType, candidateCall, tracing, context.trace, context.scope, context.call, context.expectedType,
context.dataFlowInfo, context.contextDependency, context.checkArguments, context.resolutionResultsCache, context.dataFlowInfo, context.contextDependency, context.checkArguments, context.resolutionResultsCache,
context.labelResolver, context.dataFlowInfoForArguments, context.callResolverExtension, ReceiverValue.NO_RECEIVER, context.dataFlowInfoForArguments, context.callResolverExtension, ReceiverValue.NO_RECEIVER,
context.isAnnotationContext, context.collectAllCandidates); context.isAnnotationContext, context.collectAllCandidates);
} }
@@ -104,12 +102,11 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
@NotNull JetType expectedType, @NotNull JetType expectedType,
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver,
boolean collectAllCandidates boolean collectAllCandidates
) { ) {
return new CallCandidateResolutionContext<D>( return new CallCandidateResolutionContext<D>(
candidateCall, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, candidateCall, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments,
resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension, explicitExtensionReceiverForInvoke, resolutionResultsCache, dataFlowInfoForArguments, callResolverExtension, explicitExtensionReceiverForInvoke,
isAnnotationContext, collectAllCandidates); isAnnotationContext, collectAllCandidates);
} }
} }
@@ -26,7 +26,6 @@ import org.jetbrains.jet.lang.resolve.calls.model.DataFlowInfoForArgumentsImpl;
import org.jetbrains.jet.lang.resolve.calls.model.MutableDataFlowInfoForArguments; import org.jetbrains.jet.lang.resolve.calls.model.MutableDataFlowInfoForArguments;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.JetType; 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 abstract class CallResolutionContext<Context extends CallResolutionContext<Context>> extends ResolutionContext<Context> {
public final Call call; public final Call call;
@@ -43,14 +42,13 @@ public abstract class CallResolutionContext<Context extends CallResolutionContex
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull CheckValueArgumentsMode checkArguments, @NotNull CheckValueArgumentsMode checkArguments,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver,
@SuppressWarnings("NullableProblems") @SuppressWarnings("NullableProblems")
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments, @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
@NotNull CallResolverExtension callResolverExtension, @NotNull CallResolverExtension callResolverExtension,
boolean isAnnotationContext, boolean isAnnotationContext,
boolean collectAllCandidates boolean collectAllCandidates
) { ) {
super(trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache, labelResolver, callResolverExtension, super(trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache, callResolverExtension,
isAnnotationContext, collectAllCandidates); isAnnotationContext, collectAllCandidates);
this.call = call; this.call = call;
this.checkArguments = checkArguments; this.checkArguments = checkArguments;
@@ -24,7 +24,6 @@ import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.TypeUtils; import org.jetbrains.jet.lang.types.TypeUtils;
import org.jetbrains.jet.lang.types.expressions.LabelResolver;
public abstract class ResolutionContext<Context extends ResolutionContext<Context>> { public abstract class ResolutionContext<Context extends ResolutionContext<Context>> {
public final BindingTrace trace; public final BindingTrace trace;
@@ -33,7 +32,6 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
public final DataFlowInfo dataFlowInfo; public final DataFlowInfo dataFlowInfo;
public final ContextDependency contextDependency; public final ContextDependency contextDependency;
public final ResolutionResultsCache resolutionResultsCache; public final ResolutionResultsCache resolutionResultsCache;
public final LabelResolver labelResolver;
public final CallResolverExtension callResolverExtension; public final CallResolverExtension callResolverExtension;
public final boolean isAnnotationContext; public final boolean isAnnotationContext;
public final boolean collectAllCandidates; public final boolean collectAllCandidates;
@@ -45,7 +43,6 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
@NotNull DataFlowInfo dataFlowInfo, @NotNull DataFlowInfo dataFlowInfo,
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver,
@NotNull CallResolverExtension callResolverExtension, @NotNull CallResolverExtension callResolverExtension,
boolean isAnnotationContext, boolean isAnnotationContext,
boolean collectAllCandidates boolean collectAllCandidates
@@ -56,7 +53,6 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
this.dataFlowInfo = dataFlowInfo; this.dataFlowInfo = dataFlowInfo;
this.contextDependency = contextDependency; this.contextDependency = contextDependency;
this.resolutionResultsCache = resolutionResultsCache; this.resolutionResultsCache = resolutionResultsCache;
this.labelResolver = labelResolver;
this.callResolverExtension = callResolverExtension; this.callResolverExtension = callResolverExtension;
this.isAnnotationContext = isAnnotationContext; this.isAnnotationContext = isAnnotationContext;
this.collectAllCandidates = collectAllCandidates; this.collectAllCandidates = collectAllCandidates;
@@ -69,7 +65,6 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
@NotNull JetType expectedType, @NotNull JetType expectedType,
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver,
boolean collectAllCandidates boolean collectAllCandidates
); );
@@ -82,38 +77,38 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
@NotNull @NotNull
public Context replaceBindingTrace(@NotNull BindingTrace trace) { public Context replaceBindingTrace(@NotNull BindingTrace trace) {
if (this.trace == trace) return self(); if (this.trace == trace) return self();
return create(trace, scope, dataFlowInfo, expectedType, contextDependency, resolutionResultsCache, labelResolver, collectAllCandidates); return create(trace, scope, dataFlowInfo, expectedType, contextDependency, resolutionResultsCache, collectAllCandidates);
} }
@NotNull @NotNull
public Context replaceDataFlowInfo(@NotNull DataFlowInfo newDataFlowInfo) { public Context replaceDataFlowInfo(@NotNull DataFlowInfo newDataFlowInfo) {
if (newDataFlowInfo == dataFlowInfo) return self(); if (newDataFlowInfo == dataFlowInfo) return self();
return create(trace, scope, newDataFlowInfo, expectedType, contextDependency, resolutionResultsCache, labelResolver, collectAllCandidates); return create(trace, scope, newDataFlowInfo, expectedType, contextDependency, resolutionResultsCache, collectAllCandidates);
} }
@NotNull @NotNull
public Context replaceExpectedType(@Nullable JetType newExpectedType) { public Context replaceExpectedType(@Nullable JetType newExpectedType) {
if (newExpectedType == null) return replaceExpectedType(TypeUtils.NO_EXPECTED_TYPE); if (newExpectedType == null) return replaceExpectedType(TypeUtils.NO_EXPECTED_TYPE);
if (expectedType == newExpectedType) return self(); if (expectedType == newExpectedType) return self();
return create(trace, scope, dataFlowInfo, newExpectedType, contextDependency, resolutionResultsCache, labelResolver, collectAllCandidates); return create(trace, scope, dataFlowInfo, newExpectedType, contextDependency, resolutionResultsCache, collectAllCandidates);
} }
@NotNull @NotNull
public Context replaceScope(@NotNull JetScope newScope) { public Context replaceScope(@NotNull JetScope newScope) {
if (newScope == scope) return self(); if (newScope == scope) return self();
return create(trace, newScope, dataFlowInfo, expectedType, contextDependency, resolutionResultsCache, labelResolver, collectAllCandidates); return create(trace, newScope, dataFlowInfo, expectedType, contextDependency, resolutionResultsCache, collectAllCandidates);
} }
@NotNull @NotNull
public Context replaceContextDependency(@NotNull ContextDependency newContextDependency) { public Context replaceContextDependency(@NotNull ContextDependency newContextDependency) {
if (newContextDependency == contextDependency) return self(); if (newContextDependency == contextDependency) return self();
return create(trace, scope, dataFlowInfo, expectedType, newContextDependency, resolutionResultsCache, labelResolver, collectAllCandidates); return create(trace, scope, dataFlowInfo, expectedType, newContextDependency, resolutionResultsCache, collectAllCandidates);
} }
@NotNull @NotNull
public Context replaceResolutionResultsCache(@NotNull ResolutionResultsCache newResolutionResultsCache) { public Context replaceResolutionResultsCache(@NotNull ResolutionResultsCache newResolutionResultsCache) {
if (newResolutionResultsCache == resolutionResultsCache) return self(); if (newResolutionResultsCache == resolutionResultsCache) return self();
return create(trace, scope, dataFlowInfo, expectedType, contextDependency, newResolutionResultsCache, labelResolver, collectAllCandidates); return create(trace, scope, dataFlowInfo, expectedType, contextDependency, newResolutionResultsCache, collectAllCandidates);
} }
@NotNull @NotNull
@@ -123,6 +118,6 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
@NotNull @NotNull
public Context replaceCollectAllCandidates(boolean newCollectAllCandidates) { public Context replaceCollectAllCandidates(boolean newCollectAllCandidates) {
return create(trace, scope, dataFlowInfo, expectedType, contextDependency, resolutionResultsCache, labelResolver, newCollectAllCandidates); return create(trace, scope, dataFlowInfo, expectedType, contextDependency, resolutionResultsCache, newCollectAllCandidates);
} }
} }
@@ -22,7 +22,6 @@ import org.jetbrains.jet.lang.resolve.calls.CallResolverExtension;
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.expressions.LabelResolver;
public class SimpleResolutionContext extends ResolutionContext<SimpleResolutionContext> { public class SimpleResolutionContext extends ResolutionContext<SimpleResolutionContext> {
private SimpleResolutionContext( private SimpleResolutionContext(
@@ -32,12 +31,11 @@ public class SimpleResolutionContext extends ResolutionContext<SimpleResolutionC
@NotNull DataFlowInfo dataFlowInfo, @NotNull DataFlowInfo dataFlowInfo,
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver,
@NotNull CallResolverExtension callResolverExtension, @NotNull CallResolverExtension callResolverExtension,
boolean isAnnotationContext, boolean isAnnotationContext,
boolean collectAllCandidates boolean collectAllCandidates
) { ) {
super(trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache, labelResolver, callResolverExtension, super(trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache, callResolverExtension,
isAnnotationContext, collectAllCandidates); isAnnotationContext, collectAllCandidates);
} }
@@ -50,7 +48,7 @@ public class SimpleResolutionContext extends ResolutionContext<SimpleResolutionC
@NotNull CallResolverExtension callResolverExtension @NotNull CallResolverExtension callResolverExtension
) { ) {
this(trace, scope, expectedType, dataFlowInfo, contextDependency, new ResolutionResultsCacheImpl(), this(trace, scope, expectedType, dataFlowInfo, contextDependency, new ResolutionResultsCacheImpl(),
LabelResolver.create(), callResolverExtension, false, false); callResolverExtension, false, false);
} }
@Override @Override
@@ -61,11 +59,10 @@ public class SimpleResolutionContext extends ResolutionContext<SimpleResolutionC
@NotNull JetType expectedType, @NotNull JetType expectedType,
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver,
boolean collectAllCandidates boolean collectAllCandidates
) { ) {
return new SimpleResolutionContext( return new SimpleResolutionContext(
trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache, labelResolver, callResolverExtension, trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache, callResolverExtension,
isAnnotationContext, collectAllCandidates); isAnnotationContext, collectAllCandidates);
} }
} }
@@ -30,7 +30,6 @@ import org.jetbrains.jet.lang.resolve.calls.model.MutableDataFlowInfoForArgument
import org.jetbrains.jet.lang.resolve.calls.model.MutableResolvedCall; import org.jetbrains.jet.lang.resolve.calls.model.MutableResolvedCall;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.expressions.LabelResolver;
import java.util.Collection; import java.util.Collection;
@@ -54,7 +53,6 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull CheckValueArgumentsMode checkArguments, @NotNull CheckValueArgumentsMode checkArguments,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver,
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments, @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
@NotNull CallResolverExtension callResolverExtension, @NotNull CallResolverExtension callResolverExtension,
@NotNull Collection<MutableResolvedCall<F>> resolvedCalls, @NotNull Collection<MutableResolvedCall<F>> resolvedCalls,
@@ -62,7 +60,7 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
boolean collectAllCandidates boolean collectAllCandidates
) { ) {
super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache, super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache,
labelResolver, dataFlowInfoForArguments, callResolverExtension, isAnnotationContext, collectAllCandidates); dataFlowInfoForArguments, callResolverExtension, isAnnotationContext, collectAllCandidates);
this.candidates = candidates; this.candidates = candidates;
this.resolvedCalls = resolvedCalls; this.resolvedCalls = resolvedCalls;
this.tracing = tracing; this.tracing = tracing;
@@ -76,7 +74,7 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
this(candidates, tracing, this(candidates, tracing,
context.trace, context.scope, context.call, context.trace, context.scope, context.call,
context.expectedType, context.dataFlowInfo, context.contextDependency, context.checkArguments, context.expectedType, context.dataFlowInfo, context.contextDependency, context.checkArguments,
context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments, context.resolutionResultsCache, context.dataFlowInfoForArguments,
context.callResolverExtension, Lists.<MutableResolvedCall<F>>newArrayList(), context.isAnnotationContext, context.collectAllCandidates); context.callResolverExtension, Lists.<MutableResolvedCall<F>>newArrayList(), context.isAnnotationContext, context.collectAllCandidates);
} }
@@ -121,12 +119,11 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
@NotNull JetType expectedType, @NotNull JetType expectedType,
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver,
boolean collectAllCandidates boolean collectAllCandidates
) { ) {
ResolutionTask<D, F> newTask = new ResolutionTask<D, F>( ResolutionTask<D, F> newTask = new ResolutionTask<D, F>(
candidates, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, candidates, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments,
resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension, resolvedCalls, isAnnotationContext, resolutionResultsCache, dataFlowInfoForArguments, callResolverExtension, resolvedCalls, isAnnotationContext,
collectAllCandidates); collectAllCandidates);
newTask.setCheckingStrategy(checkingStrategy); newTask.setCheckingStrategy(checkingStrategy);
return newTask; return newTask;
@@ -135,7 +132,7 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
public ResolutionTask<D, F> replaceCall(@NotNull Call newCall) { public ResolutionTask<D, F> replaceCall(@NotNull Call newCall) {
return new ResolutionTask<D, F>( return new ResolutionTask<D, F>(
candidates, tracing, trace, scope, newCall, expectedType, dataFlowInfo, contextDependency, checkArguments, candidates, tracing, trace, scope, newCall, expectedType, dataFlowInfo, contextDependency, checkArguments,
resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension, resolvedCalls, resolutionResultsCache, dataFlowInfoForArguments, callResolverExtension, resolvedCalls,
isAnnotationContext, collectAllCandidates); isAnnotationContext, collectAllCandidates);
} }
@@ -376,8 +376,9 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
) { ) {
String labelName = expression.getLabelName(); String labelName = expression.getLabelName();
if (labelName != null) { if (labelName != null) {
LabelResolver.LabeledReceiverResolutionResult resolutionResult = context.labelResolver.resolveThisLabel( LabelResolver.LabeledReceiverResolutionResult resolutionResult =
expression.getInstanceReference(), expression.getTargetLabel(), context, Name.identifierForLabel(labelName)); LabelResolver.INSTANCE.resolveThisLabel(
expression.getInstanceReference(), expression.getTargetLabel(), context, Name.identifierForLabel(labelName));
if (onlyClassReceivers && resolutionResult.success()) { if (onlyClassReceivers && resolutionResult.success()) {
if (!isDeclaredInClass(resolutionResult.getReceiverParameterDescriptor())) { if (!isDeclaredInClass(resolutionResult.getReceiverParameterDescriptor())) {
return LabelResolver.LabeledReceiverResolutionResult.labelResolutionSuccess(NO_RECEIVER_PARAMETER); return LabelResolver.LabeledReceiverResolutionResult.labelResolutionSuccess(NO_RECEIVER_PARAMETER);
@@ -437,7 +437,7 @@ public class ControlStructureTypingVisitor extends ExpressionTypingVisitor {
@Override @Override
public JetTypeInfo visitReturnExpression(@NotNull JetReturnExpression expression, ExpressionTypingContext context) { public JetTypeInfo visitReturnExpression(@NotNull JetReturnExpression expression, ExpressionTypingContext context) {
JetElement labelTargetElement = context.labelResolver.resolveLabel(expression, context); JetElement labelTargetElement = LabelResolver.INSTANCE.resolveLabel(expression, context);
JetExpression returnedExpression = expression.getReturnedExpression(); JetExpression returnedExpression = expression.getReturnedExpression();
@@ -509,13 +509,13 @@ public class ControlStructureTypingVisitor extends ExpressionTypingVisitor {
@Override @Override
public JetTypeInfo visitBreakExpression(@NotNull JetBreakExpression expression, ExpressionTypingContext context) { public JetTypeInfo visitBreakExpression(@NotNull JetBreakExpression expression, ExpressionTypingContext context) {
context.labelResolver.resolveLabel(expression, context); LabelResolver.INSTANCE.resolveLabel(expression, context);
return DataFlowUtils.checkType(KotlinBuiltIns.getInstance().getNothingType(), expression, context, context.dataFlowInfo); return DataFlowUtils.checkType(KotlinBuiltIns.getInstance().getNothingType(), expression, context, context.dataFlowInfo);
} }
@Override @Override
public JetTypeInfo visitContinueExpression(@NotNull JetContinueExpression expression, ExpressionTypingContext context) { public JetTypeInfo visitContinueExpression(@NotNull JetContinueExpression expression, ExpressionTypingContext context) {
context.labelResolver.resolveLabel(expression, context); LabelResolver.INSTANCE.resolveLabel(expression, context);
return DataFlowUtils.checkType(KotlinBuiltIns.getInstance().getNothingType(), expression, context, context.dataFlowInfo); return DataFlowUtils.checkType(KotlinBuiltIns.getInstance().getNothingType(), expression, context, context.dataFlowInfo);
} }
@@ -40,16 +40,16 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
@NotNull JetType expectedType @NotNull JetType expectedType
) { ) {
return newContext(trace, scope, dataFlowInfo, expectedType, return newContext(trace, scope, dataFlowInfo, expectedType,
ContextDependency.INDEPENDENT, new ResolutionResultsCacheImpl(), LabelResolver.create(), ContextDependency.INDEPENDENT, new ResolutionResultsCacheImpl(),
expressionTypingServices.createExtension(scope, false), false); expressionTypingServices.createExtension(scope, false), false);
} }
@NotNull @NotNull
public static ExpressionTypingContext newContext(@NotNull ResolutionContext context) { public static ExpressionTypingContext newContext(@NotNull ResolutionContext context) {
return new ExpressionTypingContext( return new ExpressionTypingContext(
context.labelResolver, context.trace, context.scope, context.scope.getContainingDeclaration(), context.trace, context.scope, context.scope.getContainingDeclaration(), context.dataFlowInfo, context.expectedType,
context.dataFlowInfo, context.expectedType, context.contextDependency, context.resolutionResultsCache, context.contextDependency, context.resolutionResultsCache, context.callResolverExtension, context.isAnnotationContext,
context.callResolverExtension, context.isAnnotationContext, context.collectAllCandidates context.collectAllCandidates
); );
} }
@@ -61,12 +61,11 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
@NotNull JetType expectedType, @NotNull JetType expectedType,
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver,
@NotNull CallResolverExtension callResolverExtension, @NotNull CallResolverExtension callResolverExtension,
boolean isAnnotationContext boolean isAnnotationContext
) { ) {
return new ExpressionTypingContext( return new ExpressionTypingContext(
labelResolver, trace, scope, scope.getContainingDeclaration(), dataFlowInfo, expectedType, contextDependency, trace, scope, scope.getContainingDeclaration(), dataFlowInfo, expectedType, contextDependency,
resolutionResultsCache, callResolverExtension, isAnnotationContext, false); resolutionResultsCache, callResolverExtension, isAnnotationContext, false);
} }
@@ -74,7 +73,6 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
private CompileTimeConstantChecker compileTimeConstantChecker; private CompileTimeConstantChecker compileTimeConstantChecker;
private ExpressionTypingContext( private ExpressionTypingContext(
@NotNull LabelResolver labelResolver,
@NotNull BindingTrace trace, @NotNull BindingTrace trace,
@NotNull JetScope scope, @NotNull JetScope scope,
@NotNull DeclarationDescriptor containingDeclaration, @NotNull DeclarationDescriptor containingDeclaration,
@@ -86,7 +84,7 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
boolean isAnnotationContext, boolean isAnnotationContext,
boolean collectAllCandidates boolean collectAllCandidates
) { ) {
super(trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache, labelResolver, callResolverExtension, super(trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache, callResolverExtension,
isAnnotationContext, collectAllCandidates); isAnnotationContext, collectAllCandidates);
this.containingDeclaration = containingDeclaration; this.containingDeclaration = containingDeclaration;
} }
@@ -99,10 +97,9 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
@NotNull JetType expectedType, @NotNull JetType expectedType,
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver,
boolean collectAllCandidates boolean collectAllCandidates
) { ) {
return new ExpressionTypingContext(this.labelResolver, trace, scope, containingDeclaration, dataFlowInfo, return new ExpressionTypingContext(trace, scope, containingDeclaration, dataFlowInfo,
expectedType, contextDependency, resolutionResultsCache, callResolverExtension, expectedType, contextDependency, resolutionResultsCache, callResolverExtension,
isAnnotationContext, collectAllCandidates); isAnnotationContext, collectAllCandidates);
} }
@@ -347,7 +347,7 @@ public class ExpressionTypingServices {
private ExpressionTypingContext createContext(ExpressionTypingContext oldContext, BindingTrace trace, WritableScope scope, DataFlowInfo dataFlowInfo, JetType expectedType) { private ExpressionTypingContext createContext(ExpressionTypingContext oldContext, BindingTrace trace, WritableScope scope, DataFlowInfo dataFlowInfo, JetType expectedType) {
return ExpressionTypingContext.newContext( return ExpressionTypingContext.newContext(
trace, scope, dataFlowInfo, expectedType, oldContext.contextDependency, oldContext.resolutionResultsCache, trace, scope, dataFlowInfo, expectedType, oldContext.contextDependency, oldContext.resolutionResultsCache,
oldContext.labelResolver, oldContext.callResolverExtension, oldContext.isAnnotationContext); oldContext.callResolverExtension, oldContext.isAnnotationContext);
} }
@Nullable @Nullable
@@ -37,10 +37,7 @@ import static org.jetbrains.jet.lang.resolve.BindingContext.REFERENCE_TARGET;
public class LabelResolver { public class LabelResolver {
@NotNull public static LabelResolver INSTANCE = new LabelResolver();
public static LabelResolver create() {
return new LabelResolver();
}
private LabelResolver() {} private LabelResolver() {}