PsiElement (String referencedName, PsiElement realContext) { if (PyUtil.isClassPrivateName(referencedName)) { // a class-private name; limited by either class or this file PsiElement one = myElement; do { one = ScopeUtil.getScopeOwner(one); } while (one instanceof PyFunction); if (one instanceof PyClass && !PsiTreeUtil.isAncestor(((PyClass)one).getSuperClassExpressionList(), myElement, false)) { return one; } } if (myElement instanceof PyTargetExpression) { final ScopeOwner scopeOwner = PsiTreeUtil.getParentOfType(myElement, ScopeOwner.class); final Scope scope; if (scopeOwner != null) { scope = ControlFlowCache.getScope(scopeOwner); final String name = myElement.getName(); if (scope.isNonlocal(name)) { final ScopeOwner nonlocalOwner = ScopeUtil.getDeclarationScopeOwner(myElement, referencedName); if (nonlocalOwner != null && !(nonlocalOwner instanceof PyFile)) { return nonlocalOwner; } } if (!scope.isGlobal(name)) { return scopeOwner; } } } return realContext.getContainingFile(); }