public Set<ExplorerNode> getChildrenWithDescendantInfo(final ExplorerNode parentNode,
                                                           final Collection<ExplorerNode> childNodes) {
        final K parentKey = getNodeKey(parentNode);
        if (parentKey != null && NullSafe.hasItems(childNodes)) {
            final Set<ExplorerNode> childNodesWithInfo = NullSafe.set(parentKeyToChildNodesWithInfoMap.get(parentKey));
            return childNodes.stream()
                    .filter(node -> {
                        // TODO: 14/09/2023 Change to use contains when we refactor to have two different node types
                        // Can't use set.contains in case we are comparing nodes with a rootNodeUuid to those
                        // without
                        return childNodesWithInfo.stream()
                                .anyMatch(childNode -> Objects.equals(childNode.getDocRef(), node.getDocRef()));
                    })
                    .collect(Collectors.toSet());
        } else {
            return Collections.emptySet();
        }
    }
@return The sub-set of childNodes that have node info or one of their descendants has it.
stroom-explorer/stroom-explorer-impl/src/main/java/stroom/explorer/impl/AbstractTreeModel.java