in testing/xml-truth/src/main/java/org/apache/axiom/truth/xml/DOMTraverser.java [56:122]
public Event next() {
while (true) {
boolean visited;
if (node == null) {
node = root;
visited = false;
} else if (descend) {
Node firstChild = node.getFirstChild();
if (firstChild != null) {
node = firstChild;
visited = false;
} else {
visited = true;
}
} else {
Node nextSibling = node.getNextSibling();
if (node == root) {
return null;
} else if (nextSibling != null) {
node = nextSibling;
visited = false;
} else {
node = node.getParentNode();
visited = true;
}
}
switch (node.getNodeType()) {
case Node.DOCUMENT_NODE:
return null;
case Node.DOCUMENT_TYPE_NODE:
descend = false;
return Event.DOCUMENT_TYPE;
case Node.ELEMENT_NODE:
if (!visited) {
descend = true;
return Event.START_ELEMENT;
} else {
descend = false;
return Event.END_ELEMENT;
}
case Node.TEXT_NODE:
descend = false;
return dom3 && ((Text) node).isElementContentWhitespace()
? Event.WHITESPACE
: Event.TEXT;
case Node.ENTITY_REFERENCE_NODE:
if (expandEntityReferences) {
descend = !visited;
break;
} else {
descend = false;
return Event.ENTITY_REFERENCE;
}
case Node.COMMENT_NODE:
descend = false;
return Event.COMMENT;
case Node.CDATA_SECTION_NODE:
descend = false;
return Event.CDATA_SECTION;
case Node.PROCESSING_INSTRUCTION_NODE:
descend = false;
return Event.PROCESSING_INSTRUCTION;
default:
throw new IllegalStateException();
}
}
}