boolean (final ScopeOwner owner) { try { owner.acceptChildren(new PyRecursiveElementVisitor(){ @Override public void visitPyCallExpression(final @NotNull PyCallExpression node) { final PyExpression callee = node.getCallee(); if (callee != null && "locals".equals(callee.getName())){ throw new DontPerformException(); } node.acceptChildren(this); // look at call expr in arguments } @Override public void visitPyFunction(final @NotNull PyFunction node) { // stop here } }); } catch (DontPerformException e) { return true; } return false; }