private void processOperator(PyElementType operator, PyReferenceOwner expression) {
    boolean isBinaryOperator = expression instanceof PyBinaryExpression;

    String specialMethodName = isBinaryOperator ? operator.getSpecialMethodName() :
                               PySmartStepIntoVariantOperator.getUnaryOperatorSpecialMethodName(operator);

    if (specialMethodName == null || !specialMethodName.equals(myVariantsFromPython.get(myVariantIndex + 1).first)) return;
    myVariantIndex++;

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

    var context = TypeEvalContext.userInitiated(expression.getProject(), expression.getContainingFile());
    PsiElement resolved = expression.getReference(PyResolveContext.defaultContext(context)).resolve();

    if (resolved == null || isBuiltIn(resolved) || isAlreadyCalled()) return;

    PsiElement psiOperator = isBinaryOperator ? ((PyBinaryExpression)expression).getPsiOperator() : expression;
    if (psiOperator != null) myCollector.add(new PySmartStepIntoVariantOperator(psiOperator, callOrder, myContext));
  }
private void processOperator(PyElementType operator, PyReferenceOwner expression)