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]

Reply via email to