Refactoring: made 'resolveFunctionCall' return OverloadResolutionResults

not OverloadResolutionResultsImpl
This commit is contained in:
Svetlana Isakova
2014-03-20 16:34:40 +04:00
committed by Andrey Breslav
parent 9c21fb3b1f
commit 8f1c7aa8f6
4 changed files with 11 additions and 12 deletions
@@ -227,13 +227,13 @@ public class CallExpressionResolver {
} }
@Nullable @Nullable
public ResolvedCallWithTrace<FunctionDescriptor> getResolvedCallForFunction( public ResolvedCall<FunctionDescriptor> getResolvedCallForFunction(
@NotNull Call call, @NotNull JetExpression callExpression, @NotNull Call call, @NotNull JetExpression callExpression,
@NotNull ResolutionContext context, @NotNull CheckValueArgumentsMode checkArguments, @NotNull ResolutionContext context, @NotNull CheckValueArgumentsMode checkArguments,
@NotNull boolean[] result @NotNull boolean[] result
) { ) {
CallResolver callResolver = expressionTypingServices.getCallResolver(); CallResolver callResolver = expressionTypingServices.getCallResolver();
OverloadResolutionResultsImpl<FunctionDescriptor> results = callResolver.resolveFunctionCall( OverloadResolutionResults<FunctionDescriptor> results = callResolver.resolveFunctionCall(
BasicCallResolutionContext.create(context, call, checkArguments)); BasicCallResolutionContext.create(context, call, checkArguments));
if (!results.isNothing()) { if (!results.isNothing()) {
checkSuper(call.getExplicitReceiver(), results, context.trace, callExpression); checkSuper(call.getExplicitReceiver(), results, context.trace, callExpression);
@@ -343,7 +343,7 @@ public class CallExpressionResolver {
TemporaryTraceAndCache temporaryForFunction = TemporaryTraceAndCache.create( TemporaryTraceAndCache temporaryForFunction = TemporaryTraceAndCache.create(
context, "trace to resolve as function call", callExpression); context, "trace to resolve as function call", callExpression);
ResolvedCallWithTrace<FunctionDescriptor> resolvedCall = getResolvedCallForFunction( ResolvedCall<FunctionDescriptor> resolvedCall = getResolvedCallForFunction(
call, callExpression, context.replaceTraceAndCache(temporaryForFunction), call, callExpression, context.replaceTraceAndCache(temporaryForFunction),
CheckValueArgumentsMode.ENABLED, result); CheckValueArgumentsMode.ENABLED, result);
if (result[0]) { if (result[0]) {
@@ -192,7 +192,7 @@ public class CallResolver {
} }
@NotNull @NotNull
/*package*/ OverloadResolutionResultsImpl<FunctionDescriptor> resolveFunctionCall(@NotNull BasicCallResolutionContext context) { public OverloadResolutionResults<FunctionDescriptor> resolveFunctionCall(@NotNull BasicCallResolutionContext context) {
ProgressIndicatorProvider.checkCanceled(); ProgressIndicatorProvider.checkCanceled();
@@ -291,11 +291,9 @@ public class CallResolver {
Call call = new CallTransformer.CallForImplicitInvoke( Call call = new CallTransformer.CallForImplicitInvoke(
context.call.getExplicitReceiver(), expressionReceiver, context.call); context.call.getExplicitReceiver(), expressionReceiver, context.call);
TracingStrategyForInvoke tracingForInvoke = new TracingStrategyForInvoke(calleeExpression, call, calleeType); TracingStrategyForInvoke tracingForInvoke = new TracingStrategyForInvoke(calleeExpression, call, calleeType);
return (OverloadResolutionResultsImpl<FunctionDescriptor>) return resolveCallForInvoke(context.replaceCall(call), tracingForInvoke);
resolveCallForInvoke(context.replaceCall(call), tracingForInvoke);
} }
else { else {
// checkTypesWithNoCallee(trace, scope, call);
return checkArgumentTypesAndFail(context); return checkArgumentTypesAndFail(context);
} }
} }
@@ -42,17 +42,18 @@ public class OverloadResolutionResultsUtil {
@NotNull OverloadResolutionResults<D> results, @NotNull OverloadResolutionResults<D> results,
@NotNull ContextDependency contextDependency @NotNull ContextDependency contextDependency
) { ) {
ResolvedCall<D> resultingCall = getResultingCall((OverloadResolutionResultsImpl<D>) results, contextDependency); ResolvedCall<D> resultingCall = getResultingCall(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> ResolvedCall<D> getResultingCall(
@NotNull OverloadResolutionResultsImpl<D> results, @NotNull OverloadResolutionResults<D> results,
@NotNull ContextDependency contextDependency @NotNull ContextDependency contextDependency
) { ) {
if (results.isSingleResult() && contextDependency == ContextDependency.INDEPENDENT) { if (results.isSingleResult() && contextDependency == ContextDependency.INDEPENDENT) {
if (!results.getResultingCall().getCallToCompleteTypeArgumentInference().hasInferredReturnType()) { ResolvedCall<D> resultingCall = results.getResultingCall();
if (!((ResolvedCallWithTrace<D>)resultingCall).getCallToCompleteTypeArgumentInference().hasInferredReturnType()) {
return null; return null;
} }
} }
@@ -565,7 +565,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
TemporaryBindingTrace trace = TemporaryBindingTrace.create(context.trace, "trace to resolve as function", reference); TemporaryBindingTrace trace = TemporaryBindingTrace.create(context.trace, "trace to resolve as function", reference);
ExpressionTypingContext contextForResolve = context.replaceBindingTrace(trace).replaceExpectedType(NO_EXPECTED_TYPE); ExpressionTypingContext contextForResolve = context.replaceBindingTrace(trace).replaceExpectedType(NO_EXPECTED_TYPE);
ResolvedCallWithTrace<FunctionDescriptor> function = components.expressionTypingServices.getCallExpressionResolver() ResolvedCall<FunctionDescriptor> function = components.expressionTypingServices.getCallExpressionResolver()
.getResolvedCallForFunction(call, reference, contextForResolve, CheckValueArgumentsMode.DISABLED, result); .getResolvedCallForFunction(call, reference, contextForResolve, CheckValueArgumentsMode.DISABLED, result);
if (!result[0]) return null; if (!result[0]) return null;