/** Synchronizes the data (name and value) for fast nodes. */
  protected void synchronizeData() {

    // no need to sync in the future
    needsSyncData(false);

    // fluff data
    DeferredDocumentImpl ownerDocument = (DeferredDocumentImpl) this.ownerDocument();
    data = ownerDocument.getNodeValueString(fNodeIndex);
  } // synchronizeData()
  /** Synchronizes the data (name and value) for fast nodes. */
  protected void synchronizeData() {

    // no need to sync in the future
    needsSyncData(false);

    // fluff data
    DeferredDocumentImpl ownerDocument = (DeferredDocumentImpl) ownerDocument();
    name = ownerDocument.getNodeName(fNodeIndex);

    // extract prefix and local part from QName
    int index = name.indexOf(':');
    if (index < 0) {
      localName = name;
    } else {
      localName = name.substring(index + 1);
    }

    int extra = ownerDocument.getNodeExtra(fNodeIndex);
    isSpecified((extra & SPECIFIED) != 0);
    isIdAttribute((extra & ID) != 0);

    namespaceURI = ownerDocument.getNodeURI(fNodeIndex);

    int extraNode = ownerDocument.getLastChild(fNodeIndex);
    type = ownerDocument.getTypeInfo(extraNode);
  } // synchronizeData()
 /**
  * Synchronizes the node's children with the internal structure. Fluffing the children at once
  * solves a lot of work to keep the two structures in sync. The problem gets worse when editing
  * the tree -- this makes it a lot easier.
  */
 protected void synchronizeChildren() {
   DeferredDocumentImpl ownerDocument = (DeferredDocumentImpl) ownerDocument();
   ownerDocument.synchronizeChildren(this, fNodeIndex);
 } // synchronizeChildren()