sboag 01/08/01 19:04:17
Modified: java/src/org/apache/xml/dtm DTMAxisIterator.java
java/src/org/apache/xml/dtm/ref DTMAxisIteratorBase.java
DTMDefaultBaseIterators.java
java/src/org/apache/xpath/axes OneStepIterator.java
Log:
Addresses http://nagoya.apache.org/bugzilla/show_bug.cgi?id=2945
Bug was caused by (redundent) cloneWithReset being called from
the UnionPathIterator, and the iterator in OneStepIterator not being
reset. (Need to review: check other iterators for this.)
Call reset on the iterator in OneStepIterator#reset. Reset the position
value in the ancestor iterator reset. Define DTMAxisIterator#cloneIterator
to not reset the iterator position, and fix the implementations of
this to not call clone.reset().
Revision Changes Path
1.3 +2 -2
xml-xalan/java/src/org/apache/xml/dtm/DTMAxisIterator.java
Index: DTMAxisIterator.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/DTMAxisIterator.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DTMAxisIterator.java 2001/06/12 19:15:38 1.2
+++ DTMAxisIterator.java 2001/08/02 02:04:17 1.3
@@ -117,8 +117,8 @@
public boolean isReverse();
/**
- * @return a deep copy of this iterator. The clone and/or the original
- * may become non-restartable as a side effect of this operation.
+ * @return a deep copy of this iterator. The clone should not be reset
+ * from its current position.
*/
public DTMAxisIterator cloneIterator();
}
1.3 +3 -2
xml-xalan/java/src/org/apache/xml/dtm/ref/DTMAxisIteratorBase.java
Index: DTMAxisIteratorBase.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMAxisIteratorBase.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DTMAxisIteratorBase.java 2001/06/12 19:15:45 1.2
+++ DTMAxisIteratorBase.java 2001/08/02 02:04:17 1.3
@@ -203,9 +203,10 @@
{
final DTMAxisIteratorBase clone = (DTMAxisIteratorBase) super.clone();
- clone._isRestartable = false;
+ // clone._isRestartable = false;
- return clone.reset();
+ // return clone.reset();
+ return clone;
}
catch (CloneNotSupportedException e)
{
1.4 +8 -5
xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBaseIterators.java
Index: DTMDefaultBaseIterators.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBaseIterators.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DTMDefaultBaseIterators.java 2001/07/28 00:25:59 1.3
+++ DTMDefaultBaseIterators.java 2001/08/02 02:04:17 1.4
@@ -1145,7 +1145,7 @@
}
/**
- * Returns a deep copy of this iterator.
+ * Returns a deep copy of this iterator. The cloned iterator is not
reset.
*
* @return a deep copy of this iterator.
*/
@@ -1164,7 +1164,8 @@
clone._stack = stackCopy;
- return clone.reset();
+ // return clone.reset();
+ return clone;
}
catch (CloneNotSupportedException e)
{
@@ -1428,13 +1429,12 @@
}
/**
- * Returns a deep copy of this iterator.
+ * Returns a deep copy of this iterator. The cloned iterator is not
reset.
*
* @return a deep copy of this iterator.
*/
public DTMAxisIterator cloneIterator()
{
-
_isRestartable = false; // must set to false for any clone
try
@@ -1443,7 +1443,8 @@
clone._startNode = _startNode;
- return clone.reset();
+ // return clone.reset();
+ return clone;
}
catch (CloneNotSupportedException e)
{
@@ -1495,6 +1496,8 @@
{
_currentNode = getDocument();
+
+ m_ancestorsPos = m_ancestors.size()-1;
return resetPosition();
}
1.4 +12 -0
xml-xalan/java/src/org/apache/xpath/axes/OneStepIterator.java
Index: OneStepIterator.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xpath/axes/OneStepIterator.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- OneStepIterator.java 2001/07/06 18:29:17 1.3
+++ OneStepIterator.java 2001/08/02 02:04:17 1.4
@@ -239,4 +239,16 @@
// System.out.println("pos (ReverseAxesWalker): "+count);
return count;
}
+
+ /**
+ * Reset the iterator.
+ */
+ public void reset()
+ {
+
+ super.reset();
+ if(null != m_iterator)
+ m_iterator.reset();
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]