in src/main/java/org/apache/commons/net/nntp/Threader.java [359:400]
public Threadable thread(final Iterable<? extends Threadable> messages) {
if (messages == null) {
return null;
}
HashMap<String, NntpThreadContainer> idTable = new HashMap<>();
// walk through each Threadable element
for (final Threadable t : messages) {
if (!t.isDummy()) {
buildContainer(t, idTable);
}
}
if (idTable.isEmpty()) {
return null;
}
final NntpThreadContainer root = findRootSet(idTable);
idTable.clear();
idTable = null;
pruneEmptyContainers(root);
root.reverseChildren();
gatherSubjects(root);
if (root.next != null) {
throw new IllegalStateException("root node has a next:" + root);
}
for (NntpThreadContainer r = root.child; r != null; r = r.next) {
if (r.threadable == null) {
r.threadable = r.child.threadable.makeDummy();
}
}
final Threadable result = (root.child == null ? null : root.child.threadable);
root.flush();
return result;
}