mrglavas 2004/11/04 13:53:30 Modified: java/src/org/apache/xerces/dom RangeImpl.java Log: DOM Level 3 specifies an attribute called strictErrorChecking [1] which when set to false allows an implementation to not test every possible error case. Reducing the amount of checking performed when strictErrorChecking is false. This patch is thanks to Naela Nissar. [1] http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#Document3-strictErrorChecking Revision Changes Path 1.37 +194 -171 xml-xerces/java/src/org/apache/xerces/dom/RangeImpl.java Index: RangeImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/RangeImpl.java,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- RangeImpl.java 5 Oct 2004 17:12:51 -0000 1.36 +++ RangeImpl.java 4 Nov 2004 21:53:30 -0000 1.37 @@ -155,22 +155,23 @@ public void setStart(Node refNode, int offset) throws RangeException, DOMException { - if( fDetach) { - throw new DOMException( - DOMException.INVALID_STATE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); - } - if ( !isLegalContainer(refNode)) { - throw new RangeExceptionImpl( - RangeException.INVALID_NODE_TYPE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); - } - if ( fDocument != refNode.getOwnerDocument() && fDocument != refNode) { - throw new DOMException( - DOMException.WRONG_DOCUMENT_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + if (fDocument.errorChecking) { + if ( fDetach) { + throw new DOMException( + DOMException.INVALID_STATE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); + } + if ( !isLegalContainer(refNode)) { + throw new RangeExceptionImpl( + RangeException.INVALID_NODE_TYPE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); + } + if ( fDocument != refNode.getOwnerDocument() && fDocument != refNode) { + throw new DOMException( + DOMException.WRONG_DOCUMENT_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + } } - checkIndex(refNode, offset); @@ -191,22 +192,24 @@ public void setEnd(Node refNode, int offset) throws RangeException, DOMException { - if( fDetach) { - throw new DOMException( - DOMException.INVALID_STATE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); - } - if ( !isLegalContainer(refNode)) { - throw new RangeExceptionImpl( - RangeException.INVALID_NODE_TYPE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); - } - if ( fDocument != refNode.getOwnerDocument() && fDocument != refNode) { - throw new DOMException( - DOMException.WRONG_DOCUMENT_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + if (fDocument.errorChecking) { + if (fDetach) { + throw new DOMException( + DOMException.INVALID_STATE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); + } + if ( !isLegalContainer(refNode)) { + throw new RangeExceptionImpl( + RangeException.INVALID_NODE_TYPE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); + } + if ( fDocument != refNode.getOwnerDocument() && fDocument != refNode) { + throw new DOMException( + DOMException.WRONG_DOCUMENT_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + } } - + checkIndex(refNode, offset); fEndContainer = refNode; @@ -226,23 +229,26 @@ public void setStartBefore(Node refNode) throws RangeException { - if( fDetach) { - throw new DOMException( - DOMException.INVALID_STATE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); - } - if ( !hasLegalRootContainer(refNode) || - !isLegalContainedNode(refNode) ) - { - throw new RangeExceptionImpl( - RangeException.INVALID_NODE_TYPE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); - } - if ( fDocument != refNode.getOwnerDocument() && fDocument != refNode) { - throw new DOMException( - DOMException.WRONG_DOCUMENT_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + if (fDocument.errorChecking) { + if (fDetach) { + throw new DOMException( + DOMException.INVALID_STATE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); + } + if ( !hasLegalRootContainer(refNode) || + !isLegalContainedNode(refNode) ) + { + throw new RangeExceptionImpl( + RangeException.INVALID_NODE_TYPE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); + } + if ( fDocument != refNode.getOwnerDocument() && fDocument != refNode) { + throw new DOMException( + DOMException.WRONG_DOCUMENT_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + } } + fStartContainer = refNode.getParentNode(); int i = 0; for (Node n = refNode; n!=null; n = n.getPreviousSibling()) { @@ -264,21 +270,23 @@ public void setStartAfter(Node refNode) throws RangeException { - if( fDetach) { - throw new DOMException( - DOMException.INVALID_STATE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); - } - if ( !hasLegalRootContainer(refNode) || - !isLegalContainedNode(refNode)) { - throw new RangeExceptionImpl( - RangeException.INVALID_NODE_TYPE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); - } - if ( fDocument != refNode.getOwnerDocument() && fDocument != refNode) { - throw new DOMException( - DOMException.WRONG_DOCUMENT_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + if (fDocument.errorChecking) { + if (fDetach) { + throw new DOMException( + DOMException.INVALID_STATE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); + } + if ( !hasLegalRootContainer(refNode) || + !isLegalContainedNode(refNode)) { + throw new RangeExceptionImpl( + RangeException.INVALID_NODE_TYPE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); + } + if ( fDocument != refNode.getOwnerDocument() && fDocument != refNode) { + throw new DOMException( + DOMException.WRONG_DOCUMENT_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + } } fStartContainer = refNode.getParentNode(); int i = 0; @@ -301,21 +309,23 @@ public void setEndBefore(Node refNode) throws RangeException { - if( fDetach) { - throw new DOMException( - DOMException.INVALID_STATE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); - } - if ( !hasLegalRootContainer(refNode) || - !isLegalContainedNode(refNode)) { - throw new RangeExceptionImpl( - RangeException.INVALID_NODE_TYPE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); - } - if ( fDocument != refNode.getOwnerDocument() && fDocument != refNode) { - throw new DOMException( - DOMException.WRONG_DOCUMENT_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + if (fDocument.errorChecking) { + if (fDetach) { + throw new DOMException( + DOMException.INVALID_STATE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); + } + if ( !hasLegalRootContainer(refNode) || + !isLegalContainedNode(refNode)) { + throw new RangeExceptionImpl( + RangeException.INVALID_NODE_TYPE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); + } + if ( fDocument != refNode.getOwnerDocument() && fDocument != refNode) { + throw new DOMException( + DOMException.WRONG_DOCUMENT_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + } } fEndContainer = refNode.getParentNode(); int i = 0; @@ -338,21 +348,23 @@ public void setEndAfter(Node refNode) throws RangeException { - if( fDetach) { - throw new DOMException( - DOMException.INVALID_STATE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); - } - if ( !hasLegalRootContainer(refNode) || - !isLegalContainedNode(refNode)) { - throw new RangeExceptionImpl( - RangeException.INVALID_NODE_TYPE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); - } - if ( fDocument != refNode.getOwnerDocument() && fDocument != refNode) { - throw new DOMException( - DOMException.WRONG_DOCUMENT_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + if (fDocument.errorChecking) { + if( fDetach) { + throw new DOMException( + DOMException.INVALID_STATE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); + } + if ( !hasLegalRootContainer(refNode) || + !isLegalContainedNode(refNode)) { + throw new RangeExceptionImpl( + RangeException.INVALID_NODE_TYPE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); + } + if ( fDocument != refNode.getOwnerDocument() && fDocument != refNode) { + throw new DOMException( + DOMException.WRONG_DOCUMENT_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + } } fEndContainer = refNode.getParentNode(); int i = 0; @@ -392,21 +404,23 @@ public void selectNode(Node refNode) throws RangeException { - if( fDetach) { - throw new DOMException( - DOMException.INVALID_STATE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); - } - if ( !isLegalContainer( refNode.getParentNode() ) || - !isLegalContainedNode( refNode ) ) { - throw new RangeExceptionImpl( - RangeException.INVALID_NODE_TYPE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); - } - if ( fDocument != refNode.getOwnerDocument() && fDocument != refNode) { - throw new DOMException( - DOMException.WRONG_DOCUMENT_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + if (fDocument.errorChecking) { + if (fDetach) { + throw new DOMException( + DOMException.INVALID_STATE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); + } + if ( !isLegalContainer( refNode.getParentNode() ) || + !isLegalContainedNode( refNode ) ) { + throw new RangeExceptionImpl( + RangeException.INVALID_NODE_TYPE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); + } + if ( fDocument != refNode.getOwnerDocument() && fDocument != refNode) { + throw new DOMException( + DOMException.WRONG_DOCUMENT_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + } } Node parent = refNode.getParentNode(); if (parent != null ) // REVIST: what to do if it IS null? @@ -425,20 +439,22 @@ public void selectNodeContents(Node refNode) throws RangeException { - if( fDetach) { - throw new DOMException( - DOMException.INVALID_STATE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); - } - if ( !isLegalContainer(refNode)) { - throw new RangeExceptionImpl( - RangeException.INVALID_NODE_TYPE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); - } - if ( fDocument != refNode.getOwnerDocument() && fDocument != refNode) { - throw new DOMException( - DOMException.WRONG_DOCUMENT_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + if (fDocument.errorChecking) { + if( fDetach) { + throw new DOMException( + DOMException.INVALID_STATE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); + } + if ( !isLegalContainer(refNode)) { + throw new RangeExceptionImpl( + RangeException.INVALID_NODE_TYPE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); + } + if ( fDocument != refNode.getOwnerDocument() && fDocument != refNode) { + throw new DOMException( + DOMException.WRONG_DOCUMENT_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + } } fStartContainer = refNode; fEndContainer = refNode; @@ -459,20 +475,22 @@ public short compareBoundaryPoints(short how, Range sourceRange) throws DOMException { - if( fDetach) { - throw new DOMException( - DOMException.INVALID_STATE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); - } - // WRONG_DOCUMENT_ERR: Raised if the two Ranges are not in the same Document or DocumentFragment. - if ((fDocument != sourceRange.getStartContainer().getOwnerDocument() - && fDocument != sourceRange.getStartContainer() - && sourceRange.getStartContainer() != null) - || (fDocument != sourceRange.getEndContainer().getOwnerDocument() - && fDocument != sourceRange.getEndContainer() - && sourceRange.getStartContainer() != null)) { - throw new DOMException(DOMException.WRONG_DOCUMENT_ERR, - DOMMessageFormatter.formatMessage( DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + if (fDocument.errorChecking) { + if( fDetach) { + throw new DOMException( + DOMException.INVALID_STATE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); + } + // WRONG_DOCUMENT_ERR: Raised if the two Ranges are not in the same Document or DocumentFragment. + if ((fDocument != sourceRange.getStartContainer().getOwnerDocument() + && fDocument != sourceRange.getStartContainer() + && sourceRange.getStartContainer() != null) + || (fDocument != sourceRange.getEndContainer().getOwnerDocument() + && fDocument != sourceRange.getEndContainer() + && sourceRange.getStartContainer() != null)) { + throw new DOMException(DOMException.WRONG_DOCUMENT_ERR, + DOMMessageFormatter.formatMessage( DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + } } Node endPointA; @@ -601,27 +619,30 @@ throws DOMException, RangeException { if ( newNode == null ) return; //throw exception? - - if( fDetach) { - throw new DOMException( - DOMException.INVALID_STATE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); + + int type = newNode.getNodeType(); + + if (fDocument.errorChecking) { + if (fDetach) { + throw new DOMException( + DOMException.INVALID_STATE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); + } + if ( fDocument != newNode.getOwnerDocument() ) { + throw new DOMException(DOMException.WRONG_DOCUMENT_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); + } + + if (type == Node.ATTRIBUTE_NODE + || type == Node.ENTITY_NODE + || type == Node.NOTATION_NODE + || type == Node.DOCUMENT_NODE) + { + throw new RangeExceptionImpl( + RangeException.INVALID_NODE_TYPE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); + } } - if ( fDocument != newNode.getOwnerDocument() ) { - throw new DOMException(DOMException.WRONG_DOCUMENT_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "WRONG_DOCUMENT_ERR", null)); - } - - int type = newNode.getNodeType(); - if (type == Node.ATTRIBUTE_NODE - || type == Node.ENTITY_NODE - || type == Node.NOTATION_NODE - || type == Node.DOCUMENT_NODE) - { - throw new RangeExceptionImpl( - RangeException.INVALID_NODE_TYPE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); - } Node cloneCurrent; Node current; int currentChildren = 0; @@ -691,23 +712,25 @@ throws DOMException, RangeException { if (newParent==null) return; - - if( fDetach) { - throw new DOMException( - DOMException.INVALID_STATE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); - } int type = newParent.getNodeType(); - if (type == Node.ATTRIBUTE_NODE - || type == Node.ENTITY_NODE - || type == Node.NOTATION_NODE - || type == Node.DOCUMENT_TYPE_NODE - || type == Node.DOCUMENT_NODE - || type == Node.DOCUMENT_FRAGMENT_NODE) - { - throw new RangeExceptionImpl( - RangeException.INVALID_NODE_TYPE_ERR, - DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); + + if (fDocument.errorChecking) { + if (fDetach) { + throw new DOMException( + DOMException.INVALID_STATE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_STATE_ERR", null)); + } + if (type == Node.ATTRIBUTE_NODE + || type == Node.ENTITY_NODE + || type == Node.NOTATION_NODE + || type == Node.DOCUMENT_TYPE_NODE + || type == Node.DOCUMENT_NODE + || type == Node.DOCUMENT_FRAGMENT_NODE) + { + throw new RangeExceptionImpl( + RangeException.INVALID_NODE_TYPE_ERR, + DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "INVALID_NODE_TYPE_ERR", null)); + } } Node root = getCommonAncestorContainer();
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]