private void getViewNode(GTreeNode parent, Predicate<GTreeNode> matches,
			Consumer<GTreeNode> consumer) {

		// check for null here to preserve the stack, as the code below is asynchronous
		Objects.requireNonNull(parent);
		Objects.requireNonNull(matches);
		Objects.requireNonNull(consumer);

		int expireMs = 3000;
		Supplier<GTreeNode> supplier = () -> {
			GTreeNode viewParent = getViewNode(parent);
			if (viewParent == null) {
				return null;
			}

			List<GTreeNode> children = viewParent.getChildren();
			for (GTreeNode node : children) {
				if (matches.test(node)) {
					return node;
				}
			}
			return null;
		};
		ExpiringSwingTimer.get(supplier, expireMs, consumer);
	}
This method is useful for debugging tree problems. Don't know where else to put it.

@param out the output writer
@param name use this to indicate what tree event occurred ("node inserted" "node removed",
           etc.)
@param e the TreeModelEvent;
Ghidra/Framework/Docking/src/main/java/docking/widgets/tree/GTree.java