Found a regression issue with the code review. - Also fixed the layout of the variables in the constructor to match the declaration order.
Project: http://git-wip-us.apache.org/repos/asf/vxquery/repo Commit: http://git-wip-us.apache.org/repos/asf/vxquery/commit/13ed39e8 Tree: http://git-wip-us.apache.org/repos/asf/vxquery/tree/13ed39e8 Diff: http://git-wip-us.apache.org/repos/asf/vxquery/diff/13ed39e8 Branch: refs/heads/site Commit: 13ed39e8aaad20c0087c3795788babd25a7d542b Parents: b8fc361 Author: Preston Carman <[email protected]> Authored: Mon Jun 23 15:50:48 2014 -0700 Committer: Preston Carman <[email protected]> Committed: Mon Jun 23 15:50:48 2014 -0700 ---------------------------------------------------------------------- .../vxquery/xmlparser/SAXContentHandler.java | 50 +++++++++++++------- 1 file changed, 32 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/vxquery/blob/13ed39e8/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/SAXContentHandler.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/SAXContentHandler.java b/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/SAXContentHandler.java index 5057aaf..37ce001 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/SAXContentHandler.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/SAXContentHandler.java @@ -80,7 +80,7 @@ public class SAXContentHandler implements ContentHandler, LexicalHandler { private final boolean attachTypes; private final StringBuilder buffer; private final boolean createNodeIds; - private int depth = 0; + private int depth; private final ArrayBackedValueStorage docABVS; private final ArrayBackedValueStorage elementABVS; private boolean pendingText; @@ -90,30 +90,39 @@ public class SAXContentHandler implements ContentHandler, LexicalHandler { private final ArrayBackedValueStorage tempABVS; public SAXContentHandler(boolean attachTypes, ITreeNodeIdProvider nodeIdProvider) { - docABVS = new ArrayBackedValueStorage(); - elementABVS = new ArrayBackedValueStorage(); - resultABVS = new ArrayBackedValueStorage(); - tempABVS = new ArrayBackedValueStorage(); - createNodeIds = nodeIdProvider != null; - this.attachTypes = attachTypes; - this.nodeIdProvider = nodeIdProvider; - docb = new DocumentNodeBuilder(); - tnb = new TextNodeBuilder(); - cnb = new CommentNodeBuilder(); - pinb = new PINodeBuilder(); + // XML node builders anb = new AttributeNodeBuilder(); + cnb = new CommentNodeBuilder(); db = new DictionaryBuilder(); - buffer = new StringBuilder(); + docb = new DocumentNodeBuilder(); + pinb = new PINodeBuilder(); + tnb = new TextNodeBuilder(); enbStack = new ArrayList<ElementNodeBuilder>(); freeENBList = new ArrayList<ElementNodeBuilder>(); - pendingText = false; - tvp = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); + + // Element writing and path step variables skipping = true; + tvp = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); + + // Basic tracking and setting variables + this.attachTypes = attachTypes; + buffer = new StringBuilder(); + createNodeIds = nodeIdProvider != null; + depth = 0; + docABVS = new ArrayBackedValueStorage(); + elementABVS = new ArrayBackedValueStorage(); + pendingText = false; + nodeIdCounter = 0; + this.nodeIdProvider = nodeIdProvider; + resultABVS = new ArrayBackedValueStorage(); + tempABVS = new ArrayBackedValueStorage(); } public SAXContentHandler(boolean attachTypes, ITreeNodeIdProvider nodeIdProvider, ByteBuffer frame, FrameTupleAppender appender, List<SequenceType> childSequenceTypes) { this(attachTypes, nodeIdProvider); + + // Frame writing variables this.frame = frame; this.appender = appender; setChildPathSteps(childSequenceTypes); @@ -170,9 +179,16 @@ public class SAXContentHandler implements ContentHandler, LexicalHandler { } } + private void endElementChildPathStep() throws IOException { + if (subElement != null && depth <= subElement.length) { + subElement[depth - 1] = false; + } + } + @Override public void endElement(String uri, String localName, String name) throws SAXException { if (skipping) { + --depth; return; } try { @@ -185,9 +201,7 @@ public class SAXContentHandler implements ContentHandler, LexicalHandler { if (nonSkipped) { writeElement(); } - if (subElement != null && depth <= subElement.length) { - subElement[depth - 1] = false; - } + endElementChildPathStep(); } catch (IOException e) { e.printStackTrace(); throw new SAXException(e);
