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