void (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) || isAlreadySeen()) return; PsiElement psiOperator = isBinaryOperator ? ((PyBinaryExpression)expression).getPsiOperator() : expression; if (psiOperator != null) myCollector.add(new PySmartStepIntoVariantOperator(psiOperator, callOrder, myContext)); }