boolean (@NotNull PsiElement element, @NotNull ResolveState substitutor) { if (myNodeFilter != null && !myNodeFilter.value(element)) return true; // skip whatever the filter rejects if (element instanceof PsiNamedElement namedElement) { final String name = PyUtil.getElementNameWithoutExtension(namedElement); if (nameIsAcceptable(name)) { addElement(name, namedElement); } } else if (element instanceof PyReferenceExpression referenceExpression) { final String name = referenceExpression.getReferencedName(); if (nameIsAcceptable(name)) { addElement(name, referenceExpression); } } else if (element instanceof PyImportedNameDefiner) { if (!(element instanceof PyImportElement) || !handleImportElement((PyImportElement)element)) { final PyImportedNameDefiner definer = (PyImportedNameDefiner)element; for (PyElement expr : definer.iterateNames()) { if (expr != null && expr != myContext) { // NOTE: maybe rather have SingleIterables skip nulls outright? if (!expr.isValid()) { throw new PsiInvalidElementAccessException(expr, "Definer: " + definer); } final String name = expr instanceof PyFile ? FileUtilRt.getNameWithoutExtension(((PyFile)expr).getName()) : expr.getName(); if (nameIsAcceptable(name)) { addImportedElement(name, expr); } } } } } return true; }