@Override
  public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
    if (recursive) {
      return;
    }
    super.visitMethodCallExpression(call);
    if (RecursionUtils.methodCallExpressionIndirectDefinitelyRecurses(call, method)) {
      recursive = true;
      return;
    }
    final PsiReferenceExpression methodExpression = call.getMethodExpression();
    if (!methodName.equals(methodExpression.getReferenceName())) {
      return;
    }
    JavaResolveResult resolveResult = call.resolveMethodGenerics();
    if (!resolveResult.isValidResult() || !method.equals(resolveResult.getElement())) {
      return;
    }
    if (method.hasModifierProperty(PsiModifier.STATIC) || method.hasModifierProperty(PsiModifier.PRIVATE)) {
      recursive = true;
      return;
    }
    final PsiExpression qualifier = methodExpression.getQualifierExpression();
    if (qualifier == null || qualifier instanceof PsiThisExpression) {
      recursive = true;
    }
  }
@Override
  public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call)