You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2023/06/23 13:00:06 UTC
[commons-net] 03/03: NntpThreadContainer.flush() now throws IllegalStateException instead of RuntimeException.
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-net.git
commit dd6e8cd60dc2528620e0f8c317dc5acf3e815697
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Jun 23 08:57:22 2023 -0400
NntpThreadContainer.flush() now throws IllegalStateException
instead of RuntimeException.
---
...readContainer.java => NntpThreadContainer.java} | 20 +++----
.../java/org/apache/commons/net/nntp/Threader.java | 62 +++++++++++-----------
2 files changed, 41 insertions(+), 41 deletions(-)
diff --git a/src/main/java/org/apache/commons/net/nntp/ThreadContainer.java b/src/main/java/org/apache/commons/net/nntp/NntpThreadContainer.java
similarity index 83%
rename from src/main/java/org/apache/commons/net/nntp/ThreadContainer.java
rename to src/main/java/org/apache/commons/net/nntp/NntpThreadContainer.java
index cb461989..6aacf0d3 100644
--- a/src/main/java/org/apache/commons/net/nntp/ThreadContainer.java
+++ b/src/main/java/org/apache/commons/net/nntp/NntpThreadContainer.java
@@ -21,19 +21,19 @@ package org.apache.commons.net.nntp;
* A placeholder utility class, used for constructing a tree of Threadables Original implementation by Jamie Zawinski. See the Grendel source for more details
* <a href="http://lxr.mozilla.org/mozilla/source/grendel/sources/grendel/view/Threader.java#511">here</a> Threadable objects
*/
-class ThreadContainer {
+class NntpThreadContainer {
Threadable threadable;
- ThreadContainer parent;
-// ThreadContainer prev;
- ThreadContainer next;
- ThreadContainer child;
+ NntpThreadContainer parent;
+// NntpThreadContainer prev;
+ NntpThreadContainer next;
+ NntpThreadContainer child;
/**
*
* @param target
* @return true if child is under self's tree. Detects circular references
*/
- boolean findChild(final ThreadContainer target) {
+ boolean findChild(final NntpThreadContainer target) {
if (child == null) {
return false;
}
@@ -43,13 +43,13 @@ class ThreadContainer {
return child.findChild(target);
}
- // Copy the ThreadContainer tree structure down into the underlying Threadable objects
- // (Make the Threadable tree look like the ThreadContainer tree)
+ // Copy the NntpThreadContainer tree structure down into the underlying Threadable objects
+ // (Make the Threadable tree look like the NntpThreadContainer tree)
// TODO convert this to an iterative function - this can blow the stack
// with very large Threadable trees
void flush() {
if (parent != null && threadable == null) {
- throw new RuntimeException("no threadable in " + this.toString());
+ throw new IllegalStateException("no threadable in " + this.toString());
}
parent = null;
@@ -81,7 +81,7 @@ class ThreadContainer {
*/
void reverseChildren() {
if (child != null) {
- ThreadContainer kid, prev, rest;
+ NntpThreadContainer kid, prev, rest;
for (prev = null, kid = child, rest = kid.next; kid != null; prev = kid, kid = rest, rest = rest == null ? null : rest.next) {
kid.next = prev;
}
diff --git a/src/main/java/org/apache/commons/net/nntp/Threader.java b/src/main/java/org/apache/commons/net/nntp/Threader.java
index 6c1c2e88..62c311d4 100644
--- a/src/main/java/org/apache/commons/net/nntp/Threader.java
+++ b/src/main/java/org/apache/commons/net/nntp/Threader.java
@@ -36,12 +36,12 @@ public class Threader {
* @param threadable
* @param idTable
*/
- private void buildContainer(final Threadable threadable, final HashMap<String, ThreadContainer> idTable) {
+ private void buildContainer(final Threadable threadable, final HashMap<String, NntpThreadContainer> idTable) {
String id = threadable.messageThreadId();
- ThreadContainer container = idTable.get(id);
+ NntpThreadContainer container = idTable.get(id);
int bogusIdCount = 0;
- // A ThreadContainer exists for this id already. This should be a forward reference, but may
+ // A NntpThreadContainer exists for this id already. This should be a forward reference, but may
// be a duplicate id, in which case we will need to generate a bogus placeholder id
if (container != null) {
if (container.threadable != null) { // oops! duplicate ids...
@@ -57,22 +57,22 @@ public class Threader {
// No container exists for that message Id. Create one and insert it into the hash table.
if (container == null) {
- container = new ThreadContainer();
+ container = new NntpThreadContainer();
container.threadable = threadable;
idTable.put(id, container);
}
// Iterate through all the references and create ThreadContainers for any references that
// don't have them.
- ThreadContainer parentRef = null;
+ NntpThreadContainer parentRef = null;
{
final String[] references = threadable.messageThreadReferences();
for (final String refString : references) {
- ThreadContainer ref = idTable.get(refString);
+ NntpThreadContainer ref = idTable.get(refString);
// if this id doesn't have a container, create one
if (ref == null) {
- ref = new ThreadContainer();
+ ref = new NntpThreadContainer();
idTable.put(refString, ref);
}
@@ -99,7 +99,7 @@ public class Threader {
// a parent based on the other entries in that field. Now that we have the actual message, we can
// throw away the old parent and use this new one
if (container.parent != null) {
- ThreadContainer rest, prev;
+ NntpThreadContainer rest, prev;
for (prev = null, rest = container.parent.child; rest != null; prev = rest, rest = rest.next) {
if (rest == container) {
@@ -108,7 +108,7 @@ public class Threader {
}
if (rest == null) {
- throw new RuntimeException("Didnt find " + container + " in parent" + container.parent);
+ throw new RuntimeException("Didnt find " + container + " in parent " + container.parent);
}
// Unlink this container from the parent's child list
@@ -134,12 +134,12 @@ public class Threader {
* Find the root set of all existing ThreadContainers
*
* @param idTable
- * @return root the ThreadContainer representing the root node
+ * @return root the NntpThreadContainer representing the root node
*/
- private ThreadContainer findRootSet(final HashMap<String, ThreadContainer> idTable) {
- final ThreadContainer root = new ThreadContainer();
- for (final Map.Entry<String, ThreadContainer> entry : idTable.entrySet()) {
- final ThreadContainer c = entry.getValue();
+ private NntpThreadContainer findRootSet(final HashMap<String, NntpThreadContainer> idTable) {
+ final NntpThreadContainer root = new NntpThreadContainer();
+ for (final Map.Entry<String, NntpThreadContainer> entry : idTable.entrySet()) {
+ final NntpThreadContainer c = entry.getValue();
if (c.parent == null) {
if (c.next != null) {
throw new RuntimeException("c.next is " + c.next.toString());
@@ -156,19 +156,19 @@ public class Threader {
*
* @param root
*/
- private void gatherSubjects(final ThreadContainer root) {
+ private void gatherSubjects(final NntpThreadContainer root) {
int count = 0;
- for (ThreadContainer c = root.child; c != null; c = c.next) {
+ for (NntpThreadContainer c = root.child; c != null; c = c.next) {
count++;
}
// TODO verify this will avoid rehashing
- HashMap<String, ThreadContainer> subjectTable = new HashMap<>((int) (count * 1.2), (float) 0.9);
+ HashMap<String, NntpThreadContainer> subjectTable = new HashMap<>((int) (count * 1.2), (float) 0.9);
count = 0;
- for (ThreadContainer c = root.child; c != null; c = c.next) {
+ for (NntpThreadContainer c = root.child; c != null; c = c.next) {
Threadable threadable = c.threadable;
// No threadable? If so, it is a dummy node in the root set.
@@ -184,7 +184,7 @@ public class Threader {
continue;
}
- final ThreadContainer old = subjectTable.get(subj);
+ final NntpThreadContainer old = subjectTable.get(subj);
// Add this container to the table iff:
// - There exists no container with this subject
@@ -207,7 +207,7 @@ public class Threader {
// subjectTable is now populated with one entry for each subject which occurs in the
// root set. Iterate over the root set, and gather together the difference.
- ThreadContainer prev, c, rest;
+ NntpThreadContainer prev, c, rest;
for (prev = null, c = root.child, rest = c.next; c != null; prev = c, c = rest, rest = (rest == null ? null : rest.next)) {
Threadable threadable = c.threadable;
@@ -223,7 +223,7 @@ public class Threader {
continue;
}
- final ThreadContainer old = subjectTable.get(subj);
+ final NntpThreadContainer old = subjectTable.get(subj);
if (old == c) { // That's us
continue;
@@ -240,7 +240,7 @@ public class Threader {
if (old.threadable == null && c.threadable == null) {
// both dummies - merge them
- ThreadContainer tail;
+ NntpThreadContainer tail;
for (tail = old.child; tail != null && tail.next != null; tail = tail.next) {
// do nothing
}
@@ -262,11 +262,11 @@ public class Threader {
} else {
// else make the old and new messages be children of a new dummy container.
// We create a new container object for old.msg and empty the old container
- final ThreadContainer newc = new ThreadContainer();
+ final NntpThreadContainer newc = new NntpThreadContainer();
newc.threadable = old.threadable;
newc.child = old.child;
- for (ThreadContainer tail = newc.child; tail != null; tail = tail.next) {
+ for (NntpThreadContainer tail = newc.child; tail != null; tail = tail.next) {
tail.parent = newc;
}
@@ -294,8 +294,8 @@ public class Threader {
*
* @param parent
*/
- private void pruneEmptyContainers(final ThreadContainer parent) {
- ThreadContainer container, prev, next;
+ private void pruneEmptyContainers(final NntpThreadContainer parent) {
+ NntpThreadContainer container, prev, next;
for (prev = null, container = parent.child, next = container.next; container != null; prev = container, container = next, next = (container == null
? null
: container.next)) {
@@ -315,8 +315,8 @@ public class Threader {
// Else if empty, with kids, and (not at root or only one kid)
else if (container.threadable == null && (container.parent != null || container.child.next == null)) {
// We have an invalid/expired message with kids. Promote the kids to this level.
- ThreadContainer tail;
- final ThreadContainer kids = container.child;
+ NntpThreadContainer tail;
+ final NntpThreadContainer kids = container.child;
// Remove this container and replace with 'kids'.
if (prev == null) {
@@ -361,7 +361,7 @@ public class Threader {
return null;
}
- HashMap<String, ThreadContainer> idTable = new HashMap<>();
+ HashMap<String, NntpThreadContainer> idTable = new HashMap<>();
// walk through each Threadable element
for (final Threadable t : messages) {
@@ -374,7 +374,7 @@ public class Threader {
return null;
}
- final ThreadContainer root = findRootSet(idTable);
+ final NntpThreadContainer root = findRootSet(idTable);
idTable.clear();
idTable = null;
@@ -387,7 +387,7 @@ public class Threader {
throw new RuntimeException("root node has a next:" + root);
}
- for (ThreadContainer r = root.child; r != null; r = r.next) {
+ for (NntpThreadContainer r = root.child; r != null; r = r.next) {
if (r.threadable == null) {
r.threadable = r.child.threadable.makeDummy();
}