}
if (!fDeferNodeExpansion) {
// REVISIT: Should this happen after we call the filter?
if (augs != null && fDocumentImpl != null && (fNamespaceAware || fStorePSVI)) {
ElementPSVI elementPSVI = (ElementPSVI) augs.getItem(Constants.ELEMENT_PSVI);
if (elementPSVI != null) {
// Updating TypeInfo. If the declared type is a union the
// [member type definition] will only be available at the
// end of an element.
if (fNamespaceAware) {
XSTypeDefinition type = elementPSVI.getMemberTypeDefinition();
if (type == null) {
type = elementPSVI.getTypeDefinition();
}
((ElementNSImpl)fCurrentNode).setType(type);
}
if (fStorePSVI) {
((PSVIElementNSImpl)fCurrentNode).setPSVI (elementPSVI);
}
}
}
if (fDOMFilter != null) {
if (fFilterReject) {
if (fRejectedElementDepth-- == 0) {
fFilterReject = false;
}
return;
}
if (!fSkippedElemStack.isEmpty()) {
if (fSkippedElemStack.pop() == Boolean.TRUE) {
return;
}
}
setCharacterData (false);
if ((fCurrentNode != fRoot) && !fInEntityRef && (fDOMFilter.getWhatToShow () & NodeFilter.SHOW_ELEMENT)!=0) {
short code = fDOMFilter.acceptNode (fCurrentNode);
switch (code) {
case LSParserFilter.FILTER_INTERRUPT:{
throw Abort.INSTANCE;
}
case LSParserFilter.FILTER_REJECT:{
Node parent = fCurrentNode.getParentNode ();
parent.removeChild (fCurrentNode);
fCurrentNode = parent;
return;
}
case LSParserFilter.FILTER_SKIP: {
// make sure that if any char data is available
// the fFirstChunk is true, so that if the next event
// is characters(), and the last node is text, we will copy
// the value already in the text node to fStringBuffer
// (not to lose it).
fFirstChunk = true;
// replace children
Node parent = fCurrentNode.getParentNode ();
NodeList ls = fCurrentNode.getChildNodes ();
int length = ls.getLength ();
for (int i=0;i<length;i++) {
parent.appendChild (ls.item (0));
}
parent.removeChild (fCurrentNode);
fCurrentNode = parent;
return;
}
default: { }
}
}
fCurrentNode = fCurrentNode.getParentNode ();
} // end-if DOMFilter
else {
setCharacterData (false);
fCurrentNode = fCurrentNode.getParentNode ();
}
}
else {
if (augs != null) {
ElementPSVI elementPSVI = (ElementPSVI) augs.getItem(Constants.ELEMENT_PSVI);
if (elementPSVI != null) {
// Setting TypeInfo. If the declared type is a union the
// [member type definition] will only be available at the
// end of an element.
XSTypeDefinition type = elementPSVI.getMemberTypeDefinition();
if (type == null) {
type = elementPSVI.getTypeDefinition();
}
fDeferredDocumentImpl.setTypeInfo(fCurrentNodeIndex, type);
}
}
fCurrentNodeIndex =