void (@NotNull Collection<? extends Node> nodes) { ThreadingAssertions.assertEventDispatchThread(); if (isDisposed()) return; TreeNode root = (TreeNode)myTree.getModel().getRoot(); Set<Node> queued = new HashSet<>(); List<Node> toUpdate = new ArrayList<>(); while (true) { Set<Node> parents = new HashSet<>(); for (Node node : nodes) { toUpdate.add(node); TreeNode parent = node.getParent(); if (parent != root && parent instanceof Node && queued.add((Node)parent)) { parents.add((Node)parent); } } if (parents.isEmpty()) break; nodes = parents; } queueUpdateBulk(toUpdate, EmptyRunnable.getInstance()); updateImmediately(); }