@Nullable
  private ResolvedCallWithTrace<FunctionDescriptor> getResolvedCallForFunction(
      @NotNull Call call,
      @NotNull JetExpression callExpression,
      @NotNull ReceiverValue receiver,
      @NotNull ResolutionContext context,
      @NotNull ResolveMode resolveMode,
      @NotNull ResolutionResultsCache resolutionResultsCache,
      @NotNull boolean[] result) {
    CallResolver callResolver = expressionTypingServices.getCallResolver();
    OverloadResolutionResultsImpl<FunctionDescriptor> results =
        callResolver.resolveFunctionCall(
            BasicCallResolutionContext.create(context, call, resolveMode, resolutionResultsCache));
    if (!results.isNothing()) {
      checkSuper(receiver, results, context.trace, callExpression);
      result[0] = true;
      if (results.isSingleResult() && resolveMode == ResolveMode.TOP_LEVEL_CALL) {
        if (!CallResolverUtil.hasInferredReturnType(results.getResultingCall())) return null;
      }

      return results.isSingleResult() ? results.getResultingCall() : null;
    }
    result[0] = false;
    return null;
  }