private List<ExplorerNode> addRoots(final FilteredTreeModel filteredModel,
                                        final OpenItems openItems,
                                        final List<ExplorerNodeKey> openedItems,
                                        final LocalMetrics metrics) {
        return metrics.measure("addRoots", () -> {
            final List<ExplorerNode> rootNodes = new ArrayList<>();
            final List<ExplorerNode> children = filteredModel.getChildren(null);

            if (children != null) {
                final List<ExplorerNode> sortedChildren = children
                        .stream()
                        .sorted(Comparator.comparing(ExplorerNode::getName))
                        .toList();
                for (final ExplorerNode child : sortedChildren) {
                    final ExplorerNode copy =
                            addChildren(
                                    child,
                                    child,
                                    filteredModel,
                                    openItems,
                                    0,
                                    openedItems,
                                    metrics);
                    rootNodes.add(copy);
                }
            }
            return rootNodes;
        });
    }
@return True if any one of childNodes (or their descendants) has node info and is included
in treeModelOut
stroom-explorer/stroom-explorer-impl/src/main/java/stroom/explorer/impl/ExplorerServiceImpl.java