rename ResolveMode to ContextDependency
This commit is contained in:
@@ -27,7 +27,7 @@ import org.jetbrains.jet.lang.descriptors.impl.FunctionDescriptorUtil;
|
|||||||
import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
|
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.context.ResolveMode;
|
import org.jetbrains.jet.lang.resolve.calls.context.ContextDependency;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.context.ExpressionPosition;
|
import org.jetbrains.jet.lang.resolve.calls.context.ExpressionPosition;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.context.ResolutionResultsCacheImpl;
|
import org.jetbrains.jet.lang.resolve.calls.context.ResolutionResultsCacheImpl;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.context.SimpleResolutionContext;
|
import org.jetbrains.jet.lang.resolve.calls.context.SimpleResolutionContext;
|
||||||
@@ -216,7 +216,7 @@ public class BodyResolver {
|
|||||||
JetType type = typeInferrer.getType(scope, delegateExpression, NO_EXPECTED_TYPE, context.getOuterDataFlowInfo(), trace);
|
JetType type = typeInferrer.getType(scope, delegateExpression, NO_EXPECTED_TYPE, context.getOuterDataFlowInfo(), trace);
|
||||||
if (type != null && supertype != null) {
|
if (type != null && supertype != null) {
|
||||||
SimpleResolutionContext simpleResolutionContext = new SimpleResolutionContext(
|
SimpleResolutionContext simpleResolutionContext = new SimpleResolutionContext(
|
||||||
trace, scope, supertype, context.getOuterDataFlowInfo(), ExpressionPosition.FREE, ResolveMode.NORMAL,
|
trace, scope, supertype, context.getOuterDataFlowInfo(), ExpressionPosition.FREE, ContextDependency.INDEPENDENT,
|
||||||
ResolutionResultsCacheImpl.create());
|
ResolutionResultsCacheImpl.create());
|
||||||
DataFlowUtils.checkType(type, delegateExpression, simpleResolutionContext);
|
DataFlowUtils.checkType(type, delegateExpression, simpleResolutionContext);
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-4
@@ -28,11 +28,9 @@ import org.jetbrains.jet.lang.resolve.*;
|
|||||||
import org.jetbrains.jet.lang.resolve.calls.context.CallResolutionContext;
|
import org.jetbrains.jet.lang.resolve.calls.context.CallResolutionContext;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.context.CheckValueArgumentsMode;
|
import org.jetbrains.jet.lang.resolve.calls.context.CheckValueArgumentsMode;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.context.ResolutionContext;
|
import org.jetbrains.jet.lang.resolve.calls.context.ResolutionContext;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.context.ResolveMode;
|
import org.jetbrains.jet.lang.resolve.calls.context.ContextDependency;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.inference.ConstraintsUtil;
|
|
||||||
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallImpl;
|
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallImpl;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedValueArgument;
|
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedValueArgument;
|
||||||
import org.jetbrains.jet.lang.resolve.constants.*;
|
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||||
import org.jetbrains.jet.lang.types.*;
|
import org.jetbrains.jet.lang.types.*;
|
||||||
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
|
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
|
||||||
@@ -175,7 +173,8 @@ public class ArgumentTypeResolver {
|
|||||||
if (recordedTypeInfo != null) {
|
if (recordedTypeInfo != null) {
|
||||||
return recordedTypeInfo;
|
return recordedTypeInfo;
|
||||||
}
|
}
|
||||||
ResolutionContext newContext = context.replaceExpectedType(TypeUtils.UNKNOWN_EXPECTED_TYPE).replaceResolveMode(ResolveMode.NESTED_CALL);
|
ResolutionContext newContext = context.replaceExpectedType(TypeUtils.UNKNOWN_EXPECTED_TYPE).replaceContextDependency(
|
||||||
|
ContextDependency.DEPENDENT);
|
||||||
JetTypeInfo result = expressionTypingServices.getTypeInfo(expression, newContext);
|
JetTypeInfo result = expressionTypingServices.getTypeInfo(expression, newContext);
|
||||||
|
|
||||||
if (traceToCommitForCall != null) {
|
if (traceToCommitForCall != null) {
|
||||||
|
|||||||
+3
-4
@@ -24,7 +24,6 @@ import org.jetbrains.jet.lang.psi.*;
|
|||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||||
import org.jetbrains.jet.lang.resolve.TemporaryBindingTrace;
|
import org.jetbrains.jet.lang.resolve.TemporaryBindingTrace;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
|
|
||||||
import org.jetbrains.jet.lang.resolve.calls.context.*;
|
import org.jetbrains.jet.lang.resolve.calls.context.*;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
|
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallWithTrace;
|
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallWithTrace;
|
||||||
@@ -194,7 +193,7 @@ public class CallExpressionResolver {
|
|||||||
if (!results.isNothing()) {
|
if (!results.isNothing()) {
|
||||||
checkSuper(call.getExplicitReceiver(), results, context.trace, callExpression);
|
checkSuper(call.getExplicitReceiver(), results, context.trace, callExpression);
|
||||||
result[0] = true;
|
result[0] = true;
|
||||||
return OverloadResolutionResultsUtil.getResultingCall(results, context.resolveMode);
|
return OverloadResolutionResultsUtil.getResultingCall(results, context.contextDependency);
|
||||||
}
|
}
|
||||||
result[0] = false;
|
result[0] = false;
|
||||||
return null;
|
return null;
|
||||||
@@ -284,7 +283,7 @@ public class CallExpressionResolver {
|
|||||||
) {
|
) {
|
||||||
JetTypeInfo typeInfo = getCallExpressionTypeInfoWithoutFinalTypeCheck(
|
JetTypeInfo typeInfo = getCallExpressionTypeInfoWithoutFinalTypeCheck(
|
||||||
callExpression, receiver, callOperationNode, context);
|
callExpression, receiver, callOperationNode, context);
|
||||||
if (context.resolveMode == ResolveMode.TOP_LEVEL_CALL) {
|
if (context.contextDependency == ContextDependency.INDEPENDENT) {
|
||||||
DataFlowUtils.checkType(typeInfo.getType(), callExpression, context, typeInfo.getDataFlowInfo());
|
DataFlowUtils.checkType(typeInfo.getType(), callExpression, context, typeInfo.getDataFlowInfo());
|
||||||
}
|
}
|
||||||
return typeInfo;
|
return typeInfo;
|
||||||
@@ -407,7 +406,7 @@ public class CallExpressionResolver {
|
|||||||
context.trace.record(BindingContext.EXPRESSION_TYPE, selectorExpression, selectorReturnType);
|
context.trace.record(BindingContext.EXPRESSION_TYPE, selectorExpression, selectorReturnType);
|
||||||
}
|
}
|
||||||
JetTypeInfo typeInfo = JetTypeInfo.create(selectorReturnType, selectorReturnTypeInfo.getDataFlowInfo());
|
JetTypeInfo typeInfo = JetTypeInfo.create(selectorReturnType, selectorReturnTypeInfo.getDataFlowInfo());
|
||||||
if (context.resolveMode == ResolveMode.TOP_LEVEL_CALL) {
|
if (context.contextDependency == ContextDependency.INDEPENDENT) {
|
||||||
DataFlowUtils.checkType(typeInfo.getType(), expression, context, typeInfo.getDataFlowInfo());
|
DataFlowUtils.checkType(typeInfo.getType(), expression, context, typeInfo.getDataFlowInfo());
|
||||||
}
|
}
|
||||||
return typeInfo;
|
return typeInfo;
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ public class CallResolver {
|
|||||||
@NotNull DataFlowInfo dataFlowInfo
|
@NotNull DataFlowInfo dataFlowInfo
|
||||||
) {
|
) {
|
||||||
return resolveFunctionCall(BasicCallResolutionContext.create(
|
return resolveFunctionCall(BasicCallResolutionContext.create(
|
||||||
trace, scope, call, expectedType, dataFlowInfo, ResolveMode.TOP_LEVEL_CALL, CheckValueArgumentsMode.ENABLED,
|
trace, scope, call, expectedType, dataFlowInfo, ContextDependency.INDEPENDENT, CheckValueArgumentsMode.ENABLED,
|
||||||
ExpressionPosition.FREE, ResolutionResultsCacheImpl.create()));
|
ExpressionPosition.FREE, ResolutionResultsCacheImpl.create()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -319,7 +319,7 @@ public class CallResolver {
|
|||||||
}
|
}
|
||||||
traceToResolveCall.commit();
|
traceToResolveCall.commit();
|
||||||
|
|
||||||
if (prioritizedTasks.isEmpty() || context.resolveMode == ResolveMode.NESTED_CALL) {
|
if (prioritizedTasks.isEmpty() || context.contextDependency == ContextDependency.DEPENDENT) {
|
||||||
//do nothing
|
//do nothing
|
||||||
} else {
|
} else {
|
||||||
results = completeTypeInferenceDependentOnExpectedType(context, results, tracing);
|
results = completeTypeInferenceDependentOnExpectedType(context, results, tracing);
|
||||||
@@ -509,7 +509,7 @@ public class CallResolver {
|
|||||||
ImmutableSet<OverloadResolutionResults.Code> someFailed = ImmutableSet.of(MANY_FAILED_CANDIDATES,
|
ImmutableSet<OverloadResolutionResults.Code> someFailed = ImmutableSet.of(MANY_FAILED_CANDIDATES,
|
||||||
SINGLE_CANDIDATE_ARGUMENT_MISMATCH);
|
SINGLE_CANDIDATE_ARGUMENT_MISMATCH);
|
||||||
if (someFailed.contains(results.getResultCode()) && !task.call.getFunctionLiteralArguments().isEmpty()
|
if (someFailed.contains(results.getResultCode()) && !task.call.getFunctionLiteralArguments().isEmpty()
|
||||||
&& task.resolveMode == ResolveMode.TOP_LEVEL_CALL) { //For nested calls there are no such cases
|
&& task.contextDependency == ContextDependency.INDEPENDENT) { //For nested calls there are no such cases
|
||||||
// We have some candidates that failed for some reason
|
// We have some candidates that failed for some reason
|
||||||
// And we have a suspect: the function literal argument
|
// And we have a suspect: the function literal argument
|
||||||
// Now, we try to remove this argument and see if it helps
|
// Now, we try to remove this argument and see if it helps
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ public class CallTransformer<D extends CallableDescriptor, F extends D> {
|
|||||||
DelegatingBindingTrace variableCallTrace = context.candidateCall.getTrace();
|
DelegatingBindingTrace variableCallTrace = context.candidateCall.getTrace();
|
||||||
BasicCallResolutionContext basicCallResolutionContext = BasicCallResolutionContext.create(
|
BasicCallResolutionContext basicCallResolutionContext = BasicCallResolutionContext.create(
|
||||||
variableCallTrace, context.scope, functionCall, context.expectedType, context.dataFlowInfo,
|
variableCallTrace, context.scope, functionCall, context.expectedType, context.dataFlowInfo,
|
||||||
context.resolveMode, context.checkArguments, context.expressionPosition, context.resolutionResultsCache);
|
context.contextDependency, context.checkArguments, context.expressionPosition, context.resolutionResultsCache);
|
||||||
|
|
||||||
// 'invoke' call resolve
|
// 'invoke' call resolve
|
||||||
OverloadResolutionResults<FunctionDescriptor> results = callResolver.resolveCallWithGivenName(basicCallResolutionContext, task.reference, Name.identifier("invoke"));
|
OverloadResolutionResults<FunctionDescriptor> results = callResolver.resolveCallWithGivenName(basicCallResolutionContext, task.reference, Name.identifier("invoke"));
|
||||||
|
|||||||
@@ -363,7 +363,7 @@ public class CandidateResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
CallCandidateResolutionContext<FunctionDescriptor> contextForArgument = storedContextForArgument
|
CallCandidateResolutionContext<FunctionDescriptor> contextForArgument = storedContextForArgument
|
||||||
.replaceResolveMode(ResolveMode.TOP_LEVEL_CALL).replaceBindingTrace(context.trace).replaceExpectedType(expectedType);
|
.replaceContextDependency(ContextDependency.INDEPENDENT).replaceBindingTrace(context.trace).replaceExpectedType(expectedType);
|
||||||
JetType type;
|
JetType type;
|
||||||
if (contextForArgument.candidateCall.hasIncompleteTypeParameters()) {
|
if (contextForArgument.candidateCall.hasIncompleteTypeParameters()) {
|
||||||
type = completeTypeInferenceDependentOnExpectedTypeForCall(contextForArgument, true);
|
type = completeTypeInferenceDependentOnExpectedTypeForCall(contextForArgument, true);
|
||||||
|
|||||||
+9
-9
@@ -33,13 +33,13 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
|
|||||||
@NotNull Call call,
|
@NotNull Call call,
|
||||||
@NotNull JetType expectedType,
|
@NotNull JetType expectedType,
|
||||||
@NotNull DataFlowInfo dataFlowInfo,
|
@NotNull DataFlowInfo dataFlowInfo,
|
||||||
@NotNull ResolveMode resolveMode,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull CheckValueArgumentsMode checkArguments,
|
@NotNull CheckValueArgumentsMode checkArguments,
|
||||||
@NotNull ExpressionPosition expressionPosition,
|
@NotNull ExpressionPosition expressionPosition,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||||
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments
|
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments
|
||||||
) {
|
) {
|
||||||
return new BasicCallResolutionContext(trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments,
|
return new BasicCallResolutionContext(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments,
|
||||||
expressionPosition, resolutionResultsCache, dataFlowInfoForArguments);
|
expressionPosition, resolutionResultsCache, dataFlowInfoForArguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,12 +50,12 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
|
|||||||
@NotNull Call call,
|
@NotNull Call call,
|
||||||
@NotNull JetType expectedType,
|
@NotNull JetType expectedType,
|
||||||
@NotNull DataFlowInfo dataFlowInfo,
|
@NotNull DataFlowInfo dataFlowInfo,
|
||||||
@NotNull ResolveMode resolveMode,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull CheckValueArgumentsMode checkArguments,
|
@NotNull CheckValueArgumentsMode checkArguments,
|
||||||
@NotNull ExpressionPosition expressionPosition,
|
@NotNull ExpressionPosition expressionPosition,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||||
) {
|
) {
|
||||||
return new BasicCallResolutionContext(trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments, expressionPosition, resolutionResultsCache, null);
|
return new BasicCallResolutionContext(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -63,7 +63,7 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
|
|||||||
@NotNull ResolutionContext context, @NotNull Call call, @NotNull CheckValueArgumentsMode checkArguments,
|
@NotNull ResolutionContext context, @NotNull Call call, @NotNull CheckValueArgumentsMode checkArguments,
|
||||||
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments
|
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments
|
||||||
) {
|
) {
|
||||||
return create(context.trace, context.scope, call, context.expectedType, context.dataFlowInfo, context.resolveMode,
|
return create(context.trace, context.scope, call, context.expectedType, context.dataFlowInfo, context.contextDependency,
|
||||||
checkArguments, context.expressionPosition, context.resolutionResultsCache, dataFlowInfoForArguments);
|
checkArguments, context.expressionPosition, context.resolutionResultsCache, dataFlowInfoForArguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,11 +76,11 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
|
|||||||
|
|
||||||
private BasicCallResolutionContext(
|
private BasicCallResolutionContext(
|
||||||
BindingTrace trace, JetScope scope, Call call, JetType expectedType,
|
BindingTrace trace, JetScope scope, Call call, JetType expectedType,
|
||||||
DataFlowInfo dataFlowInfo, ResolveMode resolveMode, CheckValueArgumentsMode checkArguments,
|
DataFlowInfo dataFlowInfo, ContextDependency contextDependency, CheckValueArgumentsMode checkArguments,
|
||||||
ExpressionPosition expressionPosition, ResolutionResultsCache resolutionResultsCache,
|
ExpressionPosition expressionPosition, ResolutionResultsCache resolutionResultsCache,
|
||||||
MutableDataFlowInfoForArguments dataFlowInfoForArguments
|
MutableDataFlowInfoForArguments dataFlowInfoForArguments
|
||||||
) {
|
) {
|
||||||
super(trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments, expressionPosition, resolutionResultsCache,
|
super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache,
|
||||||
dataFlowInfoForArguments);
|
dataFlowInfoForArguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,10 +91,10 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
|
|||||||
@NotNull DataFlowInfo dataFlowInfo,
|
@NotNull DataFlowInfo dataFlowInfo,
|
||||||
@NotNull JetType expectedType,
|
@NotNull JetType expectedType,
|
||||||
@NotNull ExpressionPosition expressionPosition,
|
@NotNull ExpressionPosition expressionPosition,
|
||||||
@NotNull ResolveMode resolveMode,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||||
) {
|
) {
|
||||||
return create(trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments, expressionPosition,
|
return create(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition,
|
||||||
resolutionResultsCache);
|
resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
-8
@@ -40,12 +40,12 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
|
|||||||
@NotNull Call call,
|
@NotNull Call call,
|
||||||
@NotNull JetType expectedType,
|
@NotNull JetType expectedType,
|
||||||
@NotNull DataFlowInfo dataFlowInfo,
|
@NotNull DataFlowInfo dataFlowInfo,
|
||||||
@NotNull ResolveMode resolveMode,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull CheckValueArgumentsMode checkArguments,
|
@NotNull CheckValueArgumentsMode checkArguments,
|
||||||
@NotNull ExpressionPosition expressionPosition,
|
@NotNull ExpressionPosition expressionPosition,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||||
) {
|
) {
|
||||||
super(trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments, expressionPosition, resolutionResultsCache, null);
|
super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache, null);
|
||||||
this.candidateCall = candidateCall;
|
this.candidateCall = candidateCall;
|
||||||
this.tracing = tracing;
|
this.tracing = tracing;
|
||||||
}
|
}
|
||||||
@@ -56,7 +56,7 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
|
|||||||
candidateCall.setInitialDataFlowInfo(context.dataFlowInfo);
|
candidateCall.setInitialDataFlowInfo(context.dataFlowInfo);
|
||||||
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.resolveMode, context.checkArguments,
|
context.dataFlowInfo, context.contextDependency, context.checkArguments,
|
||||||
context.expressionPosition, context.resolutionResultsCache);
|
context.expressionPosition, context.resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,18 +69,18 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
|
|||||||
public static <D extends CallableDescriptor> CallCandidateResolutionContext<D> createForCallBeingAnalyzed(
|
public static <D extends CallableDescriptor> CallCandidateResolutionContext<D> createForCallBeingAnalyzed(
|
||||||
@NotNull ResolvedCallImpl<D> candidateCall, @NotNull BasicCallResolutionContext context, @NotNull TracingStrategy tracing
|
@NotNull ResolvedCallImpl<D> candidateCall, @NotNull BasicCallResolutionContext context, @NotNull TracingStrategy tracing
|
||||||
) {
|
) {
|
||||||
return createForCallBeingAnalyzed(candidateCall, context, context.call, context.resolveMode,
|
return createForCallBeingAnalyzed(candidateCall, context, context.call, context.contextDependency,
|
||||||
context.checkArguments, tracing, context.resolutionResultsCache);
|
context.checkArguments, tracing, context.resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <D extends CallableDescriptor> CallCandidateResolutionContext<D> createForCallBeingAnalyzed(
|
public static <D extends CallableDescriptor> CallCandidateResolutionContext<D> createForCallBeingAnalyzed(
|
||||||
@NotNull ResolvedCallImpl<D> candidateCall, @NotNull ResolutionContext context, @NotNull Call call,
|
@NotNull ResolvedCallImpl<D> candidateCall, @NotNull ResolutionContext context, @NotNull Call call,
|
||||||
@NotNull ResolveMode resolveMode, @NotNull CheckValueArgumentsMode checkArguments, @NotNull TracingStrategy tracing,
|
@NotNull ContextDependency contextDependency, @NotNull CheckValueArgumentsMode checkArguments, @NotNull TracingStrategy tracing,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||||
) {
|
) {
|
||||||
return new CallCandidateResolutionContext<D>(
|
return new CallCandidateResolutionContext<D>(
|
||||||
candidateCall, tracing, context.trace, context.scope, call, context.expectedType,
|
candidateCall, tracing, context.trace, context.scope, call, context.expectedType,
|
||||||
context.dataFlowInfo, resolveMode, checkArguments, context.expressionPosition, resolutionResultsCache);
|
context.dataFlowInfo, contextDependency, checkArguments, context.expressionPosition, resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -90,11 +90,11 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
|
|||||||
@NotNull DataFlowInfo dataFlowInfo,
|
@NotNull DataFlowInfo dataFlowInfo,
|
||||||
@NotNull JetType expectedType,
|
@NotNull JetType expectedType,
|
||||||
@NotNull ExpressionPosition expressionPosition,
|
@NotNull ExpressionPosition expressionPosition,
|
||||||
@NotNull ResolveMode resolveMode,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||||
) {
|
) {
|
||||||
return new CallCandidateResolutionContext<D>(
|
return new CallCandidateResolutionContext<D>(
|
||||||
candidateCall, tracing, trace, scope, call, expectedType, dataFlowInfo, resolveMode,
|
candidateCall, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency,
|
||||||
checkArguments, expressionPosition, resolutionResultsCache);
|
checkArguments, expressionPosition, resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -37,13 +37,13 @@ public abstract class CallResolutionContext<Context extends CallResolutionContex
|
|||||||
@NotNull Call call,
|
@NotNull Call call,
|
||||||
@NotNull JetType expectedType,
|
@NotNull JetType expectedType,
|
||||||
@NotNull DataFlowInfo dataFlowInfo,
|
@NotNull DataFlowInfo dataFlowInfo,
|
||||||
@NotNull ResolveMode resolveMode,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull CheckValueArgumentsMode checkArguments,
|
@NotNull CheckValueArgumentsMode checkArguments,
|
||||||
@NotNull ExpressionPosition expressionPosition,
|
@NotNull ExpressionPosition expressionPosition,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||||
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments
|
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments
|
||||||
) {
|
) {
|
||||||
super(trace, scope, expectedType, dataFlowInfo, expressionPosition, resolveMode, resolutionResultsCache);
|
super(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache);
|
||||||
this.call = call;
|
this.call = call;
|
||||||
this.checkArguments = checkArguments;
|
this.checkArguments = checkArguments;
|
||||||
if (dataFlowInfoForArguments != null) {
|
if (dataFlowInfoForArguments != null) {
|
||||||
|
|||||||
+3
-3
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.calls.context;
|
package org.jetbrains.jet.lang.resolve.calls.context;
|
||||||
|
|
||||||
public enum ResolveMode {
|
public enum ContextDependency {
|
||||||
TOP_LEVEL_CALL,
|
INDEPENDENT,
|
||||||
NESTED_CALL
|
DEPENDENT
|
||||||
}
|
}
|
||||||
+13
-13
@@ -30,7 +30,7 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
|
|||||||
public final JetType expectedType;
|
public final JetType expectedType;
|
||||||
public final DataFlowInfo dataFlowInfo;
|
public final DataFlowInfo dataFlowInfo;
|
||||||
public final ExpressionPosition expressionPosition;
|
public final ExpressionPosition expressionPosition;
|
||||||
public final ResolveMode resolveMode;
|
public final ContextDependency contextDependency;
|
||||||
public final ResolutionResultsCache resolutionResultsCache;
|
public final ResolutionResultsCache resolutionResultsCache;
|
||||||
|
|
||||||
protected ResolutionContext(
|
protected ResolutionContext(
|
||||||
@@ -39,7 +39,7 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
|
|||||||
@NotNull JetType expectedType,
|
@NotNull JetType expectedType,
|
||||||
@NotNull DataFlowInfo dataFlowInfo,
|
@NotNull DataFlowInfo dataFlowInfo,
|
||||||
@NotNull ExpressionPosition expressionPosition,
|
@NotNull ExpressionPosition expressionPosition,
|
||||||
@NotNull ResolveMode resolveMode,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||||
) {
|
) {
|
||||||
this.trace = trace;
|
this.trace = trace;
|
||||||
@@ -47,7 +47,7 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
|
|||||||
this.expectedType = expectedType;
|
this.expectedType = expectedType;
|
||||||
this.dataFlowInfo = dataFlowInfo;
|
this.dataFlowInfo = dataFlowInfo;
|
||||||
this.expressionPosition = expressionPosition;
|
this.expressionPosition = expressionPosition;
|
||||||
this.resolveMode = resolveMode;
|
this.contextDependency = contextDependency;
|
||||||
this.resolutionResultsCache = resolutionResultsCache;
|
this.resolutionResultsCache = resolutionResultsCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,7 +57,7 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
|
|||||||
@NotNull DataFlowInfo dataFlowInfo,
|
@NotNull DataFlowInfo dataFlowInfo,
|
||||||
@NotNull JetType expectedType,
|
@NotNull JetType expectedType,
|
||||||
@NotNull ExpressionPosition expressionPosition,
|
@NotNull ExpressionPosition expressionPosition,
|
||||||
@NotNull ResolveMode resolveMode,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -65,44 +65,44 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
|
|||||||
|
|
||||||
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, expressionPosition, resolveMode, resolutionResultsCache);
|
return create(trace, scope, dataFlowInfo, expectedType, expressionPosition, contextDependency, resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Context replaceExpressionPosition(@NotNull ExpressionPosition expressionPosition) {
|
public Context replaceExpressionPosition(@NotNull ExpressionPosition expressionPosition) {
|
||||||
if (expressionPosition == this.expressionPosition) return self();
|
if (expressionPosition == this.expressionPosition) return self();
|
||||||
return create(trace, scope, dataFlowInfo, expectedType, expressionPosition, resolveMode, resolutionResultsCache);
|
return create(trace, scope, dataFlowInfo, expectedType, expressionPosition, contextDependency, resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
@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, expressionPosition, resolveMode, resolutionResultsCache);
|
return create(trace, scope, newDataFlowInfo, expectedType, expressionPosition, contextDependency, resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
@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, expressionPosition, resolveMode, resolutionResultsCache);
|
return create(trace, scope, dataFlowInfo, newExpectedType, expressionPosition, contextDependency, resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
@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, expressionPosition, resolveMode, resolutionResultsCache);
|
return create(trace, newScope, dataFlowInfo, expectedType, expressionPosition, contextDependency, resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Context replaceResolveMode(@NotNull ResolveMode newResolveMode) {
|
public Context replaceContextDependency(@NotNull ContextDependency newContextDependency) {
|
||||||
if (newResolveMode == resolveMode) return self();
|
if (newContextDependency == contextDependency) return self();
|
||||||
return create(trace, scope, dataFlowInfo, expectedType, expressionPosition, newResolveMode, resolutionResultsCache);
|
return create(trace, scope, dataFlowInfo, expectedType, expressionPosition, newContextDependency, resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
@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, expressionPosition, resolveMode, newResolutionResultsCache);
|
return create(trace, scope, dataFlowInfo, expectedType, expressionPosition, contextDependency, newResolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Context replaceTraceAndCache(@NotNull TemporaryTraceAndCache traceAndCache) {
|
public Context replaceTraceAndCache(@NotNull TemporaryTraceAndCache traceAndCache) {
|
||||||
|
|||||||
+4
-4
@@ -13,10 +13,10 @@ public class SimpleResolutionContext extends ResolutionContext<SimpleResolutionC
|
|||||||
@NotNull JetType expectedType,
|
@NotNull JetType expectedType,
|
||||||
@NotNull DataFlowInfo dataFlowInfo,
|
@NotNull DataFlowInfo dataFlowInfo,
|
||||||
@NotNull ExpressionPosition expressionPosition,
|
@NotNull ExpressionPosition expressionPosition,
|
||||||
@NotNull ResolveMode resolveMode,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||||
) {
|
) {
|
||||||
super(trace, scope, expectedType, dataFlowInfo, expressionPosition, resolveMode, resolutionResultsCache);
|
super(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -26,10 +26,10 @@ public class SimpleResolutionContext extends ResolutionContext<SimpleResolutionC
|
|||||||
@NotNull DataFlowInfo dataFlowInfo,
|
@NotNull DataFlowInfo dataFlowInfo,
|
||||||
@NotNull JetType expectedType,
|
@NotNull JetType expectedType,
|
||||||
@NotNull ExpressionPosition expressionPosition,
|
@NotNull ExpressionPosition expressionPosition,
|
||||||
@NotNull ResolveMode resolveMode,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||||
) {
|
) {
|
||||||
return new SimpleResolutionContext(trace, scope, expectedType, dataFlowInfo, expressionPosition, resolveMode, resolutionResultsCache);
|
return new SimpleResolutionContext(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+5
-5
@@ -21,7 +21,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
|
import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallResolverUtil;
|
import org.jetbrains.jet.lang.resolve.calls.CallResolverUtil;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.context.ResolveMode;
|
import org.jetbrains.jet.lang.resolve.calls.context.ContextDependency;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
|
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallWithTrace;
|
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallWithTrace;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
@@ -40,18 +40,18 @@ public class OverloadResolutionResultsUtil {
|
|||||||
@Nullable
|
@Nullable
|
||||||
public static <D extends CallableDescriptor> JetType getResultingType(
|
public static <D extends CallableDescriptor> JetType getResultingType(
|
||||||
@NotNull OverloadResolutionResults<D> results,
|
@NotNull OverloadResolutionResults<D> results,
|
||||||
@NotNull ResolveMode resolveMode
|
@NotNull ContextDependency contextDependency
|
||||||
) {
|
) {
|
||||||
ResolvedCall<D> resultingCall = getResultingCall((OverloadResolutionResultsImpl<D>) results, resolveMode);
|
ResolvedCall<D> resultingCall = getResultingCall((OverloadResolutionResultsImpl<D>) results, contextDependency);
|
||||||
return resultingCall != null ? resultingCall.getResultingDescriptor().getReturnType() : null;
|
return resultingCall != null ? resultingCall.getResultingDescriptor().getReturnType() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public static <D extends CallableDescriptor> ResolvedCallWithTrace<D> getResultingCall(
|
public static <D extends CallableDescriptor> ResolvedCallWithTrace<D> getResultingCall(
|
||||||
@NotNull OverloadResolutionResultsImpl<D> results,
|
@NotNull OverloadResolutionResultsImpl<D> results,
|
||||||
@NotNull ResolveMode resolveMode
|
@NotNull ContextDependency contextDependency
|
||||||
) {
|
) {
|
||||||
if (results.isSingleResult() && resolveMode == ResolveMode.TOP_LEVEL_CALL) {
|
if (results.isSingleResult() && contextDependency == ContextDependency.INDEPENDENT) {
|
||||||
if (!CallResolverUtil.hasInferredReturnType(results.getResultingCall())) {
|
if (!CallResolverUtil.hasInferredReturnType(results.getResultingCall())) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-6
@@ -46,11 +46,11 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
|
|||||||
public ResolutionTask(
|
public ResolutionTask(
|
||||||
@NotNull Collection<ResolutionCandidate<D>> candidates, @NotNull JetReferenceExpression reference,
|
@NotNull Collection<ResolutionCandidate<D>> candidates, @NotNull JetReferenceExpression reference,
|
||||||
@NotNull TracingStrategy tracing, BindingTrace trace, JetScope scope, Call call, JetType expectedType,
|
@NotNull TracingStrategy tracing, BindingTrace trace, JetScope scope, Call call, JetType expectedType,
|
||||||
DataFlowInfo dataFlowInfo, ResolveMode resolveMode, CheckValueArgumentsMode checkArguments,
|
DataFlowInfo dataFlowInfo, ContextDependency contextDependency, CheckValueArgumentsMode checkArguments,
|
||||||
ExpressionPosition expressionPosition, ResolutionResultsCache resolutionResultsCache,
|
ExpressionPosition expressionPosition, ResolutionResultsCache resolutionResultsCache,
|
||||||
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments
|
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments
|
||||||
) {
|
) {
|
||||||
super(trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments, expressionPosition, resolutionResultsCache,
|
super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache,
|
||||||
dataFlowInfoForArguments);
|
dataFlowInfoForArguments);
|
||||||
this.candidates = candidates;
|
this.candidates = candidates;
|
||||||
this.reference = reference;
|
this.reference = reference;
|
||||||
@@ -65,7 +65,7 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
|
|||||||
) {
|
) {
|
||||||
this(candidates, reference, tracing != null ? tracing : TracingStrategyImpl.create(reference, context.call),
|
this(candidates, reference, tracing != null ? tracing : TracingStrategyImpl.create(reference, context.call),
|
||||||
context.trace, context.scope, context.call,
|
context.trace, context.scope, context.call,
|
||||||
context.expectedType, context.dataFlowInfo, context.resolveMode, context.checkArguments,
|
context.expectedType, context.dataFlowInfo, context.contextDependency, context.checkArguments,
|
||||||
context.expressionPosition, context.resolutionResultsCache, context.dataFlowInfoForArguments);
|
context.expressionPosition, context.resolutionResultsCache, context.dataFlowInfoForArguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,11 +105,11 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
|
|||||||
@NotNull DataFlowInfo dataFlowInfo,
|
@NotNull DataFlowInfo dataFlowInfo,
|
||||||
@NotNull JetType expectedType,
|
@NotNull JetType expectedType,
|
||||||
@NotNull ExpressionPosition expressionPosition,
|
@NotNull ExpressionPosition expressionPosition,
|
||||||
@NotNull ResolveMode resolveMode,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||||
) {
|
) {
|
||||||
ResolutionTask<D, F> newTask = new ResolutionTask<D, F>(
|
ResolutionTask<D, F> newTask = new ResolutionTask<D, F>(
|
||||||
candidates, reference, tracing, trace, scope, call, expectedType, dataFlowInfo, resolveMode, checkArguments,
|
candidates, reference, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments,
|
||||||
expressionPosition, resolutionResultsCache, dataFlowInfoForArguments);
|
expressionPosition, resolutionResultsCache, dataFlowInfoForArguments);
|
||||||
newTask.setCheckingStrategy(checkingStrategy);
|
newTask.setCheckingStrategy(checkingStrategy);
|
||||||
return newTask;
|
return newTask;
|
||||||
@@ -122,7 +122,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, reference, tracing, trace, scope, newCall, expectedType, dataFlowInfo, resolveMode, checkArguments,
|
candidates, reference, tracing, trace, scope, newCall, expectedType, dataFlowInfo, contextDependency, checkArguments,
|
||||||
expressionPosition, resolutionResultsCache, dataFlowInfoForArguments);
|
expressionPosition, resolutionResultsCache, dataFlowInfoForArguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -152,7 +152,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
@Override
|
@Override
|
||||||
public JetTypeInfo visitBinaryWithTypeRHSExpression(JetBinaryExpressionWithTypeRHS expression, ExpressionTypingContext context) {
|
public JetTypeInfo visitBinaryWithTypeRHSExpression(JetBinaryExpressionWithTypeRHS expression, ExpressionTypingContext context) {
|
||||||
ExpressionTypingContext contextWithNoExpectedType =
|
ExpressionTypingContext contextWithNoExpectedType =
|
||||||
context.replaceExpectedType(NO_EXPECTED_TYPE).replaceResolveMode(ResolveMode.TOP_LEVEL_CALL);
|
context.replaceExpectedType(NO_EXPECTED_TYPE).replaceContextDependency(ContextDependency.INDEPENDENT);
|
||||||
JetExpression left = expression.getLeft();
|
JetExpression left = expression.getLeft();
|
||||||
JetTypeReference right = expression.getRight();
|
JetTypeReference right = expression.getRight();
|
||||||
if (right == null) {
|
if (right == null) {
|
||||||
@@ -914,7 +914,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
else if (OperatorConventions.COMPARISON_OPERATIONS.contains(operationType)) {
|
else if (OperatorConventions.COMPARISON_OPERATIONS.contains(operationType)) {
|
||||||
//we don't complete 'compareTo' call, because we change its result type from 'Int' to 'Boolean'
|
//we don't complete 'compareTo' call, because we change its result type from 'Int' to 'Boolean'
|
||||||
JetTypeInfo typeInfo = getTypeInfoForBinaryCall(
|
JetTypeInfo typeInfo = getTypeInfoForBinaryCall(
|
||||||
context.scope, OperatorConventions.COMPARE_TO, context.replaceResolveMode(ResolveMode.TOP_LEVEL_CALL), expression);
|
context.scope, OperatorConventions.COMPARE_TO, context.replaceContextDependency(ContextDependency.INDEPENDENT), expression);
|
||||||
dataFlowInfo = typeInfo.getDataFlowInfo();
|
dataFlowInfo = typeInfo.getDataFlowInfo();
|
||||||
JetType compareToReturnType = typeInfo.getType();
|
JetType compareToReturnType = typeInfo.getType();
|
||||||
if (compareToReturnType != null && !ErrorUtils.isErrorType(compareToReturnType)) {
|
if (compareToReturnType != null && !ErrorUtils.isErrorType(compareToReturnType)) {
|
||||||
@@ -1064,7 +1064,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
CallMaker.makeCallWithExpressions(callElement, receiver, null, operationSign, Collections.singletonList(left)),
|
CallMaker.makeCallWithExpressions(callElement, receiver, null, operationSign, Collections.singletonList(left)),
|
||||||
operationSign,
|
operationSign,
|
||||||
OperatorConventions.CONTAINS);
|
OperatorConventions.CONTAINS);
|
||||||
JetType containsType = OverloadResolutionResultsUtil.getResultingType(resolutionResult, context.resolveMode);
|
JetType containsType = OverloadResolutionResultsUtil.getResultingType(resolutionResult, context.contextDependency);
|
||||||
ensureBooleanResult(operationSign, OperatorConventions.CONTAINS, containsType, context);
|
ensureBooleanResult(operationSign, OperatorConventions.CONTAINS, containsType, context);
|
||||||
|
|
||||||
if (left != null) {
|
if (left != null) {
|
||||||
@@ -1174,7 +1174,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
dataFlowInfo = facade.getTypeInfo(right, contextWithDataFlow).getDataFlowInfo();
|
dataFlowInfo = facade.getTypeInfo(right, contextWithDataFlow).getDataFlowInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
return JetTypeInfo.create(OverloadResolutionResultsUtil.getResultingType(resolutionResults, context.resolveMode), dataFlowInfo);
|
return JetTypeInfo.create(OverloadResolutionResultsUtil.getResultingType(resolutionResults, context.contextDependency), dataFlowInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
+8
-8
@@ -41,7 +41,7 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
|||||||
@NotNull ExpressionPosition expressionPosition
|
@NotNull ExpressionPosition expressionPosition
|
||||||
) {
|
) {
|
||||||
return newContext(expressionTypingServices, new LabelResolver(), trace, scope, dataFlowInfo, expectedType, expressionPosition,
|
return newContext(expressionTypingServices, new LabelResolver(), trace, scope, dataFlowInfo, expectedType, expressionPosition,
|
||||||
ResolveMode.TOP_LEVEL_CALL, ResolutionResultsCacheImpl.create());
|
ContextDependency.INDEPENDENT, ResolutionResultsCacheImpl.create());
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -51,7 +51,7 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
|||||||
) {
|
) {
|
||||||
return newContext(expressionTypingServices, new LabelResolver(), resolutionContext.trace, resolutionContext.scope,
|
return newContext(expressionTypingServices, new LabelResolver(), resolutionContext.trace, resolutionContext.scope,
|
||||||
resolutionContext.dataFlowInfo, resolutionContext.expectedType, resolutionContext.expressionPosition,
|
resolutionContext.dataFlowInfo, resolutionContext.expectedType, resolutionContext.expressionPosition,
|
||||||
resolutionContext.resolveMode, resolutionContext.resolutionResultsCache);
|
resolutionContext.contextDependency, resolutionContext.resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -63,11 +63,11 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
|||||||
@NotNull DataFlowInfo dataFlowInfo,
|
@NotNull DataFlowInfo dataFlowInfo,
|
||||||
@NotNull JetType expectedType,
|
@NotNull JetType expectedType,
|
||||||
@NotNull ExpressionPosition expressionPosition,
|
@NotNull ExpressionPosition expressionPosition,
|
||||||
@NotNull ResolveMode resolveMode,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||||
) {
|
) {
|
||||||
return new ExpressionTypingContext(
|
return new ExpressionTypingContext(
|
||||||
expressionTypingServices, labelResolver, trace, scope, dataFlowInfo, expectedType, expressionPosition, resolveMode, resolutionResultsCache);
|
expressionTypingServices, labelResolver, trace, scope, dataFlowInfo, expectedType, expressionPosition, contextDependency, resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final ExpressionTypingServices expressionTypingServices;
|
public final ExpressionTypingServices expressionTypingServices;
|
||||||
@@ -84,10 +84,10 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
|||||||
@NotNull DataFlowInfo dataFlowInfo,
|
@NotNull DataFlowInfo dataFlowInfo,
|
||||||
@NotNull JetType expectedType,
|
@NotNull JetType expectedType,
|
||||||
@NotNull ExpressionPosition expressionPosition,
|
@NotNull ExpressionPosition expressionPosition,
|
||||||
@NotNull ResolveMode resolveMode,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||||
) {
|
) {
|
||||||
super(trace, scope, expectedType, dataFlowInfo, expressionPosition, resolveMode, resolutionResultsCache);
|
super(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache);
|
||||||
this.expressionTypingServices = expressionTypingServices;
|
this.expressionTypingServices = expressionTypingServices;
|
||||||
this.labelResolver = labelResolver;
|
this.labelResolver = labelResolver;
|
||||||
}
|
}
|
||||||
@@ -99,11 +99,11 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
|||||||
@NotNull DataFlowInfo dataFlowInfo,
|
@NotNull DataFlowInfo dataFlowInfo,
|
||||||
@NotNull JetType expectedType,
|
@NotNull JetType expectedType,
|
||||||
@NotNull ExpressionPosition expressionPosition,
|
@NotNull ExpressionPosition expressionPosition,
|
||||||
@NotNull ResolveMode resolveMode,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache
|
@NotNull ResolutionResultsCache resolutionResultsCache
|
||||||
) {
|
) {
|
||||||
return new ExpressionTypingContext(expressionTypingServices, labelResolver, trace, scope, dataFlowInfo, expectedType,
|
return new ExpressionTypingContext(expressionTypingServices, labelResolver, trace, scope, dataFlowInfo, expectedType,
|
||||||
expressionPosition, resolveMode, resolutionResultsCache);
|
expressionPosition, contextDependency, resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-1
@@ -332,7 +332,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(this, oldContext.labelResolver, trace, scope, dataFlowInfo, expectedType,
|
return ExpressionTypingContext.newContext(this, oldContext.labelResolver, trace, scope, dataFlowInfo, expectedType,
|
||||||
oldContext.expressionPosition, oldContext.resolveMode, oldContext.resolutionResultsCache);
|
oldContext.expressionPosition, oldContext.contextDependency, oldContext.resolutionResultsCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|||||||
+2
-2
@@ -244,7 +244,7 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito
|
|||||||
OverloadResolutionResults<FunctionDescriptor> assignmentOperationDescriptors = BasicExpressionTypingVisitor.getResolutionResultsForBinaryCall(
|
OverloadResolutionResults<FunctionDescriptor> assignmentOperationDescriptors = BasicExpressionTypingVisitor.getResolutionResultsForBinaryCall(
|
||||||
scope, name, context.replaceTraceAndCache(temporaryForAssignmentOperation), expression, receiver);
|
scope, name, context.replaceTraceAndCache(temporaryForAssignmentOperation), expression, receiver);
|
||||||
JetType assignmentOperationType = OverloadResolutionResultsUtil.getResultingType(assignmentOperationDescriptors,
|
JetType assignmentOperationType = OverloadResolutionResultsUtil.getResultingType(assignmentOperationDescriptors,
|
||||||
context.resolveMode);
|
context.contextDependency);
|
||||||
|
|
||||||
// Check for '+'
|
// Check for '+'
|
||||||
Name counterpartName = OperatorConventions.BINARY_OPERATION_NAMES.get(OperatorConventions.ASSIGNMENT_OPERATION_COUNTERPARTS.get(operationType));
|
Name counterpartName = OperatorConventions.BINARY_OPERATION_NAMES.get(OperatorConventions.ASSIGNMENT_OPERATION_COUNTERPARTS.get(operationType));
|
||||||
@@ -252,7 +252,7 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito
|
|||||||
context, "trace to check binary operation like '+' for", expression);
|
context, "trace to check binary operation like '+' for", expression);
|
||||||
OverloadResolutionResults<FunctionDescriptor> binaryOperationDescriptors = BasicExpressionTypingVisitor.getResolutionResultsForBinaryCall(
|
OverloadResolutionResults<FunctionDescriptor> binaryOperationDescriptors = BasicExpressionTypingVisitor.getResolutionResultsForBinaryCall(
|
||||||
scope, counterpartName, context.replaceTraceAndCache(temporaryForBinaryOperation), expression, receiver);
|
scope, counterpartName, context.replaceTraceAndCache(temporaryForBinaryOperation), expression, receiver);
|
||||||
JetType binaryOperationType = OverloadResolutionResultsUtil.getResultingType(binaryOperationDescriptors, context.resolveMode);
|
JetType binaryOperationType = OverloadResolutionResultsUtil.getResultingType(binaryOperationDescriptors, context.contextDependency);
|
||||||
|
|
||||||
JetType type = assignmentOperationType != null ? assignmentOperationType : binaryOperationType;
|
JetType type = assignmentOperationType != null ? assignmentOperationType : binaryOperationType;
|
||||||
if (assignmentOperationDescriptors.isSuccess() && binaryOperationDescriptors.isSuccess()) {
|
if (assignmentOperationDescriptors.isSuccess() && binaryOperationDescriptors.isSuccess()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user