Invoke call resolver extension in CallCompleter
so it is called after outer call is resolved (for calls in arguments)
This commit is contained in:
@@ -69,18 +69,24 @@ public class CallCompleter(
|
|||||||
results: OverloadResolutionResultsImpl<D>,
|
results: OverloadResolutionResultsImpl<D>,
|
||||||
tracing: TracingStrategy
|
tracing: TracingStrategy
|
||||||
): OverloadResolutionResultsImpl<D> {
|
): OverloadResolutionResultsImpl<D> {
|
||||||
// for the case 'foo(a)' where 'foo' is a variable, the call 'foo.invoke(a)' shouldn't be completed separately,
|
|
||||||
// it's completed when the outer (variable as function call) is completed
|
|
||||||
if (CallResolverUtil.isInvokeCallOnVariable(context.call)) return results
|
|
||||||
|
|
||||||
val resolvedCall = if (results.isSingleResult()) results.getResultingCall() else null
|
val resolvedCall = if (results.isSingleResult()) results.getResultingCall() else null
|
||||||
val temporaryTrace = TemporaryBindingTrace.create(context.trace, "Trace to complete a resulting call")
|
|
||||||
|
|
||||||
completeResolvedCallAndArguments(resolvedCall, results, context.replaceBindingTrace(temporaryTrace), tracing)
|
// for the case 'foo(a)' where 'foo' is a variable, the call 'foo.invoke(a)' shouldn't be completed separately,
|
||||||
|
// it's completed when the outer (variable as function call) is completed
|
||||||
|
if (!CallResolverUtil.isInvokeCallOnVariable(context.call)) {
|
||||||
|
|
||||||
completeAllCandidates(context, results)
|
val temporaryTrace = TemporaryBindingTrace.create(context.trace, "Trace to complete a resulting call")
|
||||||
|
|
||||||
|
completeResolvedCallAndArguments(resolvedCall, results, context.replaceBindingTrace(temporaryTrace), tracing)
|
||||||
|
|
||||||
|
completeAllCandidates(context, results)
|
||||||
|
|
||||||
|
temporaryTrace.commit()
|
||||||
|
}
|
||||||
|
|
||||||
|
resolvedCall?.let { context.callResolverExtension.run(it, context) }
|
||||||
|
|
||||||
temporaryTrace.commit()
|
|
||||||
if (results.isSingleResult() && results.getResultingCall().getStatus().isSuccess()) {
|
if (results.isSingleResult() && results.getResultingCall().getStatus().isSuccess()) {
|
||||||
return results.changeStatusToSuccess()
|
return results.changeStatusToSuccess()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -363,10 +363,6 @@ public class CallResolver {
|
|||||||
results = callCompleter.completeCall(context, results, tracing);
|
results = callCompleter.completeCall(context, results, tracing);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (results.isSingleResult()) {
|
|
||||||
context.callResolverExtension.run(results.getResultingCall(), context);
|
|
||||||
}
|
|
||||||
|
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user