boolean (@NotNull PyCallExpression node) { PyClass klass = PsiTreeUtil.getParentOfType(node, PyClass.class); if (klass == null) return false; PyExpression callee = node.getCallee(); if (callee == null) return false; String name = callee.getName(); if (PyNames.SUPER.equals(name)) { PsiReference reference = callee.getReference(); if (reference == null) return false; PsiElement resolved = reference.resolve(); PyBuiltinCache cache = PyBuiltinCache.getInstance(node); if (resolved != null && cache.isBuiltin(resolved)) { PyExpression[] args = node.getArguments(); if (args.length > 0) { String firstArg = args[0].getText(); if (firstArg.equals(klass.getName()) || firstArg.equals(PyNames.CANONICAL_SELF + "." + PyNames.__CLASS__)) { return true; } for (PyClass s : klass.getAncestorClasses(null)) { if (firstArg.equals(s.getName())) { return true; } } } else { return true; } } } return false; }