@NotNull
 public OverloadResolutionResults<FunctionDescriptor> resolveCallWithGivenName(
     @NotNull Call call, @NotNull JetReferenceExpression functionReference, @NotNull String name) {
   return expressionTypingServices
       .getCallResolver()
       .resolveCallWithGivenName(makeResolutionContext(call), functionReference, name);
 }
 @NotNull
 public OverloadResolutionResults<FunctionDescriptor> resolveExactSignature(
     @NotNull ReceiverDescriptor receiver,
     @NotNull String name,
     @NotNull List<JetType> parameterTypes) {
   return expressionTypingServices
       .getCallResolver()
       .resolveExactSignature(scope, receiver, name, parameterTypes);
 }
 @NotNull
 public OverloadResolutionResults<VariableDescriptor> resolveSimpleProperty(
     @NotNull ReceiverDescriptor receiver,
     @Nullable ASTNode callOperationNode,
     @NotNull JetSimpleNameExpression nameExpression) {
   Call call = CallMaker.makePropertyCall(receiver, callOperationNode, nameExpression);
   return expressionTypingServices
       .getCallResolver()
       .resolveSimpleProperty(makeResolutionContext(call));
 }
 @Nullable
 public FunctionDescriptor resolveCall(
     @NotNull ReceiverDescriptor receiver,
     @Nullable ASTNode callOperationNode,
     @NotNull JetCallExpression callExpression) {
   OverloadResolutionResults<FunctionDescriptor> results =
       expressionTypingServices
           .getCallResolver()
           .resolveFunctionCall(
               trace,
               scope,
               CallMaker.makeCall(receiver, callOperationNode, callExpression),
               expectedType,
               dataFlowInfo);
   return results.singleResult() ? results.getResultingDescriptor() : null;
 }