code: protected void setObject(Object obj) {
         if (obj instanceof NodeVector) {
             // Keep our superclass informed of the current NodeVector
             // ... if we don't the smoketest fails (don't know why).
             super.setObject(obj);
             
             // A copy of the code of what SetVector() would do.
             NodeVector v = (NodeVector)obj;
             if (m_cache != null) {
                 m_cache.setVector(v);
             } else if (v!=null) {
                 m_cache = new IteratorCache();
                 m_cache.setVector(v);
             }
         } else if (obj instanceof IteratorCache) {
             IteratorCache cache = (IteratorCache) obj;
             m_cache = cache;
             m_cache.increaseUseCount();
             
             // Keep our superclass informed of the current NodeVector
             super.setObject(cache.getVector());
         } else {
             super.setObject(obj);
         }
         
     }
docs: It used to be that many locations in the code simply
  did an assignment to this.m_obj directly, rather than
  calling the setObject(Object) method. The problem is
  that our super-class would be updated on what the
  cache associated with this NodeSequence, but
  we wouldn't know ourselves.
  <p>
  All setting of m_obj is done through setObject() now,
  and this method over-rides the super-class method.
  So now we are in the loop have an opportunity
  to update some caching information.