added DataFlowInfoForArguments param to contexts

This commit is contained in:
Svetlana Isakova
2013-07-30 19:32:03 +04:00
parent 99bb6f13b5
commit e37af4de67
4 changed files with 53 additions and 15 deletions
@@ -17,13 +17,32 @@
package org.jetbrains.jet.lang.resolve.calls.context;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.Call;
import org.jetbrains.jet.lang.resolve.BindingTrace;
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;
public class BasicCallResolutionContext extends CallResolutionContext<BasicCallResolutionContext> {
@NotNull
public static BasicCallResolutionContext create(
@NotNull BindingTrace trace,
@NotNull JetScope scope,
@NotNull Call call,
@NotNull JetType expectedType,
@NotNull DataFlowInfo dataFlowInfo,
@NotNull ResolveMode resolveMode,
@NotNull CheckValueArgumentsMode checkArguments,
@NotNull ExpressionPosition expressionPosition,
@NotNull ResolutionResultsCache resolutionResultsCache,
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments
) {
return new BasicCallResolutionContext(trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments,
expressionPosition, resolutionResultsCache, dataFlowInfoForArguments);
}
@NotNull
public static BasicCallResolutionContext create(
@NotNull BindingTrace trace,
@@ -36,22 +55,33 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
@NotNull ExpressionPosition expressionPosition,
@NotNull ResolutionResultsCache resolutionResultsCache
) {
return new BasicCallResolutionContext(trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments, expressionPosition, resolutionResultsCache);
return new BasicCallResolutionContext(trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments, expressionPosition, resolutionResultsCache, null);
}
@NotNull
public static BasicCallResolutionContext create(
@NotNull ResolutionContext context, @NotNull Call call, @NotNull CheckValueArgumentsMode checkArguments,
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments
) {
return create(context.trace, context.scope, call, context.expectedType, context.dataFlowInfo, context.resolveMode,
checkArguments, context.expressionPosition, context.resolutionResultsCache, dataFlowInfoForArguments);
}
@NotNull
public static BasicCallResolutionContext create(
@NotNull ResolutionContext context, @NotNull Call call, @NotNull CheckValueArgumentsMode checkArguments
) {
return create(context.trace, context.scope, call, context.expectedType, context.dataFlowInfo, context.resolveMode,
checkArguments, context.expressionPosition, context.resolutionResultsCache);
return create(context, call, checkArguments, null);
}
private BasicCallResolutionContext(
BindingTrace trace, JetScope scope, Call call, JetType expectedType,
DataFlowInfo dataFlowInfo, ResolveMode resolveMode, CheckValueArgumentsMode checkArguments,
ExpressionPosition expressionPosition, ResolutionResultsCache resolutionResultsCache
ExpressionPosition expressionPosition, ResolutionResultsCache resolutionResultsCache,
MutableDataFlowInfoForArguments dataFlowInfoForArguments
) {
super(trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments, expressionPosition, resolutionResultsCache);
super(trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments, expressionPosition, resolutionResultsCache,
dataFlowInfoForArguments);
}
@Override
@@ -45,7 +45,7 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
@NotNull ExpressionPosition expressionPosition,
@NotNull ResolutionResultsCache resolutionResultsCache
) {
super(trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments, expressionPosition, resolutionResultsCache);
super(trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments, expressionPosition, resolutionResultsCache, null);
this.candidateCall = candidateCall;
this.tracing = tracing;
}
@@ -17,6 +17,7 @@
package org.jetbrains.jet.lang.resolve.calls.context;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.Call;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
@@ -39,16 +40,20 @@ public abstract class CallResolutionContext<Context extends CallResolutionContex
@NotNull ResolveMode resolveMode,
@NotNull CheckValueArgumentsMode checkArguments,
@NotNull ExpressionPosition expressionPosition,
@NotNull ResolutionResultsCache resolutionResultsCache
@NotNull ResolutionResultsCache resolutionResultsCache,
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments
) {
super(trace, scope, expectedType, dataFlowInfo, expressionPosition, resolveMode, resolutionResultsCache);
this.call = call;
this.checkArguments = checkArguments;
if (checkArguments == CheckValueArgumentsMode.ENABLED) {
dataFlowInfoForArguments = new DataFlowInfoForArgumentsImpl(call);
if (dataFlowInfoForArguments != null) {
this.dataFlowInfoForArguments = dataFlowInfoForArguments;
}
else if (checkArguments == CheckValueArgumentsMode.ENABLED) {
this.dataFlowInfoForArguments = new DataFlowInfoForArgumentsImpl(call);
}
else {
dataFlowInfoForArguments = MutableDataFlowInfoForArguments.WITHOUT_ARGUMENTS_CHECK;
this.dataFlowInfoForArguments = MutableDataFlowInfoForArguments.WITHOUT_ARGUMENTS_CHECK;
}
}
@@ -25,6 +25,7 @@ import org.jetbrains.jet.lang.psi.JetReferenceExpression;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
import org.jetbrains.jet.lang.resolve.calls.context.*;
import org.jetbrains.jet.lang.resolve.calls.model.MutableDataFlowInfoForArguments;
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallWithTrace;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.JetType;
@@ -46,9 +47,11 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
@NotNull Collection<ResolutionCandidate<D>> candidates, @NotNull JetReferenceExpression reference,
@NotNull TracingStrategy tracing, BindingTrace trace, JetScope scope, Call call, JetType expectedType,
DataFlowInfo dataFlowInfo, ResolveMode resolveMode, CheckValueArgumentsMode checkArguments,
ExpressionPosition expressionPosition, ResolutionResultsCache resolutionResultsCache
ExpressionPosition expressionPosition, ResolutionResultsCache resolutionResultsCache,
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments
) {
super(trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments, expressionPosition, resolutionResultsCache);
super(trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments, expressionPosition, resolutionResultsCache,
dataFlowInfoForArguments);
this.candidates = candidates;
this.reference = reference;
this.tracing = tracing;
@@ -63,7 +66,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.resolveMode, context.checkArguments,
context.expressionPosition, context.resolutionResultsCache);
context.expressionPosition, context.resolutionResultsCache, context.dataFlowInfoForArguments);
}
public ResolutionTask(
@@ -107,7 +110,7 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
) {
ResolutionTask<D, F> newTask = new ResolutionTask<D, F>(
candidates, reference, tracing, trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments,
expressionPosition, resolutionResultsCache);
expressionPosition, resolutionResultsCache, dataFlowInfoForArguments);
newTask.setCheckingStrategy(checkingStrategy);
return newTask;
}
@@ -120,7 +123,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, resolveMode, checkArguments,
expressionPosition, resolutionResultsCache);
expressionPosition, resolutionResultsCache, dataFlowInfoForArguments);
}
public interface DescriptorCheckStrategy {