@Override
  public void visitPyCallExpression(@NotNull PyCallExpression node) {
    node.acceptChildren(this);

    if (alreadyVisited.contains(node)) return;
    alreadyVisited.add(node);

    if (myVariantIndex == myVariantsFromPython.size() - 1) return;

    PyExpression callee = node.getCallee();
    if (callee == null || callee.getName() == null) return;

    if (!callee.getName().equals(myVariantsFromPython.get(myVariantIndex + 1).first)) return;

    myVariantIndex++;
    int callOrder = getCallOrder();
    mySeenVariants.put(myVariantsFromPython.get(myVariantIndex).first, ++callOrder);

    PsiElement ref = callee.getReference() != null ? callee.getReference().resolve() : null;
    if (ref != null && isBuiltIn(ref)) return;

    if (LanguageLevel.forElement(node).isOlderThan(LanguageLevel.PYTHON312)
        && ref instanceof PyFunction && ((((PyFunction)ref).isAsync()) || ((PyFunction)ref).isGenerator())) {
      return;
    }

    if (isAlreadyCalled()) return;

    myCollector.add(new PySmartStepIntoVariantCallExpression(node, callOrder, myContext));
  }
@Override
  public void visitPyCallExpression(@NotNull PyCallExpression node)