@Nullable
  private static Set<PsiClass> getCallType(@NotNull PsiExpression expression, int maxDepth) {
    PsiReferenceExpression ref = ((PsiMethodCallExpression)expression).getMethodExpression();
    PsiExpression qualifier = ref.getQualifierExpression();
    if (qualifier == null) return extractClass(expression.getType());

    Set<PsiClass> qualifierType = getPossibleTypes(qualifier, maxDepth - 1);
    String refName = ref.getReferenceName();
    int argCount = ((PsiMethodCallExpression)expression).getArgumentList().getExpressionCount();
    List<PsiMethod> methods = refName == null || qualifierType == null ? null : getPossibleMethods(qualifierType, refName, argCount);
    return methods == null ? null : getDefiniteSymbolTypes(methods, qualifierType);
  }
@Nullable
  private static Set<PsiClass> getCallType(@NotNull PsiExpression expression, int maxDepth)