You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2020/05/19 20:10:56 UTC

svn commit: r1877931 [2/9] - in /xmlbeans: site/src/documentation/content/xdocs/ trunk/ trunk/lib/ trunk/src/jamsupport/ trunk/src/store/org/apache/xmlbeans/impl/store/ trunk/src/xmlconfig/org/apache/xmlbeans/impl/config/ trunk/src/xpath_xquery/org/apa...

Modified: xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Cur.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Cur.java?rev=1877931&r1=1877930&r2=1877931&view=diff
==============================================================================
--- xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Cur.java (original)
+++ xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Cur.java Tue May 19 20:10:55 2020
@@ -15,110 +15,39 @@
 
 package org.apache.xmlbeans.impl.store;
 
-import org.w3c.dom.Attr;
-import org.w3c.dom.CDATASection;
-import org.w3c.dom.CharacterData;
-import org.w3c.dom.Comment;
+import org.apache.xmlbeans.*;
+import org.apache.xmlbeans.XmlCursor.XmlBookmark;
+import org.apache.xmlbeans.impl.soap.*;
+import org.apache.xmlbeans.impl.store.DomImpl.Dom;
+import org.apache.xmlbeans.impl.store.Locale.LoadContext;
+import org.apache.xmlbeans.impl.values.TypeStoreUser;
 import org.w3c.dom.Document;
 import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.Element;
-import org.w3c.dom.EntityReference;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.ProcessingInstruction;
-import org.w3c.dom.Text;
-import org.w3c.dom.DOMImplementation;
-
-// DOM Level 3
-import org.w3c.dom.UserDataHandler;
-import org.w3c.dom.DOMConfiguration;
-import org.w3c.dom.TypeInfo;
-
-
-import javax.xml.transform.Source;
 
+import javax.xml.namespace.QName;
 import java.io.PrintStream;
-
-import java.util.Iterator;
 import java.util.Map;
-import java.util.ArrayList;
-import java.util.List;
 
-import org.apache.xmlbeans.impl.soap.Detail;
-import org.apache.xmlbeans.impl.soap.DetailEntry;
-import org.apache.xmlbeans.impl.soap.MimeHeaders;
-import org.apache.xmlbeans.impl.soap.Name;
-import org.apache.xmlbeans.impl.soap.SOAPBody;
-import org.apache.xmlbeans.impl.soap.SOAPBodyElement;
-import org.apache.xmlbeans.impl.soap.SOAPElement;
-import org.apache.xmlbeans.impl.soap.SOAPEnvelope;
-import org.apache.xmlbeans.impl.soap.SOAPException;
-import org.apache.xmlbeans.impl.soap.SOAPFactory;
-import org.apache.xmlbeans.impl.soap.SOAPFault;
-import org.apache.xmlbeans.impl.soap.SOAPFaultElement;
-import org.apache.xmlbeans.impl.soap.SOAPHeader;
-import org.apache.xmlbeans.impl.soap.SOAPHeaderElement;
-import org.apache.xmlbeans.impl.soap.SOAPPart;
-import org.apache.xmlbeans.impl.store.Xobj.Bookmark;
-
-import org.apache.xmlbeans.impl.store.Locale.LoadContext;
-
-import org.apache.xmlbeans.impl.store.DomImpl.Dom;
-import org.apache.xmlbeans.impl.store.DomImpl.CharNode;
-import org.apache.xmlbeans.impl.store.DomImpl.TextNode;
-import org.apache.xmlbeans.impl.store.DomImpl.CdataNode;
-import org.apache.xmlbeans.impl.store.DomImpl.SaajTextNode;
-import org.apache.xmlbeans.impl.store.DomImpl.SaajCdataNode;
-
-import org.apache.xmlbeans.CDataBookmark;
-import org.apache.xmlbeans.XmlBeans;
-import org.apache.xmlbeans.XmlLineNumber;
-import org.apache.xmlbeans.SchemaField;
-import org.apache.xmlbeans.SchemaType;
-import org.apache.xmlbeans.SchemaTypeLoader;
-import org.apache.xmlbeans.XmlCursor;
-import org.apache.xmlbeans.XmlObject;
-import org.apache.xmlbeans.XmlOptions;
-import org.apache.xmlbeans.XmlException;
-import org.apache.xmlbeans.QNameSet;
-import org.apache.xmlbeans.XmlDocumentProperties;
-import org.apache.xmlbeans.XmlCursor.XmlBookmark;
-
-import org.apache.xmlbeans.impl.values.TypeStore;
-import org.apache.xmlbeans.impl.values.TypeStoreUser;
-import org.apache.xmlbeans.impl.values.TypeStoreVisitor;
-import org.apache.xmlbeans.impl.values.TypeStoreUserFactory;
-
-import javax.xml.namespace.QName;
-
-import org.apache.xmlbeans.impl.common.ValidatorListener;
-import org.apache.xmlbeans.impl.common.XmlLocale;
-import org.apache.xmlbeans.impl.common.QNameHelper;
+// DOM Level 3
 
 
-final class Cur
-{
-    static final int TEXT     = 0; // Must be 0
-    static final int ROOT     = 1;
-    static final int ELEM     = 2;
-    static final int ATTR     = 3;
-    static final int COMMENT  = 4;
+final class Cur {
+    static final int TEXT = 0; // Must be 0
+    static final int ROOT = 1;
+    static final int ELEM = 2;
+    static final int ATTR = 3;
+    static final int COMMENT = 4;
     static final int PROCINST = 5;
 
-    static final int POOLED       = 0;
-    static final int REGISTERED   = 1;
-    static final int EMBEDDED     = 2;
-    static final int DISPOSED     = 3;
+    static final int POOLED = 0;
+    static final int REGISTERED = 1;
+    static final int EMBEDDED = 2;
+    static final int DISPOSED = 3;
 
     static final int END_POS = -1;
-    static final int NO_POS  = -2;
+    static final int NO_POS = -2;
 
-    Cur ( Locale l )
-    {
+    Cur(Locale l) {
         _locale = l;
         _pos = NO_POS;
 
@@ -133,120 +62,199 @@ final class Cur
         _selectionCount = 0;
     }
 
-    boolean isPositioned ( ) { assert isNormal(); return _xobj != null; }
+    boolean isPositioned() {
+        assert isNormal();
+        return _xobj != null;
+    }
+
+    static boolean kindIsContainer(int k) {
+        return k == ELEM || k == ROOT;
+    }
 
-    static boolean kindIsContainer ( int k ) { return k ==  ELEM || k ==  ROOT; }
-    static boolean kindIsFinish    ( int k ) { return k == -ELEM || k == -ROOT; }
+    static boolean kindIsFinish(int k) {
+        return k == -ELEM || k == -ROOT;
+    }
 
-    int kind ( )
-    {
+    int kind() {
         assert isPositioned();
         int kind = _xobj.kind();
-        return _pos == 0 ? kind : (_pos == END_POS ? - kind : TEXT);
+        return _pos == 0 ? kind : (_pos == END_POS ? -kind : TEXT);
     }
 
-    boolean isRoot      ( ) { assert isPositioned(); return _pos == 0 && _xobj.kind() == ROOT;     }
-    boolean isElem      ( ) { assert isPositioned(); return _pos == 0 && _xobj.kind() == ELEM;     }
-    boolean isAttr      ( ) { assert isPositioned(); return _pos == 0 && _xobj.kind() == ATTR;     }
-    boolean isComment   ( ) { assert isPositioned(); return _pos == 0 && _xobj.kind() == COMMENT;  }
-    boolean isProcinst  ( ) { assert isPositioned(); return _pos == 0 && _xobj.kind() == PROCINST; }
-    boolean isText      ( ) { assert isPositioned(); return _pos > 0; }
-    boolean isEnd       ( ) { assert isPositioned(); return _pos == END_POS && _xobj.kind() ==ELEM;}
-    boolean isEndRoot   ( ) { assert isPositioned(); return _pos == END_POS && _xobj.kind() ==ROOT;}
-    boolean isNode      ( ) { assert isPositioned(); return _pos == 0; }
-    boolean isContainer ( ) { assert isPositioned(); return _pos == 0       && kindIsContainer( _xobj.kind() ); }
-    boolean isFinish    ( ) { assert isPositioned(); return _pos == END_POS && kindIsContainer( _xobj.kind() ); }
-    boolean isUserNode  ( ) { assert isPositioned(); int k = kind(); return k == ELEM || k == ROOT || (k == ATTR && !isXmlns()); }
+    boolean isRoot() {
+        assert isPositioned();
+        return _pos == 0 && _xobj.kind() == ROOT;
+    }
 
-    boolean isContainerOrFinish ( )
-    {
+    boolean isElem() {
         assert isPositioned();
+        return _pos == 0 && _xobj.kind() == ELEM;
+    }
 
-        if (_pos!=0 && _pos!= END_POS)
+    boolean isAttr() {
+        assert isPositioned();
+        return _pos == 0 && _xobj.kind() == ATTR;
+    }
+
+    boolean isComment() {
+        assert isPositioned();
+        return _pos == 0 && _xobj.kind() == COMMENT;
+    }
+
+    boolean isProcinst() {
+        assert isPositioned();
+        return _pos == 0 && _xobj.kind() == PROCINST;
+    }
+
+    boolean isText() {
+        assert isPositioned();
+        return _pos > 0;
+    }
+
+    boolean isEnd() {
+        assert isPositioned();
+        return _pos == END_POS && _xobj.kind() == ELEM;
+    }
+
+    boolean isEndRoot() {
+        assert isPositioned();
+        return _pos == END_POS && _xobj.kind() == ROOT;
+    }
+
+    boolean isNode() {
+        assert isPositioned();
+        return _pos == 0;
+    }
+
+    boolean isContainer() {
+        assert isPositioned();
+        return _pos == 0 && kindIsContainer(_xobj.kind());
+    }
+
+    boolean isFinish() {
+        assert isPositioned();
+        return _pos == END_POS && kindIsContainer(_xobj.kind());
+    }
+
+    boolean isUserNode() {
+        assert isPositioned();
+        int k = kind();
+        return k == ELEM || k == ROOT || (k == ATTR && !isXmlns());
+    }
+
+    boolean isContainerOrFinish() {
+        assert isPositioned();
+
+        if (_pos != 0 && _pos != END_POS)
             return false;
 
         int kind = _xobj.kind();
         return kind == ELEM || kind == -ELEM || kind == ROOT || kind == -ROOT;
     }
 
-    boolean isNormalAttr ( ) { return isNode() && _xobj.isNormalAttr(); }
-    boolean isXmlns      ( ) { return isNode() && _xobj.isXmlns(); }
+    boolean isNormalAttr() {
+        return isNode() && _xobj.isNormalAttr();
+    }
+
+    boolean isXmlns() {
+        return isNode() && _xobj.isXmlns();
+    }
+
+    boolean isTextCData() {
+        return _xobj.hasBookmark(CDataBookmark.class, _pos);
+    }
+
+    QName getName() {
+        assert isNode() || isEnd();
+        return _xobj._name;
+    }
+
+    String getLocal() {
+        return getName().getLocalPart();
+    }
+
+    String getUri() {
+        return getName().getNamespaceURI();
+    }
 
-    boolean isTextCData  ( ) { return _xobj.hasBookmark(CDataBookmark.class, _pos); }
+    String getXmlnsPrefix() {
+        assert isXmlns();
+        return _xobj.getXmlnsPrefix();
+    }
 
-    QName   getName  ( ) { assert isNode() || isEnd(); return _xobj._name; }
-    String  getLocal ( ) { return getName().getLocalPart(); }
-    String  getUri   ( ) { return getName().getNamespaceURI(); }
+    String getXmlnsUri() {
+        assert isXmlns();
+        return _xobj.getXmlnsUri();
+    }
 
-    String  getXmlnsPrefix ( ) { assert isXmlns(); return _xobj.getXmlnsPrefix(); }
-    String  getXmlnsUri    ( ) { assert isXmlns(); return _xobj.getXmlnsUri(); }
+    boolean isDomDocRoot() {
+        return isRoot() && _xobj.getDom() instanceof Document;
+    }
+
+    boolean isDomFragRoot() {
+        return isRoot() && _xobj.getDom() instanceof DocumentFragment;
+    }
 
-    boolean isDomDocRoot  ( ) { return isRoot() && _xobj.getDom() instanceof Document; }
-    boolean isDomFragRoot ( ) { return isRoot() && _xobj.getDom() instanceof DocumentFragment; }
+    int cchRight() {
+        assert isPositioned();
+        return _xobj.cchRight(_pos);
+    }
 
-    int cchRight ( ) { assert isPositioned(); return _xobj.cchRight( _pos ); }
-    int cchLeft  ( ) { assert isPositioned(); return _xobj.cchLeft ( _pos ); }
+    int cchLeft() {
+        assert isPositioned();
+        return _xobj.cchLeft(_pos);
+    }
 
     //
     // Creation methods
     //
 
-    void createRoot ( )
-    {
+    void createRoot() {
         createDomDocFragRoot();
     }
 
-    void createDomDocFragRoot ( )
-    {
-        moveTo( new Xobj.DocumentFragXobj( _locale ) );
+    void createDomDocFragRoot() {
+        moveTo(new DocumentFragXobj(_locale));
     }
 
-    void createDomDocumentRoot ( )
-    {
-        moveTo( createDomDocumentRootXobj( _locale ) );
+    void createDomDocumentRoot() {
+        moveTo(createDomDocumentRootXobj(_locale));
     }
 
-    void createAttr ( QName name )
-    {
-        createHelper( new Xobj.AttrXobj( _locale, name ) );
+    void createAttr(QName name) {
+        createHelper(new AttrXobj(_locale, name));
     }
 
-    void createComment ( )
-    {
-        createHelper( new Xobj.CommentXobj( _locale ) );
+    void createComment() {
+        createHelper(new CommentXobj(_locale));
     }
 
-    void createProcinst ( String target )
-    {
-        createHelper( new Xobj.ProcInstXobj( _locale, target ) );
+    void createProcinst(String target) {
+        createHelper(new ProcInstXobj(_locale, target));
     }
 
-    void createElement ( QName name )
-    {
-        createElement( name, null );
+    void createElement(QName name) {
+        createElement(name, null);
     }
 
-    void createElement ( QName name, QName parentName )
-    {
-        createHelper( createElementXobj( _locale, name, parentName ) );
+    void createElement(QName name, QName parentName) {
+        createHelper(createElementXobj(_locale, name, parentName));
     }
 
-    static Xobj createDomDocumentRootXobj ( Locale l )
-    {
+    static Xobj createDomDocumentRootXobj(Locale l) {
         return createDomDocumentRootXobj(l, false);
     }
 
-    static Xobj createDomDocumentRootXobj ( Locale l , boolean fragment)
-    {
+    static Xobj createDomDocumentRootXobj(Locale l, boolean fragment) {
         Xobj xo;
 
         if (l._saaj == null)
             if (fragment)
-                xo = new Xobj.DocumentFragXobj( l );
+                xo = new DocumentFragXobj(l);
             else
-                xo = new Xobj.DocumentXobj( l );
+                xo = new DocumentXobj(l);
         else
-            xo = new Xobj.SoapPartDocXobj( l );
+            xo = new SoapPartDocXobj(l);
 
         if (l._ownerDoc == null)
             l._ownerDoc = xo.getDom();
@@ -254,49 +262,45 @@ final class Cur
         return xo;
     }
 
-    static Xobj createElementXobj ( Locale l, QName name, QName parentName )
-    {
+    static Xobj createElementXobj(Locale l, QName name, QName parentName) {
         if (l._saaj == null)
-            return new Xobj.ElementXobj( l, name );
+            return new ElementXobj(l, name);
 
-        Class c = l._saaj.identifyElement( name, parentName );
+        Class c = l._saaj.identifyElement(name, parentName);
 
-        if (c == SOAPElement.class)       return new Xobj.SoapElementXobj       ( l, name );
-        if (c == SOAPBody.class)          return new Xobj.SoapBodyXobj          ( l, name );
-        if (c == SOAPBodyElement.class)   return new Xobj.SoapBodyElementXobj   ( l, name );
-        if (c == SOAPEnvelope.class)      return new Xobj.SoapEnvelopeXobj      ( l, name );
-        if (c == SOAPHeader.class)        return new Xobj.SoapHeaderXobj        ( l, name );
-        if (c == SOAPHeaderElement.class) return new Xobj.SoapHeaderElementXobj ( l, name );
-        if (c == SOAPFaultElement.class)  return new Xobj.SoapFaultElementXobj  ( l, name );
-        if (c == Detail.class)            return new Xobj.DetailXobj            ( l, name );
-        if (c == DetailEntry.class)       return new Xobj.DetailEntryXobj       ( l, name );
-        if (c == SOAPFault.class)         return new Xobj.SoapFaultXobj         ( l, name );
+        if (c == SOAPElement.class) return new SoapElementXobj(l, name);
+        if (c == SOAPBody.class) return new SoapBodyXobj(l, name);
+        if (c == SOAPBodyElement.class) return new SoapBodyElementXobj(l, name);
+        if (c == SOAPEnvelope.class) return new SoapEnvelopeXobj(l, name);
+        if (c == SOAPHeader.class) return new SoapHeaderXobj(l, name);
+        if (c == SOAPHeaderElement.class) return new SoapHeaderElementXobj(l, name);
+        if (c == SOAPFaultElement.class) return new SoapFaultElementXobj(l, name);
+        if (c == Detail.class) return new DetailXobj(l, name);
+        if (c == DetailEntry.class) return new DetailEntryXobj(l, name);
+        if (c == SOAPFault.class) return new SoapFaultXobj(l, name);
 
-        throw new IllegalStateException( "Unknown SAAJ element class: " + c );
+        throw new IllegalStateException("Unknown SAAJ element class: " + c);
     }
 
-    private void createHelper ( Xobj x )
-    {
+    private void createHelper(Xobj x) {
         assert x._locale == _locale;
 
         // insert the new Xobj into an exisiting tree.
 
-        if (isPositioned())
-        {
-            Cur from = tempCur( x, 0 );
-            from.moveNode( this );
+        if (isPositioned()) {
+            Cur from = tempCur(x, 0);
+            from.moveNode(this);
             from.release();
         }
 
-        moveTo( x );
+        moveTo(x);
     }
 
     //
     // General operations
     //
 
-    boolean isSamePos ( Cur that )
-    {
+    boolean isSamePos(Cur that) {
         assert isNormal() && (that == null || that.isNormal());
 
         return _xobj == that._xobj && _pos == that._pos;
@@ -304,36 +308,31 @@ final class Cur
 
     // is this just after the end of that (that must be the start of a node)
 
-    boolean isJustAfterEnd ( Cur that )
-    {
+    boolean isJustAfterEnd(Cur that) {
         assert isNormal() && that != null && that.isNormal() && that.isNode();
 
-        return that._xobj.isJustAfterEnd( _xobj, _pos );
+        return that._xobj.isJustAfterEnd(_xobj, _pos);
     }
 
-    boolean isJustAfterEnd ( Xobj x )
-    {
-        return x.isJustAfterEnd( _xobj, _pos );
+    boolean isJustAfterEnd(Xobj x) {
+        return x.isJustAfterEnd(_xobj, _pos);
     }
 
-    boolean isAtEndOf ( Cur that )
-    {
+    boolean isAtEndOf(Cur that) {
         assert that != null && that.isNormal() && that.isNode();
 
         return _xobj == that._xobj && _pos == END_POS;
     }
 
-    boolean isInSameTree ( Cur that )
-    {
+    boolean isInSameTree(Cur that) {
         assert isPositioned() && that.isPositioned();
 
-        return _xobj.isInSameTree( that._xobj );
+        return _xobj.isInSameTree(that._xobj);
     }
 
     // Retunr -1, 0 or 1 for relative cursor positions.  Return 2 is not in sames trees.
 
-    int comparePosition ( Cur that )
-    {
+    int comparePosition(Cur that) {
         assert isPositioned() && that.isPositioned();
 
         // If in differnet locales, then can't comapre
@@ -344,10 +343,10 @@ final class Cur
         // No need to denormalize, but I want positions which I can compare (no END_POS)
 
         Xobj xThis = _xobj;
-        int  pThis = _pos == END_POS ? xThis.posAfter() - 1 : _pos;
+        int pThis = _pos == END_POS ? xThis.posAfter() - 1 : _pos;
 
         Xobj xThat = that._xobj;
-        int  pThat = that._pos == END_POS ? xThat.posAfter() - 1 : that._pos;
+        int pThat = that._pos == END_POS ? xThat.posAfter() - 1 : that._pos;
 
         // There are several cases:
         //
@@ -360,49 +359,59 @@ final class Cur
         // cursors are on, checkin for case 2
         //
 
-        if (xThis == xThat)
-            return pThis < pThat ? -1 : pThis == pThat ? 0 : 1;
+        if (xThis == xThat) {
+            return Integer.compare(pThis, pThat);
+        }
 
         // Compute the depth of xThis.  See if I hit xThat (case 2)
 
         int dThis = 0;
 
-        for ( Xobj x = xThis._parent ; x != null ; x = x._parent )
-        {
+        for (Xobj x = xThis._parent; x != null; x = x._parent) {
             dThis++;
 
-            if (x == xThat)
+            if (x == xThat) {
                 return pThat < xThat.posAfter() - 1 ? 1 : -1;
+            }
         }
 
         // Compute the depth of xThat.  See if I hit xThis (case 2)
 
         int dThat = 0;
 
-        for ( Xobj x = xThat._parent ; x != null ; x = x._parent )
-        {
+        for (Xobj x = xThat._parent; x != null; x = x._parent) {
             dThat++;
 
-            if (x == xThis)
+            if (x == xThis) {
                 return pThis < xThis.posAfter() - 1 ? -1 : 1;
+            }
         }
 
         // Must be case 3 or 4 now.  Find a common parent.  If none, then it's case 4
 
-        while ( dThis > dThat ) { dThis--; xThis = xThis._parent; }
-        while ( dThat > dThis ) { dThat--; xThat = xThat._parent; }
+        while (dThis > dThat) {
+            dThis--;
+            assert(xThis != null);
+            xThis = xThis._parent;
+        }
+        while (dThat > dThis) {
+            dThat--;
+            assert(xThat != null);
+            xThat = xThat._parent;
+        }
 
         assert dThat == dThis;
 
-        if (dThat == 0)
+        if (dThat == 0) {
             return 2;
+        }
 
-        assert xThis._parent != null && xThat._parent != null;
+        assert xThis != null && xThis._parent != null && xThat != null && xThat._parent != null;
 
-        while ( xThis._parent != xThat._parent )
-        {
-            if ((xThis = xThis._parent) == null)
+        while (xThis._parent != xThat._parent) {
+            if ((xThis = xThis._parent) == null) {
                 return 2;
+            }
 
             xThat = xThat._parent;
         }
@@ -410,53 +419,52 @@ final class Cur
         // Now, see where xThis and XThat are relative to eachother in the childlist.  Apply
         // some quick common checks before iterating.
 
-        if (xThis._prevSibling == null || xThat._nextSibling == null)
+        if (xThis._prevSibling == null || xThat._nextSibling == null) {
             return -1;
+        }
 
-        if (xThis._nextSibling == null || xThat._prevSibling == null)
+        if (xThis._nextSibling == null || xThat._prevSibling == null) {
             return 1;
+        }
 
-        while ( xThis != null )
-            if ((xThis = xThis._prevSibling) == xThat)
+        while (xThis != null) {
+            if ((xThis = xThis._prevSibling) == xThat) {
                 return 1;
+            }
+        }
 
         return -1;
     }
 
-    void setName ( QName newName )
-    {
+    void setName(QName newName) {
         assert isNode() && newName != null;
 
-        _xobj.setName( newName );
+        _xobj.setName(newName);
     }
 
-    void moveTo ( Xobj x )
-    {
-        moveTo( x, 0 );
+    void moveTo(Xobj x) {
+        moveTo(x, 0);
     }
 
-    void moveTo ( Xobj x, int p )
-    {
+    void moveTo(Xobj x, int p) {
         // This cursor may not be normalized upon entry, don't assert isNormal() here
 
         assert x == null || _locale == x._locale;
         assert x != null || p == NO_POS;
-        assert x == null || x.isNormal( p ) ||  ( x.isVacant() && x._cchValue==0 && x._user == null );
+        assert x == null || x.isNormal(p) || (x.isVacant() && x._cchValue == 0 && x._user == null);
         assert _state == REGISTERED || _state == EMBEDDED;
-        assert _state == EMBEDDED || (_xobj == null || !isOnList( _xobj._embedded ));
-        assert _state == REGISTERED || (_xobj != null && isOnList( _xobj._embedded ));
+        assert _state == EMBEDDED || (_xobj == null || !isOnList(_xobj._embedded));
+        assert _state == REGISTERED || (_xobj != null && isOnList(_xobj._embedded));
 
-        moveToNoCheck( x, p );
+        moveToNoCheck(x, p);
 
-        assert isNormal() ||  ( _xobj.isVacant() && _xobj._cchValue==0 && _xobj._user == null );
+        assert isNormal() || (_xobj.isVacant() && _xobj._cchValue == 0 && _xobj._user == null);
     }
 
-    void moveToNoCheck ( Xobj x, int p )
-    {
-        if (_state == EMBEDDED && x != _xobj)
-        {
-            _xobj._embedded = listRemove( _xobj._embedded );
-            _locale._registered = listInsert( _locale._registered );
+    void moveToNoCheck(Xobj x, int p) {
+        if (_state == EMBEDDED && x != _xobj) {
+            _xobj._embedded = listRemove(_xobj._embedded);
+            _locale._registered = listInsert(_locale._registered);
             _state = REGISTERED;
         }
 
@@ -464,429 +472,396 @@ final class Cur
         _pos = p;
     }
 
-    void moveToCur ( Cur to )
-    {
+    void moveToCur(Cur to) {
         assert isNormal() && (to == null || to.isNormal());
 
-        if (to == null)
-            moveTo( null, NO_POS );
-        else
-            moveTo( to._xobj, to._pos );
+        if (to == null) {
+            moveTo(null, NO_POS);
+        } else {
+            moveTo(to._xobj, to._pos);
+        }
     }
 
-    void moveToDom ( Dom d )
-    {
+    void moveToDom(Dom d) {
         assert _locale == d.locale();
-        assert d instanceof Xobj || d instanceof Xobj.SoapPartDom;
+        assert d instanceof Xobj || d instanceof SoapPartDom;
 
-        moveTo( d instanceof Xobj ? (Xobj) d : ((Xobj.SoapPartDom) d)._docXobj );
+        moveTo(d instanceof Xobj ? (Xobj) d : ((SoapPartDom) d)._docXobj);
     }
 
-    static final class Locations
-    {
+    static final class Locations {
         private static final int NULL = -1;
 
-        Locations ( Locale l )
-        {
+        Locations(Locale l) {
             _locale = l;
 
-            _xobjs = new Xobj [ _initialSize ];
-            _poses = new int  [ _initialSize ];
-            _curs  = new Cur  [ _initialSize ];
-            _next  = new int  [ _initialSize ];
-            _prev  = new int  [ _initialSize ];
-            _nextN = new int  [ _initialSize ];
-            _prevN = new int  [ _initialSize ];
-
-            for ( int i = _initialSize - 1 ; i >= 0 ; i-- )
-            {
-                assert _xobjs[ i ] == null;
-                _poses [ i ] = NO_POS;
-                _next  [ i ] = i + 1;
-                _prev  [ i ] = NULL;
-                _nextN [ i ] = NULL;
-                _prevN [ i ] = NULL;
+            _xobjs = new Xobj[_initialSize];
+            _poses = new int[_initialSize];
+            _curs = new Cur[_initialSize];
+            _next = new int[_initialSize];
+            _prev = new int[_initialSize];
+            _nextN = new int[_initialSize];
+            _prevN = new int[_initialSize];
+
+            for (int i = _initialSize - 1; i >= 0; i--) {
+                assert _xobjs[i] == null;
+                _poses[i] = NO_POS;
+                _next[i] = i + 1;
+                _prev[i] = NULL;
+                _nextN[i] = NULL;
+                _prevN[i] = NULL;
             }
 
-            _next [ _initialSize - 1 ] = NULL;
+            _next[_initialSize - 1] = NULL;
 
             _free = 0;
             _naked = NULL;
         }
 
-        boolean isSamePos ( int i, Cur c )
-        {
-            if (_curs[ i ] == null)
-                return c._xobj == _xobjs[ i ] && c._pos == _poses[ i ];
-            else
-                return c.isSamePos( _curs[ i ] );
+        boolean isSamePos(int i, Cur c) {
+            if (_curs[i] == null) {
+                return c._xobj == _xobjs[i] && c._pos == _poses[i];
+            } else {
+                return c.isSamePos(_curs[i]);
+            }
         }
 
-        boolean isAtEndOf ( int i, Cur c )
-        {
-            assert _curs[ i ] != null || _poses[ i ] == 0;
-            assert _curs[ i ] == null || _curs[ i ].isNode();
+        boolean isAtEndOf(int i, Cur c) {
+            assert _curs[i] != null || _poses[i] == 0;
+            assert _curs[i] == null || _curs[i].isNode();
 
-            if (_curs[ i ] == null)
-                return c._xobj == _xobjs[ i ] && c._pos == END_POS;
-            else
-                return c.isAtEndOf( _curs[ i ] );
+            if (_curs[i] == null) {
+                return c._xobj == _xobjs[i] && c._pos == END_POS;
+            } else {
+                return c.isAtEndOf(_curs[i]);
+            }
         }
 
-        void moveTo ( int i, Cur c )
-        {
-            if (_curs[ i ] == null)
-                c.moveTo( _xobjs[ i ], _poses[ i ] );
-            else
-                c.moveToCur( _curs[ i ] );
+        void moveTo(int i, Cur c) {
+            if (_curs[i] == null) {
+                c.moveTo(_xobjs[i], _poses[i]);
+            } else {
+                c.moveToCur(_curs[i]);
+            }
         }
 
-        int insert ( int head, int before, int i )
-        {
-            return insert( head, before, i, _next, _prev );
+        int insert(int head, int before, int i) {
+            return insert(head, before, i, _next, _prev);
         }
 
-        int remove ( int head, int i )
-        {
-            Cur c = _curs[ i ];
+        int remove(int head, int i) {
+            Cur c = _curs[i];
 
-            assert c != null || _xobjs[ i ] != null;
-            assert c != null || _xobjs[ i ] != null;
+            assert c != null || _xobjs[i] != null;
+            assert c != null || _xobjs[i] != null;
 
-            if (c != null)
-            {
-                _curs[ i ].release();
-                _curs[ i ] = null;
+            if (c != null) {
+                _curs[i].release();
+                _curs[i] = null;
 
-                assert _xobjs[ i ] == null;
-                assert _poses [ i ] == NO_POS;
-            }
-            else
-            {
-                assert _xobjs[ i ] != null && _poses[ i ] != NO_POS;
+                assert _xobjs[i] == null;
+                assert _poses[i] == NO_POS;
+            } else {
+                assert _xobjs[i] != null && _poses[i] != NO_POS;
 
-                _xobjs[ i ] = null;
-                _poses[ i ] = NO_POS;
+                _xobjs[i] = null;
+                _poses[i] = NO_POS;
 
-                _naked = remove( _naked, i, _nextN, _prevN );
+                _naked = remove(_naked, i, _nextN, _prevN);
             }
 
-            head = remove( head, i, _next, _prev );
+            head = remove(head, i, _next, _prev);
 
-            _next[ i ] = _free;
+            _next[i] = _free;
             _free = i;
 
             return head;
         }
 
-        int allocate ( Cur addThis )
-        {
+        int allocate(Cur addThis) {
             assert addThis.isPositioned();
 
-            if (_free == NULL)
+            if (_free == NULL) {
                 makeRoom();
+            }
 
             int i = _free;
 
-            _free = _next [ i ];
+            _free = _next[i];
 
-            _next [ i ] = NULL;
-            assert _prev [ i ] == NULL;
+            _next[i] = NULL;
+            assert _prev[i] == NULL;
 
-            assert _curs [ i ] == null;
-            assert _xobjs[ i ] == null;
-            assert _poses[ i ] == NO_POS;
+            assert _curs[i] == null;
+            assert _xobjs[i] == null;
+            assert _poses[i] == NO_POS;
 
-            _xobjs [ i ] = addThis._xobj;
-            _poses [ i ] = addThis._pos;
+            _xobjs[i] = addThis._xobj;
+            _poses[i] = addThis._pos;
 
-            _naked = insert( _naked, NULL, i, _nextN, _prevN );
+            _naked = insert(_naked, NULL, i, _nextN, _prevN);
 
             return i;
         }
 
-        private static int insert ( int head, int before, int i, int[] next, int[] prev )
-        {
-            if (head == NULL)
-            {
+        private static int insert(int head, int before, int i, int[] next, int[] prev) {
+            if (head == NULL) {
                 assert before == NULL;
-                prev[ i ] = i;
+                prev[i] = i;
                 head = i;
-            }
-            else if (before != NULL)
-            {
-                prev[ i ] = prev[ before ];
-                next[ i ] = before;
-                prev[ before ] = i;
+            } else if (before != NULL) {
+                prev[i] = prev[before];
+                next[i] = before;
+                prev[before] = i;
 
                 if (head == before)
                     head = i;
-            }
-            else
-            {
-                prev[ i ] = prev[ head ];
-                assert next[ i ] == NULL;
-                next[ prev[ head ] ] = i;
-                prev[ head ] = i;
+            } else {
+                prev[i] = prev[head];
+                assert next[i] == NULL;
+                next[prev[head]] = i;
+                prev[head] = i;
             }
 
             return head;
         }
 
-        private static int remove ( int head, int i, int[] next, int[] prev )
-        {
-            if (prev[ i ] == i)
-            {
+        private static int remove(int head, int i, int[] next, int[] prev) {
+            if (prev[i] == i) {
                 assert head == i;
                 head = NULL;
-            }
-            else
-            {
-                if (head == i)
-                    head = next[ i ];
-                else
-                    next[ prev [ i ] ] = next[ i ];
-
-                if (next[ i ] == NULL)
-                    prev[ head ] = prev[ i ];
-                else
-                {
-                    prev[ next[ i ] ] = prev[ i ];
-                    next[ i ] = NULL;
+            } else {
+                if (head == i) {
+                    head = next[i];
+                } else {
+                    next[prev[i]] = next[i];
+                }
+
+                if (next[i] == NULL) {
+                    prev[head] = prev[i];
+                } else {
+                    prev[next[i]] = prev[i];
+                    next[i] = NULL;
                 }
             }
 
-            prev[ i ] = NULL;
-            assert next[ i ] == NULL;
+            prev[i] = NULL;
+            assert next[i] == NULL;
 
             return head;
         }
 
-        void notifyChange ( )
-        {
-            for ( int i ; (i = _naked) != NULL ; )
-            {
-                assert _curs[ i ] == null && _xobjs[ i ] != null && _poses[ i ] != NO_POS;
+        void notifyChange() {
+            for (int i; (i = _naked) != NULL; ) {
+                assert _curs[i] == null && _xobjs[i] != null && _poses[i] != NO_POS;
 
-                _naked = remove( _naked, i, _nextN, _prevN );
+                _naked = remove(_naked, i, _nextN, _prevN);
 
-                _curs[ i ] = _locale.getCur();
-                _curs[ i ].moveTo( _xobjs[ i ], _poses[ i ] );
+                _curs[i] = _locale.getCur();
+                _curs[i].moveTo(_xobjs[i], _poses[i]);
 
-                _xobjs[ i ] = null;
-                _poses[ i ] = NO_POS;
+                _xobjs[i] = null;
+                _poses[i] = NO_POS;
             }
         }
 
-        int next ( int i ) { return _next[ i ]; }
-        int prev ( int i ) { return _prev[ i ]; }
+        int next(int i) {
+            return _next[i];
+        }
 
-        private void makeRoom ( )
-        {
+        int prev(int i) {
+            return _prev[i];
+        }
+
+        private void makeRoom() {
             assert _free == NULL;
 
             int l = _xobjs.length;
 
-            Xobj [] oldXobjs = _xobjs;
-            int  [] oldPoses = _poses;
-            Cur  [] oldCurs  = _curs;
-            int  [] oldNext  = _next;
-            int  [] oldPrev  = _prev;
-            int  [] oldNextN = _nextN;
-            int  [] oldPrevN = _prevN;
-
-            _xobjs = new Xobj [ l * 2 ];
-            _poses = new int  [ l * 2 ];
-            _curs  = new Cur  [ l * 2 ];
-            _next  = new int  [ l * 2 ];
-            _prev  = new int  [ l * 2 ];
-            _nextN = new int  [ l * 2 ];
-            _prevN = new int  [ l * 2 ];
-
-            System.arraycopy( oldXobjs, 0, _xobjs, 0, l );
-            System.arraycopy( oldPoses,  0, _poses, 0, l );
-            System.arraycopy( oldCurs,  0, _curs,  0, l );
-            System.arraycopy( oldNext,  0, _next,  0, l );
-            System.arraycopy( oldPrev,  0, _prev,  0, l );
-            System.arraycopy( oldNextN, 0, _nextN, 0, l );
-            System.arraycopy( oldPrevN, 0, _prevN, 0, l );
-
-            for ( int i = l * 2 - 1 ; i >= l ; i-- )
-            {
-                _next  [ i ] = i + 1;
-                _prev  [ i ] = NULL;
-                _nextN [ i ] = NULL;
-                _prevN [ i ] = NULL;
-                _poses [ i ] = NO_POS;
+            Xobj[] oldXobjs = _xobjs;
+            int[] oldPoses = _poses;
+            Cur[] oldCurs = _curs;
+            int[] oldNext = _next;
+            int[] oldPrev = _prev;
+            int[] oldNextN = _nextN;
+            int[] oldPrevN = _prevN;
+
+            _xobjs = new Xobj[l * 2];
+            _poses = new int[l * 2];
+            _curs = new Cur[l * 2];
+            _next = new int[l * 2];
+            _prev = new int[l * 2];
+            _nextN = new int[l * 2];
+            _prevN = new int[l * 2];
+
+            System.arraycopy(oldXobjs, 0, _xobjs, 0, l);
+            System.arraycopy(oldPoses, 0, _poses, 0, l);
+            System.arraycopy(oldCurs, 0, _curs, 0, l);
+            System.arraycopy(oldNext, 0, _next, 0, l);
+            System.arraycopy(oldPrev, 0, _prev, 0, l);
+            System.arraycopy(oldNextN, 0, _nextN, 0, l);
+            System.arraycopy(oldPrevN, 0, _prevN, 0, l);
+
+            for (int i = l * 2 - 1; i >= l; i--) {
+                _next[i] = i + 1;
+                _prev[i] = NULL;
+                _nextN[i] = NULL;
+                _prevN[i] = NULL;
+                _poses[i] = NO_POS;
             }
 
-            _next [ l * 2 - 1 ] = NULL;
+            _next[l * 2 - 1] = NULL;
 
             _free = l;
         }
 
         private static final int _initialSize = 32;
 
-        private Locale _locale;
+        private final Locale _locale;
 
-        private Xobj [] _xobjs;
-        private int  [] _poses;
-        private Cur  [] _curs;
-        private int  [] _next;
-        private int  [] _prev;
-        private int  [] _nextN;
-        private int  [] _prevN;
+        private Xobj[] _xobjs;
+        private int[] _poses;
+        private Cur[] _curs;
+        private int[] _next;
+        private int[] _prev;
+        private int[] _nextN;
+        private int[] _prevN;
 
         private int _free;   // Unused entries
         private int _naked;  // Entries without Curs
     }
 
-    void push ( )
-    {
+    void push() {
         assert isPositioned();
 
-        int i = _locale._locations.allocate( this );
-        _stackTop = _locale._locations.insert( _stackTop, _stackTop, i );
-    }
-
-    void pop ( boolean stay )
-    {
-        if (stay)
-            popButStay();
-        else
-            pop();
+        int i = _locale._locations.allocate(this);
+        _stackTop = _locale._locations.insert(_stackTop, _stackTop, i);
     }
 
-    void popButStay ( )
-    {
-        if (_stackTop != Locations.NULL)
-            _stackTop = _locale._locations.remove( _stackTop, _stackTop );
+    void popButStay() {
+        if (_stackTop != Locations.NULL) {
+            _stackTop = _locale._locations.remove(_stackTop, _stackTop);
+        }
     }
 
-    boolean pop ( )
-    {
-        if (_stackTop == Locations.NULL)
+    boolean pop() {
+        if (_stackTop == Locations.NULL) {
             return false;
+        }
 
-        _locale._locations.moveTo( _stackTop, this );
-        _stackTop = _locale._locations.remove( _stackTop, _stackTop );
+        _locale._locations.moveTo(_stackTop, this);
+        _stackTop = _locale._locations.remove(_stackTop, _stackTop);
 
         return true;
     }
 
-    boolean isAtLastPush ( )
-    {
+    boolean isAtLastPush() {
         assert _stackTop != Locations.NULL;
 
-        return _locale._locations.isSamePos( _stackTop, this );
+        return _locale._locations.isSamePos(_stackTop, this);
     }
 
-    boolean isAtEndOfLastPush ( )
-    {
+    boolean isAtEndOfLastPush() {
         assert _stackTop != Locations.NULL;
 
-        return _locale._locations.isAtEndOf( _stackTop, this );
+        return _locale._locations.isAtEndOf(_stackTop, this);
     }
 
-    void addToSelection ( Cur that )
-    {
+    void addToSelection(Cur that) {
         assert that != null && that.isNormal();
         assert isPositioned() && that.isPositioned();
 
-        int i = _locale._locations.allocate( that );
-        _selectionFirst = _locale._locations.insert( _selectionFirst, Locations.NULL, i );
+        int i = _locale._locations.allocate(that);
+        _selectionFirst = _locale._locations.insert(_selectionFirst, Locations.NULL, i);
 
         _selectionCount++;
     }
 
-    void addToSelection ( )
-    {
+    void addToSelection() {
         assert isPositioned();
 
-        int i = _locale._locations.allocate( this );
-        _selectionFirst = _locale._locations.insert( _selectionFirst, Locations.NULL, i );
+        int i = _locale._locations.allocate(this);
+        _selectionFirst = _locale._locations.insert(_selectionFirst, Locations.NULL, i);
 
         _selectionCount++;
     }
 
-    private int selectionIndex ( int i )
-    {
+    private int selectionIndex(int i) {
         assert _selectionN >= -1 && i >= 0 && i < _selectionCount;
 
-        if (_selectionN == -1)
-        {
+        if (_selectionN == -1) {
             _selectionN = 0;
             _selectionLoc = _selectionFirst;
         }
 
-        while ( _selectionN < i )
-        {
-            _selectionLoc = _locale._locations.next( _selectionLoc );
+        while (_selectionN < i) {
+            _selectionLoc = _locale._locations.next(_selectionLoc);
             _selectionN++;
         }
 
-        while ( _selectionN > i )
-        {
-            _selectionLoc = _locale._locations.prev( _selectionLoc );
+        while (_selectionN > i) {
+            _selectionLoc = _locale._locations.prev(_selectionLoc);
             _selectionN--;
         }
 
         return _selectionLoc;
     }
 
-    void removeSelection ( int i )
-    {
-        assert i >= 0 && i < _selectionCount;
+    void removeFirstSelection() {
+        final int i = 0;
+        assert i < _selectionCount;
 
-        int j = selectionIndex( i );
+        int j = selectionIndex(i);
 
         // Update the nth selection indices to accomodate the deletion
 
-        if (i < _selectionN)
+        if (i < _selectionN) {
             _selectionN--;
-        else if (i == _selectionN)
-        {
+        } else if (i == _selectionN) {
             _selectionN--;
-
-            if (i == 0)
-                _selectionLoc = Locations.NULL;
-            else
-                _selectionLoc = _locale._locations.prev( _selectionLoc );
+            _selectionLoc = Locations.NULL;
         }
 
-        _selectionFirst = _locale._locations.remove( _selectionFirst, j );
+        _selectionFirst = _locale._locations.remove(_selectionFirst, j);
 
         _selectionCount--;
     }
 
-    int selectionCount ( )
-    {
+    int selectionCount() {
         return _selectionCount;
     }
 
-    void moveToSelection ( int i )
-    {
+    void moveToSelection(int i) {
         assert i >= 0 && i < _selectionCount;
 
-        _locale._locations.moveTo( selectionIndex( i ), this );
+        _locale._locations.moveTo(selectionIndex(i), this);
     }
 
-    void clearSelection ( )
-    {
+    void clearSelection() {
         assert _selectionCount >= 0;
 
-        while ( _selectionCount > 0 )
-            removeSelection( 0 );
+        while (_selectionCount > 0) {
+            removeFirstSelection();
+        }
+    }
+
+    boolean toParent() {
+        return toParent(false);
     }
 
-    boolean toParent    ( ) { return toParent( false ); }
-    boolean toParentRaw ( ) { return toParent( true  ); }
+    boolean toParentRaw() {
+        return toParent(true);
+    }
 
-    Xobj getParent    ( ) { return getParent( false ); }
-    Xobj getParentRaw ( ) { return getParent( true  ); }
+    Xobj getParent() {
+        return getParent(false);
+    }
 
-    boolean hasParent ( )
-    {
+    Xobj getParentRaw() {
+        return getParent(true);
+    }
+
+    boolean hasParent() {
         assert isPositioned();
 
         if (_pos == END_POS || (_pos >= 1 && _pos < _xobj.posAfter()))
@@ -897,8 +872,7 @@ final class Cur
         return _xobj._parent != null;
     }
 
-    Xobj getParentNoRoot()
-    {
+    Xobj getParentNoRoot() {
         assert isPositioned();
 
         if (_pos == END_POS || (_pos >= 1 && _pos < _xobj.posAfter()))
@@ -912,8 +886,7 @@ final class Cur
         return null;
     }
 
-    Xobj getParent ( boolean raw )
-    {
+    Xobj getParent(boolean raw) {
         assert isPositioned();
 
         if (_pos == END_POS || (_pos >= 1 && _pos < _xobj.posAfter()))
@@ -934,31 +907,27 @@ final class Cur
         Xobj root = r._xobj;
 
         r.next();
-        moveNode( r );
+        moveNode(r);
         r.release();
 
         return root;
     }
 
-    boolean toParent ( boolean raw )
-    {
-        Xobj parent = getParent( raw );
+    boolean toParent(boolean raw) {
+        Xobj parent = getParent(raw);
 
         if (parent == null)
             return false;
 
-        moveTo( parent );
+        moveTo(parent);
 
         return true;
     }
 
-    void toRoot ()
-    {
+    void toRoot() {
         Xobj xobj = _xobj;
-        while (!xobj.isRoot())
-        {
-            if (xobj._parent==null)
-            {
+        while (!xobj.isRoot()) {
+            if (xobj._parent == null) {
                 Cur r = _locale.tempCur();
 
                 r.createRoot();
@@ -966,7 +935,7 @@ final class Cur
                 Xobj root = r._xobj;
 
                 r.next();
-                moveNode( r );
+                moveNode(r);
                 r.release();
 
                 xobj = root;
@@ -977,121 +946,104 @@ final class Cur
         moveTo(xobj);
     }
 
-    boolean hasText ( )
-    {
+    boolean hasText() {
         assert isNode();
 
         return _xobj.hasTextEnsureOccupancy();
     }
 
-    boolean hasAttrs ( )
-    {
+    boolean hasAttrs() {
         assert isNode();
 
         return _xobj.hasAttrs();
     }
 
-    boolean hasChildren ( )
-    {
+    boolean hasChildren() {
         assert isNode();
 
         return _xobj.hasChildren();
     }
 
-    boolean toFirstChild ( )
-    {
+    boolean toFirstChild() {
         assert isNode();
 
         if (!_xobj.hasChildren())
             return false;
 
-        for ( Xobj x = _xobj._firstChild ; ; x = x._nextSibling )
-        {
-            if (!x.isAttr())
-            {
-                moveTo( x );
+        for (Xobj x = _xobj._firstChild; ; x = x._nextSibling) {
+            if (!x.isAttr()) {
+                moveTo(x);
                 return true;
             }
         }
     }
 
-    protected boolean toLastChild ( )
-    {
+    protected boolean toLastChild() {
         assert isNode();
 
         if (!_xobj.hasChildren())
             return false;
 
-        moveTo( _xobj._lastChild );
+        moveTo(_xobj._lastChild);
 
         return true;
     }
 
-    boolean toNextSibling ( )
-    {
+    boolean toNextSibling() {
         assert isNode();
 
-        if (_xobj.isAttr())
-        {
-            if (_xobj._nextSibling != null && _xobj._nextSibling.isAttr())
-            {
-                moveTo( _xobj._nextSibling );
+        if (_xobj.isAttr()) {
+            if (_xobj._nextSibling != null && _xobj._nextSibling.isAttr()) {
+                moveTo(_xobj._nextSibling);
                 return true;
             }
-        }
-        else if (_xobj._nextSibling != null)
-        {
-            moveTo( _xobj._nextSibling );
+        } else if (_xobj._nextSibling != null) {
+            moveTo(_xobj._nextSibling);
             return true;
         }
 
         return false;
     }
 
-    void setValueAsQName ( QName qname )
-    {
+    void setValueAsQName(QName qname) {
         assert isNode();
 
-        String value  = qname.getLocalPart();
-        String ns     = qname.getNamespaceURI();
+        String value = qname.getLocalPart();
+        String ns = qname.getNamespaceURI();
 
         String prefix =
             prefixForNamespace(
-                ns, qname.getPrefix().length() > 0 ? qname.getPrefix() : null, true );
+                ns, qname.getPrefix().length() > 0 ? qname.getPrefix() : null, true);
 
         if (prefix.length() > 0)
             value = prefix + ":" + value;
 
-        setValue( value );
+        setValue(value);
     }
 
-    void setValue ( String value )
-    {
+    void setValue(String value) {
         assert isNode();
 
-        moveNodeContents( null, false );
+        moveNodeContents(null, false);
 
         next();
 
-        insertString( value );
+        insertString(value);
 
         toParent();
     }
 
-    void removeFollowingAttrs ( )
-    {
+    void removeFollowingAttrs() {
         assert isAttr();
 
         QName attrName = getName();
 
         push();
 
-        if (toNextAttr())
-        {
-            while ( isAttr() )
-            {
-                if (getName().equals( attrName ))
-                    moveNode( null );
+        if (toNextAttr()) {
+            while (isAttr()) {
+                if (getName().equals(attrName))
+                    moveNode(null);
                 else if (!toNextAttr())
                     break;
             }
@@ -1100,131 +1052,121 @@ final class Cur
         pop();
     }
 
-    String getAttrValue ( QName name )
-    {
+    String getAttrValue(QName name) {
         String s = null;
 
         push();
 
-        if (toAttr( name ))
+        if (toAttr(name)) {
             s = getValueAsString();
+        }
 
         pop();
 
         return s;
     }
 
-    void setAttrValueAsQName ( QName name, QName value )
-    {
+    void setAttrValueAsQName(QName value) {
         assert isContainer();
 
-        if (value == null)
-        {
-            _xobj.removeAttr( name );
-        }
-        else
-        {
-            if (toAttr( name ))
-            {
-                removeFollowingAttrs();
-            }
-            else
-            {
-                next();
-                createAttr( name );
-            }
+        final QName name = Locale._xsiType;
 
-            setValueAsQName( value );
+        if (value == null) {
+            _xobj.removeAttr(name);
+            return;
+        }
 
-            toParent();
+        if (toAttr(name)) {
+            removeFollowingAttrs();
+        } else {
+            next();
+            createAttr(name);
         }
+        setValueAsQName(value);
+        toParent();
     }
 
-    boolean removeAttr ( QName name )
-    {
+    boolean removeAttr(QName name) {
         assert isContainer();
 
-        return _xobj.removeAttr( name );
+        return _xobj.removeAttr(name);
     }
 
-    void setAttrValue ( QName name, String value )
-    {
+    void setAttrValue(QName name, String value) {
         assert isContainer();
 
-        _xobj.setAttr( name, value );
+        _xobj.setAttr(name, value);
     }
 
-    boolean toAttr ( QName name )
-    {
+    boolean toAttr(QName name) {
         assert isNode();
 
-        Xobj a = _xobj.getAttr( name );
+        Xobj a = _xobj.getAttr(name);
 
         if (a == null)
             return false;
 
-        moveTo( a );
+        moveTo(a);
 
         return true;
     }
 
-    boolean toFirstAttr ( )
-    {
+    boolean toFirstAttr() {
         assert isNode();
 
         Xobj firstAttr = _xobj.firstAttr();
 
-        if (firstAttr == null)
+        if (firstAttr == null) {
             return false;
+        }
 
-        moveTo( firstAttr );
+        moveTo(firstAttr);
 
         return true;
     }
 
-    boolean toLastAttr ( )
-    {
+    boolean toLastAttr() {
         assert isNode();
 
-        if (!toFirstAttr())
+        if (!toFirstAttr()) {
             return false;
+        }
 
-        while ( toNextAttr() )
-            ;
+        //noinspection StatementWithEmptyBody
+        while (toNextAttr()) ;
 
         return true;
     }
 
-    boolean toNextAttr ( )
-    {
+    boolean toNextAttr() {
         assert isAttr() || isContainer();
 
         Xobj nextAttr = _xobj.nextAttr();
 
-        if (nextAttr == null)
+        if (nextAttr == null) {
             return false;
+        }
 
-        moveTo( nextAttr );
+        moveTo(nextAttr);
 
         return true;
     }
 
-    boolean toPrevAttr ( )
-    {
-        if (isAttr())
-        {
-            if (_xobj._prevSibling == null)
-                moveTo( _xobj.ensureParent() );
-            else
-                moveTo( _xobj._prevSibling );
+    @SuppressWarnings("UnusedReturnValue")
+    boolean toPrevAttr() {
+        if (isAttr()) {
+            if (_xobj._prevSibling == null) {
+                moveTo(_xobj.ensureParent());
+            } else {
+                moveTo(_xobj._prevSibling);
+            }
 
             return true;
         }
 
         prev();
 
-        if (!isContainer())
-        {
+        if (!isContainer()) {
             next();
             return false;
         }
@@ -1232,15 +1174,17 @@ final class Cur
         return toLastAttr();
     }
 
-    boolean skipWithAttrs ( )
-    {
+    @SuppressWarnings("UnusedReturnValue")
+    boolean skipWithAttrs() {
         assert isNode();
 
-        if (skip())
+        if (skip()) {
             return true;
+        }
 
-        if (_xobj.isRoot())
+        if (_xobj.isRoot()) {
             return false;
+        }
 
         assert _xobj.isAttr();
 
@@ -1251,63 +1195,54 @@ final class Cur
         return true;
     }
 
-    boolean skip ( )
-    {
+    boolean skip() {
         assert isNode();
 
         if (_xobj.isRoot())
             return false;
 
-        if (_xobj.isAttr())
-        {
+        if (_xobj.isAttr()) {
             if (_xobj._nextSibling == null || !_xobj._nextSibling.isAttr())
                 return false;
 
-            moveTo( _xobj._nextSibling, 0 );
-        }
-        else
-            moveTo( getNormal( _xobj, _xobj.posAfter() ), _posTemp );
+            moveTo(_xobj._nextSibling, 0);
+        } else
+            moveTo(getNormal(_xobj, _xobj.posAfter()), _posTemp);
 
         return true;
     }
 
-    void toEnd ( )
-    {
+    void toEnd() {
         assert isNode();
 
-        moveTo( _xobj, END_POS );
+        moveTo(_xobj, END_POS);
     }
 
-    void moveToCharNode ( CharNode node )
-    {
+    void moveToCharNode(CharNode node) {
         assert node.getDom() != null && node.getDom().locale() == _locale;
 
-        moveToDom( node.getDom() );
+        moveToDom(node.getDom());
 
         CharNode n;
 
         _xobj.ensureOccupancy();
 
         n = _xobj._charNodesValue =
-            updateCharNodes( _locale, _xobj, _xobj._charNodesValue, _xobj._cchValue );
+            updateCharNodes(_locale, _xobj, _xobj._charNodesValue, _xobj._cchValue);
 
-        for ( ; n != null ; n = n._next )
-        {
-            if (node == n)
-            {
-                moveTo( getNormal( _xobj, n._off + 1 ), _posTemp );
+        for (; n != null; n = n._next) {
+            if (node == n) {
+                moveTo(getNormal(_xobj, n._off + 1), _posTemp);
                 return;
             }
         }
 
         n = _xobj._charNodesAfter =
-            updateCharNodes( _locale, _xobj, _xobj._charNodesAfter, _xobj._cchAfter );
+            updateCharNodes(_locale, _xobj, _xobj._charNodesAfter, _xobj._cchAfter);
 
-        for ( ; n != null ; n = n._next )
-        {
-            if (node == n)
-            {
-                moveTo( getNormal( _xobj, n._off + _xobj._cchValue + 2 ), _posTemp );
+        for (; n != null; n = n._next) {
+            if (node == n) {
+                moveTo(getNormal(_xobj, n._off + _xobj._cchValue + 2), _posTemp);
                 return;
             }
         }
@@ -1315,40 +1250,42 @@ final class Cur
         assert false;
     }
 
-    boolean prevWithAttrs ( )
-    {
-        if (prev())
+    @SuppressWarnings("UnusedReturnValue")
+    boolean prevWithAttrs() {
+        if (prev()) {
             return true;
+        }
 
-        if (!isAttr())
+        if (!isAttr()) {
             return false;
+        }
 
         toParent();
 
         return true;
     }
 
-    boolean prev ( )
-    {
+    boolean prev() {
         assert isPositioned();
 
-        if (_xobj.isRoot() && _pos == 0)
+        if (_xobj.isRoot() && _pos == 0) {
             return false;
+        }
 
-        if (_xobj.isAttr() && _pos == 0 && _xobj._prevSibling == null)
+        if (_xobj.isAttr() && _pos == 0 && _xobj._prevSibling == null) {
             return false;
+        }
 
         Xobj x = getDenormal();
-        int  p = _posTemp;
+        int p = _posTemp;
 
-        assert p > 0 && p != END_POS;
+        assert p > 0;
 
         int pa = x.posAfter();
 
-        if (p > pa)
+        if (p > pa) {
             p = pa;
-        else if (p == pa)
-        {
+        } else if (p == pa) {
             // Text after an attr is allowed only on the last attr,
             // and that text belongs to the parent container..
             //
@@ -1356,122 +1293,104 @@ final class Cur
             // inside the container, and we need to skip the attrs.
 
             if (x.isAttr() &&
-                (x._cchAfter > 0 || x._nextSibling == null || !x._nextSibling.isAttr()))
-            {
+                (x._cchAfter > 0 || x._nextSibling == null || !x._nextSibling.isAttr())) {
                 x = x.ensureParent();
                 p = 0;
-            }
-            else
+            } else {
                 p = END_POS;
-        }
-        else if (p == pa - 1)
-        {
+            }
+        } else if (p == pa - 1) {
             x.ensureOccupancy();
             p = x._cchValue > 0 ? 1 : 0;
-        }
-        else if (p > 1)
+        } else if (p > 1) {
             p = 1;
-        else
-        {
+        } else {
+            //noinspection ConstantConditions
             assert p == 1;
             p = 0;
         }
 
-        moveTo( getNormal( x, p ), _posTemp );
+        moveTo(getNormal(x, p), _posTemp);
 
         return true;
     }
 
-    boolean next ( boolean withAttrs )
-    {
+    @SuppressWarnings("UnusedReturnValue")
+    boolean next(boolean withAttrs) {
         return withAttrs ? nextWithAttrs() : next();
     }
 
-    boolean nextWithAttrs ( )
-    {
+    boolean nextWithAttrs() {
         int k = kind();
 
-        if (kindIsContainer( k ))
-        {
-            if (toFirstAttr())
+        if (kindIsContainer(k)) {
+            if (toFirstAttr()) {
                 return true;
-        }
-        else if (k == -ATTR)
-        {
-            if (next())
+            }
+        } else if (k == -ATTR) {
+            if (next()) {
                 return true;
+            }
 
             toParent();
 
-            if (!toParentRaw())
+            if (!toParentRaw()) {
                 return false;
+            }
         }
 
         return next();
     }
 
-    boolean next ( )
-    {
+    boolean next() {
         assert isNormal();
 
         Xobj x = _xobj;
-        int  p = _pos;
+        int p = _pos;
 
         int pa = x.posAfter();
 
-        if (p >= pa)
+        if (p >= pa) {
             p = _xobj.posMax();
-        else if (p == END_POS)
-        {
-            if (x.isRoot() || (x.isAttr() && (x._nextSibling == null || !x._nextSibling.isAttr())))
+        } else if (p == END_POS) {
+            if (x.isRoot() || (x.isAttr() && (x._nextSibling == null || !x._nextSibling.isAttr()))) {
                 return false;
+            }
 
             p = pa;
-        }
-        else if (p > 0)
-        {
+        } else if (p > 0) {
             assert x._firstChild == null || !x._firstChild.isAttr();
 
-            if (x._firstChild != null)
-            {
+            if (x._firstChild != null) {
                 x = x._firstChild;
                 p = 0;
-            }
-            else
+            } else {
                 p = END_POS;
-        }
-        else
-        {
+            }
+        } else {
             assert p == 0;
 
             x.ensureOccupancy();
 
             p = 1;
 
-            if (x._cchValue == 0)
-            {
-                if (x._firstChild != null)
-                {
-                    if (x._firstChild.isAttr())
-                    {
+            if (x._cchValue == 0) {
+                if (x._firstChild != null) {
+                    if (x._firstChild.isAttr()) {
                         Xobj a = x._firstChild;
 
-                        while ( a._nextSibling != null && a._nextSibling.isAttr() )
+                        while (a._nextSibling != null && a._nextSibling.isAttr()) {
                             a = a._nextSibling;
+                        }
 
-                        if (a._cchAfter > 0)
-                        {
+                        if (a._cchAfter > 0) {
                             x = a;
                             p = a.posAfter();
-                        }
-                        else if (a._nextSibling != null)
-                        {
+                        } else if (a._nextSibling != null) {
                             x = a._nextSibling;
                             p = 0;
                         }
-                    }
-                    else
-                    {
+                    } else {
                         x = x._firstChild;
                         p = 0;
                     }
@@ -1479,13 +1398,12 @@ final class Cur
             }
         }
 
-        moveTo( getNormal( x, p ), _posTemp );
+        moveTo(getNormal(x, p), _posTemp);
 
         return true;
     }
 
-    int prevChars ( int cch )
-    {
+    int prevChars(int cch) {
         assert isPositioned();
 
         int cchLeft = cchLeft();
@@ -1496,13 +1414,12 @@ final class Cur
         // Dang, I love this stmt :-)
 
         if (cch != 0)
-            moveTo( getNormal( getDenormal(), _posTemp - cch ), _posTemp );
+            moveTo(getNormal(getDenormal(), _posTemp - cch), _posTemp);
 
         return cch;
     }
 
-    int nextChars ( int cch )
-    {
+    int nextChars(int cch) {
         assert isPositioned();
 
         int cchRight = cchRight();
@@ -1510,25 +1427,23 @@ final class Cur
         if (cchRight == 0)
             return 0;
 
-        if (cch < 0 || cch >= cchRight)
-        {
+        if (cch < 0 || cch >= cchRight) {
             // Use next to not skip over children
             next();
             return cchRight;
         }
 
-        moveTo( getNormal( _xobj, _pos + cch ), _posTemp );
+        moveTo(getNormal(_xobj, _pos + cch), _posTemp);
 
         return cch;
     }
 
-    void setCharNodes ( CharNode nodes )
-    {
+    void setCharNodes(CharNode nodes) {
         assert nodes == null || _locale == nodes.locale();
         assert isPositioned();
 
         Xobj x = getDenormal();
-        int  p = _posTemp;
+        int p = _posTemp;
 
         assert !x.isRoot() || (p > 0 && p < x.posAfter());
 
@@ -1537,15 +1452,14 @@ final class Cur
         else
             x._charNodesValue = nodes;
 
-        for ( ; nodes != null ; nodes = nodes._next )
-            nodes.setDom( (Dom) x );
+        for (; nodes != null; nodes = nodes._next)
+            nodes.setDom((Dom) x);
 
         // No Need to notify text change or alter version, text nodes are
         // not part of the infoset
     }
 
-    CharNode getCharNodes ( )
-    {
+    CharNode getCharNodes() {
         assert isPositioned();
         assert !isRoot();
 
@@ -1553,36 +1467,32 @@ final class Cur
 
         CharNode nodes;
 
-        if (_posTemp >= x.posAfter())
-        {
+        if (_posTemp >= x.posAfter()) {
             nodes = x._charNodesAfter =
-                updateCharNodes( _locale, x, x._charNodesAfter, x._cchAfter );
-        }
-        else
-        {
+                updateCharNodes(_locale, x, x._charNodesAfter, x._cchAfter);
+        } else {
             x.ensureOccupancy();
 
             nodes = x._charNodesValue =
-                updateCharNodes( _locale, x, x._charNodesValue, x._cchValue );
+                updateCharNodes(_locale, x, x._charNodesValue, x._cchValue);
         }
 
         return nodes;
     }
 
-   // private
-    static CharNode updateCharNodes ( Locale l, Xobj x, CharNode nodes, int cch )
-    {
+    // private
+    static CharNode updateCharNodes(Locale l, Xobj x, CharNode nodes, int cch) {
         assert nodes == null || nodes.locale() == l;
 
         CharNode node = nodes;
         int i = 0;
 
-        while ( node != null && cch > 0 )
-        {
+        while (node != null && cch > 0) {
             assert node.getDom() == x;
 
-            if (node._cch > cch)
+            if (node._cch > cch) {
                 node._cch = cch;
+            }
 
             node._off = i;
             i += node._cch;
@@ -1591,81 +1501,66 @@ final class Cur
             node = node._next;
         }
 
-        if (cch <= 0)
-        {
-            for ( ; node != null ; node = node._next )
-            {
+        if (cch <= 0) {
+            for (; node != null; node = node._next) {
                 assert node.getDom() == x;
 
-                if (node._cch != 0)
+                if (node._cch != 0) {
                     node._cch = 0;
+                }
 
                 node._off = i;
             }
-        }
-        else
-        {
+        } else {
             node = l.createTextNode();
-            node.setDom( (Dom) x );
+            node.setDom((Dom) x);
             node._cch = cch;
             node._off = i;
-            nodes = CharNode.appendNode( nodes, node );
+            nodes = CharNode.appendNode(nodes, node);
         }
 
         return nodes;
     }
 
-    final QName getXsiTypeName ( )
-    {
+    final QName getXsiTypeName() {
         assert isNode();
 
         return _xobj.getXsiTypeName();
     }
 
-    final void setXsiType ( QName value )
-    {
+    final void setXsiType(QName value) {
         assert isContainer();
 
-        setAttrValueAsQName( Locale._xsiType, value );
+        setAttrValueAsQName(value);
     }
 
-    final QName valueAsQName ( )
-    {
-        throw new RuntimeException( "Not implemented" );
+    final String namespaceForPrefix(String prefix, boolean defaultAlwaysMapped) {
+        return _xobj.namespaceForPrefix(prefix, defaultAlwaysMapped);
     }
 
-    final String namespaceForPrefix ( String prefix, boolean defaultAlwaysMapped )
-    {
-        return _xobj.namespaceForPrefix( prefix, defaultAlwaysMapped );
-    }
-
-    final String prefixForNamespace ( String ns, String suggestion, boolean createIfMissing )
-    {
+    final String prefixForNamespace(String ns, String suggestion, boolean createIfMissing) {
         return
             (isContainer() ? _xobj : getParent()).
-                prefixForNamespace( ns, suggestion, createIfMissing );
+                prefixForNamespace(ns, suggestion, createIfMissing);
     }
 
     // Does the node at this cursor properly contain the position specified by the argument
 
-    boolean contains ( Cur that )
-    {
+    boolean contains(Cur that) {
         assert isNode();
         assert that != null && that.isPositioned();
 
-        return _xobj.contains( that );
+        return _xobj.contains(that);
     }
 
-    void insertString ( String s )
-    {
+    void insertString(String s) {
         if (s != null)
-            insertChars( s, 0, s.length() );
+            insertChars(s, 0, s.length());
     }
 
-    void insertChars ( Object src, int off, int cch )
-    {
+    void insertChars(Object src, int off, int cch) {
         assert isPositioned() && !isRoot();
-        assert CharUtil.isValid( src, off, cch );
+        assert CharUtil.isValid(src, off, cch);
 
         // Check for nothing to insert
 
@@ -1687,7 +1582,7 @@ final class Cur
         // the new chars.  Note that a denormalized position can never be <= 0.
 
         Xobj x = getDenormal();
-        int  p = _posTemp;
+        int p = _posTemp;
 
         assert p > 0;
 
@@ -1695,13 +1590,13 @@ final class Cur
         // position after.  This insertChars takes care of all the appropriate invalidations
         // (passing true as last arg).
 
-        x.insertCharsHelper( p, src, off, cch, true );
+        x.insertCharsHelper(p, src, off, cch, true);
 
         // Reposition the cursor to be just before the newly inserted text.  It's current
         // position could have been shifted, or it may have been just before the end tag, or
         // normalized on another Xobj.
 
-        moveTo( x, p );
+        moveTo(x, p);
 
         _locale._versionAll++;
     }
@@ -1709,8 +1604,7 @@ final class Cur
     // Move the chars just after this Cur to the "to" Cur.  If no "to" Cur is specified,
     // then remove the chars.
 
-    Object moveChars ( Cur to, int cchMove )
-    {
+    Object moveChars(Cur to, int cchMove) {
         assert isPositioned();
         assert cchMove <= 0 || cchMove <= cchRight();
         assert to == null || (to.isPositioned() && !to.isRoot());
@@ -1720,8 +1614,7 @@ final class Cur
 
         // If we're instructed to move 0 characters, then return the null triple.
 
-        if (cchMove == 0)
-        {
+        if (cchMove == 0) {
             _offSrc = 0;
             _cchSrc = 0;
 
@@ -1731,40 +1624,35 @@ final class Cur
         // Here I record the triple of the chars to move.  I will return this.  No need to save
         // cch 'cause cchMove will be that value.
 
-        Object srcMoved = getChars( cchMove );
-        int    offMoved = _offSrc;
+        Object srcMoved = getChars(cchMove);
+        int offMoved = _offSrc;
 
         // Either I'm moving text from the value or the after text.  If after, then the container
         // must be occupied.  If in the value, because we're just before text, it must be occupied.
 
         assert isText() && (_pos >= _xobj.posAfter() ? _xobj._parent : _xobj).isOccupied();
 
-        if (to == null)
-        {
+        if (to == null) {
             // In this case, I'm removing chars vs moving them.  Normally I would like to blow
             // them away entirely, but if there are any references to those chars via a bookmark
             // I need to keep them alive.  I do this by moving these chars to a new root.  Note
             // that because Curs will stay behind, I don't have to check for them.
 
-            for ( Bookmark b = _xobj._bookmarks ; b != null ; b = b._next )
-            {
-                if (inChars( b, cchMove, false ))
-                {
+            for (Bookmark b = _xobj._bookmarks; b != null; b = b._next) {
+                if (inChars(b, cchMove, false)) {
                     Cur c = _locale.tempCur();
 
                     c.createRoot();
                     c.next();
 
-                    Object chars = moveChars( c, cchMove );
+                    Object chars = moveChars(c, cchMove);
 
                     c.release();
 
                     return chars;
                 }
             }
-        }
-        else
-        {
+        } else {
             // If the target, "to", is inside or on the edge of the text to be moved, then this
             // is a no-op.  In this case, I still want to return the text "moved".
             //
@@ -1773,13 +1661,12 @@ final class Cur
             // different location, then "to" would be at the beginning of the newly moved chars,
             // and "this" would be at the gap left by the newly removed chars.
 
-            if (inChars( to, cchMove, true ))
-            {
+            if (inChars(to, cchMove, true)) {
                 // BUGBUG - may want to consider shuffling the interior cursors to the right just
                 // like I move "this" to the right...
 
-                to.moveToCur( this );
-                nextChars( cchMove );
+                to.moveToCur(this);
+                nextChars(cchMove);
 
                 _offSrc = offMoved;
                 _cchSrc = cchMove;
@@ -1789,7 +1676,7 @@ final class Cur
 
             // Copy the chars here, I'll remove the originals next
 
-            to.insertChars( srcMoved, offMoved, cchMove );
+            to.insertChars(srcMoved, offMoved, cchMove);
         }
 
         // Notice that I can delay the general change notification to this point because any
@@ -1803,9 +1690,9 @@ final class Cur
         //if ( _xobj != null )
         {
             if (to == null)
-                _xobj.removeCharsHelper( _pos, cchMove, null, NO_POS, false, true );
+                _xobj.removeCharsHelper(_pos, cchMove, null, NO_POS, false, true);
             else
-                _xobj.removeCharsHelper( _pos, cchMove, to._xobj, to._pos, false, true );
+                _xobj.removeCharsHelper(_pos, cchMove, to._xobj, to._pos, false, true);
         }
 
         // Need to update the position of this cursor even though it did not move anywhere.  This
@@ -1821,11 +1708,10 @@ final class Cur
         return srcMoved;
     }
 
-    void moveNode ( Cur to )
-    {
+    void moveNode(Cur to) {
         assert isNode() && !isRoot();
         assert to == null || to.isPositioned();
-        assert to == null || !contains( to );
+        assert to == null || !contains(to);
         assert to == null || !to.isRoot();
 
         // TODO - should assert that is an attr is being moved, it is ok there
@@ -1843,7 +1729,7 @@ final class Cur
         // worry about messing with "this" here given that it not should be treated like any other
         // cursor after this point.
 
-        moveNode( x, to );
+        moveNode(x, to);
     }
 
     // Moves text from one place to another in a low-level way, used as a helper for the higher
@@ -1852,13 +1738,12 @@ final class Cur
     // arguments are denormalized.  The Xobj's must be different from eachother but from the same
     // locale.  The destination must not be not be vacant.
 
-    private static void transferChars ( Xobj xFrom, int pFrom, Xobj xTo, int pTo, int cch )
-    {
+    private static void transferChars(Xobj xFrom, int pFrom, Xobj xTo, int pTo, int cch) {
         assert xFrom != xTo;
         assert xFrom._locale == xTo._locale;
-        assert pFrom > 0 && pFrom <  xFrom.posMax();
-        assert pTo   > 0 && pTo   <= xTo  .posMax();
-        assert cch > 0 && cch <= xFrom.cchRight( pFrom );
+        assert pFrom > 0 && pFrom < xFrom.posMax();
+        assert pTo > 0 && pTo <= xTo.posMax();
+        assert cch > 0 && cch <= xFrom.cchRight(pFrom);
         assert pTo >= xTo.posAfter() || xTo.isOccupied();
 
         // Copy the chars from -> to without performing any invalidations.  This will scoot curs
@@ -1867,23 +1752,21 @@ final class Cur
         // exactly be "correct" here.
 
         xTo.insertCharsHelper(
-            pTo, xFrom.getCharsHelper( pFrom, cch ),
-            xFrom._locale._offSrc, xFrom._locale._cchSrc, false );
+            pTo, xFrom.getCharsHelper(pFrom, cch),
+            xFrom._locale._offSrc, xFrom._locale._cchSrc, false);
 
-        xFrom.removeCharsHelper( pFrom, cch, xTo, pTo, true, false );
+        xFrom.removeCharsHelper(pFrom, cch, xTo, pTo, true, false);
     }
 
     // Moves the node x to "to", or removes it if to is null.
 
-    static void moveNode ( Xobj x, Cur to )
-    {
+    static void moveNode(Xobj x, Cur to) {
         assert x != null && !x.isRoot();
         assert to == null || to.isPositioned();
-        assert to == null || !x.contains( to );
+        assert to == null || !x.contains(to);
         assert to == null || !to.isRoot();
 
-        if (to != null)
-        {
+        if (to != null) {
             // Before I go much further, I want to make sure that if "to" is in the container of
             // a vacant node, I get it occupied.  I do not need to worry about the source being
             // vacant.
@@ -1896,11 +1779,10 @@ final class Cur
             // that I make sure that to gets oved to the beginning of the node.  The position of
             // to in all operations should leave to just before the content moved/inserted.
 
-            if ((to._pos == 0 && to._xobj == x) || to.isJustAfterEnd( x ))
-            {
+            if ((to._pos == 0 && to._xobj == x) || to.isJustAfterEnd(x)) {
                 // TODO - should shuffle contained curs to the right???
 
-                to.moveTo( x );
+                to.moveTo(x);
                 return;
             }
         }
@@ -1912,8 +1794,7 @@ final class Cur
         x._locale._versionAll++;
         x._locale._versionSansText++;
 
-        if (to != null && to._locale != x._locale)
-        {
+        if (to != null && to._locale != x._locale) {
             to._locale.notifyChange();
 
             to._locale._versionAll++;
@@ -1924,9 +1805,8 @@ final class Cur
         // Also, this node may be an attribute -- invalidate special attrs ...
 
         if (x.isAttr())
-            x.invalidateSpecialAttr( to == null ? null : to.getParentRaw() );
-        else
-        {
+            x.invalidateSpecialAttr(to == null ? null : to.getParentRaw());
+        else {
             if (x._parent != null)
                 x._parent.invalidateUser();
 
@@ -1941,8 +1821,9 @@ final class Cur
         // I need to move this text away here so that when I walk the tree next, *all* curs
         // embedded in this node or deeper will be moved off this node.
 
-        if (x._cchAfter > 0)
-            transferChars( x, x.posAfter(), x.getDenormal( 0 ), x.posTemp(), x._cchAfter );
+        if (x._cchAfter > 0) {
+            transferChars(x, x.posAfter(), x.getDenormal(0), x.posTemp(), x._cchAfter);
+        }
 
         assert x._cchAfter == 0;
 
@@ -1952,15 +1833,16 @@ final class Cur
 
         x._locale.embedCurs();
 
-        for ( Xobj y = x ; y != null ; y = y.walk( x, true ) )
-        {
-            while ( y._embedded != null )
-                y._embedded.moveTo( x.getNormal( x.posAfter() ) );
+        for (Xobj y = x; y != null; y = y.walk(x, true)) {
+            while (y._embedded != null) {
+                y._embedded.moveTo(x.getNormal(x.posAfter()));
+            }
 
             y.disconnectUser();
 
-            if (to != null)
+            if (to != null) {
                 y._locale = to._locale;
+            }
         }
 
         // Now, actually remove the node
@@ -1970,8 +1852,7 @@ final class Cur
         // Now, if there is a destination, insert the node there and shuffle the text in the
         // vicinity of the destination appropriately.
 
-        if (to != null)
-        {
+        if (to != null) {
             // To know where I should insert/append the node to move, I need to see where "to"
             // would be if there were no text after it.  However, I need to keep "to" where it
             // is when I move the text after it later.
@@ -1981,8 +1862,7 @@ final class Cur
 
             int cchRight = to.cchRight();
 
-            if (cchRight > 0)
-            {
+            if (cchRight > 0) {
                 to.push();
                 to.next();
                 here = to._xobj;
@@ -1991,33 +1871,31 @@ final class Cur
             }
 
             if (append)
-                here.appendXobj( x );
+                here.appendXobj(x);
             else
-                here.insertXobj( x );
+                here.insertXobj(x);
 
             // The only text I need to move is that to the right of "to".  Even considering all
             // the cases where an attribute is involed!
 
             if (cchRight > 0)
-                transferChars( to._xobj, to._pos, x, x.posAfter(), cchRight );
+                transferChars(to._xobj, to._pos, x, x.posAfter(), cchRight);
 
-            to.moveTo( x );
+            to.moveTo(x);
         }
     }
 
-    void moveNodeContents ( Cur to, boolean moveAttrs )
-    {
-        assert _pos==0;
+    void moveNodeContents(Cur to, boolean moveAttrs) {
+        assert _pos == 0;
         assert to == null || !to.isRoot();
 
         // By calling this helper, I do not have to deal with this Cur any longer.  Basically,
         // this Cur is out of the picture, it behaves like any other cur at this point.
 
-        moveNodeContents( _xobj, to, moveAttrs );
+        moveNodeContents(_xobj, to, moveAttrs);
     }
 
-    static void moveNodeContents ( Xobj x, Cur to, boolean moveAttrs )
-    {
+    static void moveNodeContents(Xobj x, Cur to, boolean moveAttrs) {
         // TODO - should assert that is an attr is being moved, it is ok there
 
         assert to == null || !to.isRoot();
@@ -2030,25 +1908,21 @@ final class Cur
 
         // Deal with the cases where only text is involved in the move
 
-        if (noSubNodesToMove)
-        {
+        if (noSubNodesToMove) {
             // If we're vacant and there is no place to move a potential value, then I can avoid
             // acquiring the text from the TypeStoreUser.  Otherwise, there may be text here I
             // need to move somewhere else.
 
-            if (x.isVacant() && to == null)
-            {
-                x.clearBit( Xobj.VACANT );
+            if (x.isVacant() && to == null) {
+                x.clearBit(Xobj.VACANT);
 
                 x.invalidateUser();
-                x.invalidateSpecialAttr( null );
+                x.invalidateSpecialAttr(null);
                 x._locale._versionAll++;
-            }
-            else if (x.hasTextEnsureOccupancy())
-            {
+            } else if (x.hasTextEnsureOccupancy()) {
                 Cur c = x.tempCur();
                 c.next();
-                c.moveChars( to, -1 );
+                c.moveChars(to, -1);
                 c.release();
             }
 
@@ -2058,17 +1932,15 @@ final class Cur
         // Here I check to see if "to" is just inside x.  In this case this is a no-op.  Note that
         // the value of x may still be vacant.
 
-        if (to != null)
-        {
+        if (to != null) {
             // Quick check of the right edge.  If it is there, I need to move "to" to the left edge
             // so that it is positioned at the beginning of the "moved" content.
 
-            if (x == to._xobj && to._pos == END_POS)
-            {
+            if (x == to._xobj && to._pos == END_POS) {
                 // TODO - shuffle interior curs?
 
-                to.moveTo( x );
-                to.next( moveAttrs && hasAttrs );
+                to.moveTo(x);
+                to.next(moveAttrs && hasAttrs);
 
                 return;
             }
@@ -2080,11 +1952,10 @@ final class Cur
 
             boolean isAtLeftEdge = false;
 
-            if (to._locale == x._locale)
-            {
+            if (to._locale == x._locale) {
                 to.push();
-                to.moveTo( x );
-                to.next( moveAttrs && hasAttrs );
+                to.moveTo(x);
+                to.next(moveAttrs && hasAttrs);
                 isAtLeftEdge = to.isAtLastPush();
                 to.pop();
             }
@@ -2096,7 +1967,7 @@ final class Cur
 
             // Now, after dealing with the edge condition, I can assert that to is not inside x
 
-            assert !x.contains( to );
+            assert !x.contains(to);
 
             // So, at this point, I've taken case of the no-op cases and the movement of just text.
             // Also, to must be occupied because I took care of the text only and nothing to move
@@ -2113,15 +1984,14 @@ final class Cur
 
         int valueMovedCch = 0;
 
-        if (x.hasTextNoEnsureOccupancy())
-        {
+        if (x.hasTextNoEnsureOccupancy()) {
             Cur c = x.tempCur();
             c.next();
-            c.moveChars( to, -1 );
+            c.moveChars(to, -1);
             c.release();
 
             if (to != null)
-                to.nextChars( valueMovedCch = c._cchSrc );
+                to.nextChars(valueMovedCch = c._cchSrc);
         }
 
         // Now, walk all the contents, invalidating special attrs, reportioning cursors,
@@ -2130,26 +2000,23 @@ final class Cur
 
         x._locale.embedCurs();
 
-        Xobj firstToMove = x.walk( x, true );
+        Xobj firstToMove = x.walk(x, true);
         boolean sawBookmark = false;
 
-        for ( Xobj y = firstToMove ; y != null ; y = y.walk( x, true ) )
-        {
-            if (y._parent == x && y.isAttr())
-            {
+        for (Xobj y = firstToMove; y != null; y = y.walk(x, true)) {
+            if (y._parent == x && y.isAttr()) {
                 assert y._cchAfter == 0;
 
-                if (!moveAttrs)
-                {
+                if (!moveAttrs) {
                     firstToMove = y._nextSibling;
                     continue;
                 }
 
-                y.invalidateSpecialAttr( to == null ? null : to.getParent() );
+                y.invalidateSpecialAttr(to == null ? null : to.getParent());
             }
 
-            for ( Cur c ; (c = y._embedded) != null ; )
-                c.moveTo( x, END_POS );
+            for (Cur c; (c = y._embedded) != null; )
+                c.moveTo(x, END_POS);
 
             y.disconnectUser();
 
@@ -2169,8 +2036,7 @@ final class Cur
 
         Cur surragateTo = null;
 
-        if (sawBookmark && to == null)
-        {
+        if (sawBookmark && to == null) {
             surragateTo = to = x._locale.tempCur();
             to.createRoot();
             to.next();
@@ -2186,8 +2052,7 @@ final class Cur
         x._locale._versionAll++;
         x._locale._versionSansText++;
 
-        if (to != null && valueMovedCch == 0)
-        {
+        if (to != null && valueMovedCch == 0) {
             to.getParent().invalidateUser();
             to._locale._versionAll++;
             to._locale._versionSansText++;
@@ -2195,10 +2060,9 @@ final class Cur
 
         // Remove the children and, if needed, move them
 
-        x.removeXobjs( firstToMove, lastToMove );
+        x.removeXobjs(firstToMove, lastToMove);
 
-        if (to != null)
-        {
+        if (to != null) {
             // To know where I should insert/append the contents to move, I need to see where "to"
             // would be if there were no text after it.
 
@@ -2207,8 +2071,7 @@ final class Cur
 
             int cchRight = to.cchRight();
 
-            if (cchRight > 0)
-            {
+            if (cchRight > 0) {
                 to.push();
                 to.next();
                 here = to._xobj;
@@ -2227,53 +2090,51 @@ final class Cur
             // as the containers value text when the last new node being inserted is an attr!
             // Whew!
 
-            if (firstToMove.isAttr())
-            {
+            if (firstToMove.isAttr()) {
                 Xobj lastNewAttr = firstToMove;
 
-                while ( lastNewAttr._nextSibling != null && lastNewAttr._nextSibling.isAttr() )
+                while (lastNewAttr._nextSibling != null && lastNewAttr._nextSibling.isAttr())
                     lastNewAttr = lastNewAttr._nextSibling;
 
                 // Get to's parnet now before I potentially move him with the next transfer
 
                 Xobj y = to.getParent();
 
-                if (cchRight > 0)
-                    transferChars( to._xobj, to._pos, lastNewAttr, lastNewAttr.posMax(), cchRight );
+                if (cchRight > 0) {
+                    transferChars(to._xobj, to._pos, lastNewAttr, lastNewAttr.posMax(), cchRight);
+                }
 
-                if (y.hasTextNoEnsureOccupancy())
-                {
+                if (y.hasTextNoEnsureOccupancy()) {
                     int p, cch;
 
-                    if (y._cchValue > 0)
-                    {
+                    if (y._cchValue > 0) {
                         p = 1;
                         cch = y._cchValue;
-                    }
-                    else
-                    {
+                    } else {
                         y = y.lastAttr();
+                        assert(y != null);
                         p = y.posAfter();
                         cch = y._cchAfter;
                     }
 
-                    transferChars( y, p, lastNewAttr, lastNewAttr.posAfter(), cch );
+                    transferChars(y, p, lastNewAttr, lastNewAttr.posAfter(), cch);
                 }
+            } else if (cchRight > 0) {
+                transferChars(to._xobj, to._pos, lastToMove, lastToMove.posMax(), cchRight);
             }
-            else if (cchRight > 0)
-                transferChars( to._xobj, to._pos, lastToMove, lastToMove.posMax(), cchRight );
 
             // After mucking with the text, splice the new tree in
 
-            if (append)
-                here.appendXobjs( firstToMove, lastToMove );
-            else
-                here.insertXobjs( firstToMove, lastToMove );
+            if (append) {
+                here.appendXobjs(firstToMove, lastToMove);
+            } else {
+                here.insertXobjs(firstToMove, lastToMove);
+            }
 
             // Position "to" to be at the beginning of the newly inserted contents
 
-            to.moveTo( firstToMove );
-            to.prevChars( valueMovedCch );
+            to.moveTo(firstToMove);
+            to.prevChars(valueMovedCch);
         }
 
         // If I consed up a to, release it here
@@ -2282,28 +2143,25 @@ final class Cur
             surragateTo.release();
     }
 
-    protected final Bookmark setBookmark ( Object key, Object value )
-    {
+    protected final Bookmark setBookmark(Object key, Object value) {
         assert isNormal();
         assert key != null;
 
-        return _xobj.setBookmark( _pos, key, value );
+        return _xobj.setBookmark(_pos, key, value);
     }
 
-    Object getBookmark ( Object key )
-    {
+    Object getBookmark(Object key) {
         assert isNormal();
         assert key != null;
 
-        for ( Bookmark b = _xobj._bookmarks ; b != null ; b = b._next )
+        for (Bookmark b = _xobj._bookmarks; b != null; b = b._next)
             if (b._pos == _pos && b._key == key)
                 return b._value;
 
         return null;
     }
 
-    int firstBookmarkInChars ( Object key, int cch )
-    {
+    int firstBookmarkInChars(Object key, int cch) {
         assert isNormal();
         assert key != null;
         assert cch > 0;
@@ -2311,18 +2169,16 @@ final class Cur
 
         int d = -1;
 
-        if (isText())
-        {
-            for ( Bookmark b = _xobj._bookmarks ; b != null ; b = b._next )
-                if (b._key == key && inChars( b, cch, false ))
+        if (isText()) {
+            for (Bookmark b = _xobj._bookmarks; b != null; b = b._next)
+                if (b._key == key && inChars(b, cch, false))
                     d = (d == -1 || b._pos - _pos < d) ? b._pos - _pos : d;
         }
 
         return d;
     }
 
-    int firstBookmarkInCharsLeft ( Object key, int cch )
-    {
+    int firstBookmarkInCharsLeft(Object key, int cch) {
         assert isNormal();
         assert key != null;
         assert cch > 0;
@@ -2330,55 +2186,50 @@ final class Cur
 
         int d = -1;
 
-        if (cchLeft() > 0)
-        {

[... 1669 lines stripped ...]


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org