public @Nullable ValidationInfo validate(final PsiMethodCallExpression expression) {
    final PsiType[] argumentTypes = expression.getArgumentList().getExpressionTypes();
    final PsiType methodReturnType = expression.getType();
    if (methodReturnType == null) {
      return null;
    }

    final JavaResolveResult result = expression.getMethodExpression().advancedResolve(false);
    final PsiElement element = result.getElement();
    if (!(element instanceof PsiMethod)) {
      return null;
    }
    final PsiParameter[] expectedParameters = ((PsiMethod)element).getParameterList().getParameters();

    if (argumentTypes.length != expectedParameters.length) {
      return null;
    }
    
    final PsiSubstitutor methodSubstitutor = result.getSubstitutor();
    return validate(argumentTypes, methodReturnType, methodSubstitutor, expression);
  }
public @Nullable ValidationInfo validate(final PsiMethodCallExpression expression)