summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid A. Madore <david@procyon.(none)>2010-04-18 18:29:01 +0200
committerDavid A. Madore <david@procyon.(none)>2010-04-18 18:29:01 +0200
commit98f35c3443d6df4db5a73916d9a4cd80c482f4c5 (patch)
treef0715319586fed47387acfb433cf1ce0ca0a935c
parent852ff66033951ea44a94c25d5eb9da418c87dac4 (diff)
downloaddamlengine-98f35c3443d6df4db5a73916d9a4cd80c482f4c5.tar.gz
damlengine-98f35c3443d6df4db5a73916d9a4cd80c482f4c5.tar.bz2
damlengine-98f35c3443d6df4db5a73916d9a4cd80c482f4c5.zip
Hide the use of NodeList and NamedNodeMap by real Java ArrayList objects.
This makes it possible to modify the underlying tree without getting hit by .item(i) returning the wrong next item.
-rw-r--r--org/madore/damlengine/TodoDefaultElement.java34
1 files changed, 25 insertions, 9 deletions
diff --git a/org/madore/damlengine/TodoDefaultElement.java b/org/madore/damlengine/TodoDefaultElement.java
index fd916e3..50a460f 100644
--- a/org/madore/damlengine/TodoDefaultElement.java
+++ b/org/madore/damlengine/TodoDefaultElement.java
@@ -19,13 +19,30 @@ public class TodoDefaultElement extends TodoElement {
super(node, context, options);
}
- public void handleAttributes() {
- NamedNodeMap attrs = this.node.getAttributes();
+ public static ArrayList<Attr> getAttrList(Element node) {
+ NamedNodeMap attrs = node.getAttributes();
+ ArrayList<Attr> attrList = new ArrayList<Attr>(attrs.getLength());
Node attr;
- ArrayList<TodoAttr> toProcess = new ArrayList<TodoAttr>();
- for ( int i=0 ; (attr=attrs.item(i)) != null ; i++ ) {
+ for ( int i=0 ; (attr=attrs.item(i)) != null ; i++ )
+ attrList.add((Attr)attr);
+ return attrList;
+ }
+
+ public static ArrayList<Node> getChildList(Element node) {
+ NodeList children = node.getChildNodes();
+ ArrayList<Node> childList = new ArrayList<Node>(children.getLength());
+ Node child;
+ for ( int i=0 ; (child=children.item(i)) != null ; i++ )
+ childList.add(child);
+ return childList;
+ }
+
+ public void handleAttributes() {
+ ArrayList<Attr> attrList = getAttrList(this.node);
+ ArrayList<TodoAttr> toProcess = new ArrayList<TodoAttr>(attrList.size());
+ for ( Attr attr : attrList ) {
TodoAttr it
- = TodoAttr.getTodoAttr((Attr)attr, this.node, this.context,
+ = TodoAttr.getTodoAttr(attr, this.node, this.context,
new TodoItem.Options());
if ( it != null )
toProcess.add(it);
@@ -35,10 +52,9 @@ public class TodoDefaultElement extends TodoElement {
public void handleNodeOnly() {
System.err.println("handling a "+this.node.getNodeName()+" element");
- NodeList children = this.node.getChildNodes();
- Node child;
- ArrayList<TodoElement> toProcess = new ArrayList<TodoElement>();
- for ( int i=0 ; (child=children.item(i)) != null ; i++ ) {
+ ArrayList<Node> childList = getChildList(this.node);
+ ArrayList<TodoElement> toProcess = new ArrayList<TodoElement>(childList.size());
+ for ( Node child : childList ) {
if ( child.getNodeType() == Node.ELEMENT_NODE ) {
TodoElement it
= TodoElement.getTodoElement((Element)child, this.context,