ResolveMode enum to {TOP_LEVEL_CALL, NESTED_CALL}
 completeValueArgumentsInference to completeNestedCallsInference
This commit is contained in:
Svetlana Isakova
2013-02-07 19:41:19 +04:00
parent c069eedc9b
commit ff4a9fdab3
8 changed files with 23 additions and 23 deletions
@@ -181,11 +181,11 @@ public class ArgumentTypeResolver {
if (expression instanceof JetCallExpression) {
result = callExpressionResolver.getCallExpressionTypeInfoForCall(
(JetCallExpression) expression, ReceiverValue.NO_RECEIVER, null,
context.replaceExpectedType(TypeUtils.NO_EXPECTED_TYPE), ResolveMode.INTERNAL);
context.replaceExpectedType(TypeUtils.NO_EXPECTED_TYPE), ResolveMode.NESTED_CALL);
}
if (expression instanceof JetQualifiedExpression) {
result = callExpressionResolver.getQualifiedExpressionExtendedTypeInfo(
(JetQualifiedExpression) expression, context.replaceExpectedType(TypeUtils.NO_EXPECTED_TYPE), ResolveMode.INTERNAL);
(JetQualifiedExpression) expression, context.replaceExpectedType(TypeUtils.NO_EXPECTED_TYPE), ResolveMode.NESTED_CALL);
}
if (result != null) {
recordExpressionType(expression, context, result.getTypeInfo());
@@ -159,7 +159,7 @@ public class CallExpressionResolver {
if (!results.isNothing()) {
checkSuper(receiver, results, context.trace, callExpression);
result[0] = true;
if (results.isSingleResult() && resolveMode == ResolveMode.NORMAL) {
if (results.isSingleResult() && resolveMode == ResolveMode.TOP_LEVEL_CALL) {
if (CallResolverUtil.hasReturnTypeDependentOnNotInferredParams(results.getResultingCall())) {
return null;
}
@@ -179,7 +179,7 @@ public class CallExpressionResolver {
CallResolver callResolver = expressionTypingServices.getCallResolver();
Call call = CallMaker.makePropertyCall(receiver, callOperationNode, nameExpression);
OverloadResolutionResults<VariableDescriptor> resolutionResult = callResolver.resolveSimpleProperty(
BasicCallResolutionContext.create(context.replaceBindingTrace(traceForVariable), call, ResolveMode.NORMAL));
BasicCallResolutionContext.create(context.replaceBindingTrace(traceForVariable), call, ResolveMode.TOP_LEVEL_CALL));
if (!resolutionResult.isNothing()) {
traceForVariable.commit();
checkSuper(receiver, resolutionResult, context.trace, nameExpression);
@@ -223,7 +223,7 @@ public class CallExpressionResolver {
Call call = CallMaker.makeCall(nameExpression, receiver, callOperationNode, nameExpression, Collections.<ValueArgument>emptyList());
TemporaryBindingTrace traceForFunction = TemporaryBindingTrace.create(context.trace, "trace to resolve as function", nameExpression);
ResolvedCall<FunctionDescriptor> resolvedCall = getResolvedCallForFunction(call, nameExpression, receiver, context, ResolveMode.NORMAL, result);
ResolvedCall<FunctionDescriptor> resolvedCall = getResolvedCallForFunction(call, nameExpression, receiver, context, ResolveMode.TOP_LEVEL_CALL, result);
if (result[0]) {
FunctionDescriptor functionDescriptor = resolvedCall != null ? resolvedCall.getResultingDescriptor() : null;
traceForFunction.commit();
@@ -240,7 +240,7 @@ public class CallExpressionResolver {
@NotNull
public JetTypeInfo getCallExpressionTypeInfo(@NotNull JetCallExpression callExpression, @NotNull ReceiverValue receiver,
@Nullable ASTNode callOperationNode, @NotNull ResolutionContext context) {
return getCallExpressionTypeInfoForCall(callExpression, receiver, callOperationNode, context, ResolveMode.NORMAL).getTypeInfo();
return getCallExpressionTypeInfoForCall(callExpression, receiver, callOperationNode, context, ResolveMode.TOP_LEVEL_CALL).getTypeInfo();
}
@NotNull
@@ -250,7 +250,7 @@ public class CallExpressionResolver {
) {
TypeInfoForCall typeInfoForCall = getCallExpressionTypeInfoForCallWithoutFinalTypeCheck(callExpression, receiver, callOperationNode,
context, resolveMode);
if (resolveMode == ResolveMode.NORMAL) {
if (resolveMode == ResolveMode.TOP_LEVEL_CALL) {
DataFlowUtils.checkType(typeInfoForCall.getType(), callExpression, context, typeInfoForCall.getDataFlowInfo());
}
return typeInfoForCall;
@@ -352,7 +352,7 @@ public class CallExpressionResolver {
@NotNull
public JetTypeInfo getQualifiedExpressionTypeInfo(@NotNull JetQualifiedExpression expression, @NotNull ResolutionContext context) {
return getQualifiedExpressionExtendedTypeInfo(expression, context, ResolveMode.NORMAL).getTypeInfo();
return getQualifiedExpressionExtendedTypeInfo(expression, context, ResolveMode.TOP_LEVEL_CALL).getTypeInfo();
}
@NotNull
@@ -392,7 +392,7 @@ public class CallExpressionResolver {
context.trace.record(BindingContext.EXPRESSION_TYPE, selectorExpression, selectorReturnType);
}
JetTypeInfo typeInfo = JetTypeInfo.create(selectorReturnType, selectorReturnTypeInfo.getDataFlowInfo());
if (resolveMode == ResolveMode.NORMAL) {
if (resolveMode == ResolveMode.TOP_LEVEL_CALL) {
DataFlowUtils.checkType(typeInfo.getType(), expression, context, typeInfo.getDataFlowInfo());
}
return TypeInfoForCall.create(typeInfo, selectorReturnTypeInfo);
@@ -126,7 +126,7 @@ public class CallResolver {
@NotNull JetType expectedType,
@NotNull DataFlowInfo dataFlowInfo
) {
return resolveFunctionCall(BasicCallResolutionContext.create(trace, scope, call, expectedType, dataFlowInfo, ResolveMode.NORMAL, false));
return resolveFunctionCall(BasicCallResolutionContext.create(trace, scope, call, expectedType, dataFlowInfo, ResolveMode.TOP_LEVEL_CALL, false));
}
@NotNull
@@ -292,7 +292,7 @@ public class CallResolver {
if (prioritizedTasks.isEmpty()) {
return results;
}
if (context.resolveMode == ResolveMode.INTERNAL) return results;
if (context.resolveMode == ResolveMode.NESTED_CALL) return results;
TracingStrategy tracing = prioritizedTasks.iterator().next().tracing;
return completeTypeInferenceDependentOnExpectedType(context, results, tracing);
@@ -335,7 +335,7 @@ public class CallResolver {
if (!resolvedCall.hasUnknownTypeParameters()) {
CallCandidateResolutionContext<D> callCandidateResolutionContext =
CallCandidateResolutionContext.createForCallBeingAnalyzed((ResolvedCallImpl<D>) resolvedCall, context, tracing);
candidateResolver.completeValueArgumentsInference(callCandidateResolutionContext);
candidateResolver.completeNestedCallsInference(callCandidateResolutionContext);
return results;
}
ResolvedCallImpl<D> copy = CallResolverUtil.copy((ResolvedCallImpl<D>) resolvedCall, context);
@@ -229,7 +229,7 @@ public class CandidateResolver {
if (!constraintSystem.isSuccessful()) {
resolvedCall.setResultingSubstitutor(constraintSystemWithoutExpectedTypeConstraint.getResultingSubstitutor());
completeValueArgumentsInference(context);
completeNestedCallsInference(context);
List<JetType> argumentTypes = checkValueArgumentTypes(context, resolvedCall, context.trace,
RESOLVE_FUNCTION_ARGUMENTS).argumentTypes;
JetType receiverType = resolvedCall.getReceiverArgument().exists() ? resolvedCall.getReceiverArgument().getType() : null;
@@ -256,7 +256,7 @@ public class CandidateResolver {
}
resolvedCall.setResultingSubstitutor(constraintSystem.getResultingSubstitutor());
completeValueArgumentsInference(context);
completeNestedCallsInference(context);
// Here we type check the arguments with inferred types expected
checkAllValueArguments(context, context.trace, RESOLVE_FUNCTION_ARGUMENTS);
@@ -273,7 +273,7 @@ public class CandidateResolver {
}
}
public <D extends CallableDescriptor> void completeValueArgumentsInference(
public <D extends CallableDescriptor> void completeNestedCallsInference(
@NotNull CallCandidateResolutionContext<D> context
) {
ResolvedCallImpl<D> resolvedCall = context.candidateCall;
@@ -296,12 +296,12 @@ public class CandidateResolver {
if (storedContextForArgument == null) continue;
CallCandidateResolutionContext<FunctionDescriptor> contextForArgument =
storedContextForArgument.replaceResolveMode(ResolveMode.NORMAL).replaceBindingTrace(context.trace).replaceExpectedType(expectedType);
storedContextForArgument.replaceResolveMode(ResolveMode.TOP_LEVEL_CALL).replaceBindingTrace(context.trace).replaceExpectedType(expectedType);
if (contextForArgument.candidateCall.hasUnknownTypeParameters()) {
completeTypeInferenceDependentOnExpectedTypeForCall(contextForArgument, true);
}
else {
completeValueArgumentsInference(contextForArgument);
completeNestedCallsInference(contextForArgument);
}
}
}
@@ -17,6 +17,6 @@
package org.jetbrains.jet.lang.resolve.calls.context;
public enum ResolveMode {
NORMAL,
INTERNAL
TOP_LEVEL_CALL,
NESTED_CALL
}
@@ -106,6 +106,6 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
@NotNull
public OverloadResolutionResults<FunctionDescriptor> resolveCallWithGivenName(@NotNull Call call, @NotNull JetReferenceExpression functionReference, @NotNull Name name) {
return expressionTypingServices.getCallResolver().resolveCallWithGivenName(
BasicCallResolutionContext.create(this, call, ResolveMode.NORMAL), functionReference, name);
BasicCallResolutionContext.create(this, call, ResolveMode.TOP_LEVEL_CALL), functionReference, name);
}
}
@@ -2125,9 +2125,9 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/diagnostics/tests/inference/complicated"), "kt", true);
}
@TestMetadata("completeValueArgumentsInference.kt")
public void testCompleteValueArgumentsInference() throws Exception {
doTest("compiler/testData/diagnostics/tests/inference/complicated/completeValueArgumentsInference.kt");
@TestMetadata("completeNestedCallsInference.kt")
public void testCompleteNestedCallsInference() throws Exception {
doTest("compiler/testData/diagnostics/tests/inference/complicated/completeNestedCallsInference.kt");
}
}