mrglavas 2004/05/28 12:08:53 Modified: java/src/org/apache/html/dom HTMLTableElementImpl.java HTMLMapElementImpl.java HTMLTableSectionElementImpl.java HTMLSelectElementImpl.java HTMLFormElementImpl.java HTMLTableRowElementImpl.java Log: Fixing Jira Bug #525:
http://nagoya.apache.org/jira/browse/XERCESJ-525 Instances of some of the classes in the HTML DOM implementation have a reference to a HTMLCollection. When these nodes are cloned the reference to the old collection was being kept, so methods which return a collection were referring to nodes in the old subtree instead of the newly cloned subtree. This is fixed thanks to the patch by Aaron Kardell. Revision Changes Path 1.12 +12 -2 xml-xerces/java/src/org/apache/html/dom/HTMLTableElementImpl.java Index: HTMLTableElementImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/html/dom/HTMLTableElementImpl.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- HTMLTableElementImpl.java 24 Feb 2004 23:34:00 -0000 1.11 +++ HTMLTableElementImpl.java 28 May 2004 19:08:52 -0000 1.12 @@ -375,7 +375,17 @@ child = child.getNextSibling(); } } - + + /** + * Explicit implementation of cloneNode() to ensure that cache used + * for getRows() and getTBodies() gets cleared. + */ + public Node cloneNode( boolean deep ) { + HTMLTableElementImpl clonedNode = (HTMLTableElementImpl)super.cloneNode( deep ); + clonedNode._rows = null; + clonedNode._bodies = null; + return clonedNode; + } /** * Constructor requires owner document. 1.8 +13 -4 xml-xerces/java/src/org/apache/html/dom/HTMLMapElementImpl.java Index: HTMLMapElementImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/html/dom/HTMLMapElementImpl.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- HTMLMapElementImpl.java 24 Feb 2004 23:34:01 -0000 1.7 +++ HTMLMapElementImpl.java 28 May 2004 19:08:52 -0000 1.8 @@ -15,10 +15,9 @@ */ package org.apache.html.dom; - import org.w3c.dom.html.HTMLCollection; import org.w3c.dom.html.HTMLMapElement; - +import org.w3c.dom.Node; /** * @version $Revision$ $Date$ @@ -51,8 +50,18 @@ { setAttribute( "name", name ); } - + /** + * Explicit implementation of cloneNode() to ensure that cache used + * for getAreas() gets cleared. + */ + public Node cloneNode( boolean deep ) + { + HTMLMapElementImpl clonedNode = (HTMLMapElementImpl)super.cloneNode( deep ); + clonedNode._areas = null; + return clonedNode; + } + /** * Constructor requires owner document. * 1.8 +11 -2 xml-xerces/java/src/org/apache/html/dom/HTMLTableSectionElementImpl.java Index: HTMLTableSectionElementImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/html/dom/HTMLTableSectionElementImpl.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- HTMLTableSectionElementImpl.java 24 Feb 2004 23:34:01 -0000 1.7 +++ HTMLTableSectionElementImpl.java 28 May 2004 19:08:52 -0000 1.8 @@ -160,7 +160,16 @@ } return index; } - + + /** + * Explicit implementation of cloneNode() to ensure that cache used + * for getRows() gets cleared. + */ + public Node cloneNode( boolean deep ) { + HTMLTableSectionElementImpl clonedNode = (HTMLTableSectionElementImpl)super.cloneNode( deep ); + clonedNode._rows = null; + return clonedNode; + } /** * Constructor requires owner document. 1.9 +12 -2 xml-xerces/java/src/org/apache/html/dom/HTMLSelectElementImpl.java Index: HTMLSelectElementImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/html/dom/HTMLSelectElementImpl.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- HTMLSelectElementImpl.java 24 Feb 2004 23:34:01 -0000 1.8 +++ HTMLSelectElementImpl.java 28 May 2004 19:08:52 -0000 1.9 @@ -196,12 +196,22 @@ // No scripting in server-side DOM. This method is moot. } - /* + /** * Explicit implementation of getChildNodes() to avoid problems with * overriding the getLength() method hidden in the super class. */ public NodeList getChildNodes() { return getChildNodesUnoptimized(); + } + + /** + * Explicit implementation of cloneNode() to ensure that cache used + * for getOptions() gets cleared. + */ + public Node cloneNode(boolean deep) { + HTMLSelectElementImpl clonedNode = (HTMLSelectElementImpl)super.cloneNode( deep ); + clonedNode._options = null; + return clonedNode; } /** 1.9 +12 -2 xml-xerces/java/src/org/apache/html/dom/HTMLFormElementImpl.java Index: HTMLFormElementImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/html/dom/HTMLFormElementImpl.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- HTMLFormElementImpl.java 24 Feb 2004 23:34:01 -0000 1.8 +++ HTMLFormElementImpl.java 28 May 2004 19:08:52 -0000 1.9 @@ -15,7 +15,7 @@ */ package org.apache.html.dom; - +import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.html.HTMLCollection; import org.w3c.dom.html.HTMLFormElement; @@ -136,6 +136,16 @@ */ public NodeList getChildNodes() { return getChildNodesUnoptimized(); + } + + /** + * Explicit implementation of cloneNode() to ensure that cache used + * for getElements() gets cleared. + */ + public Node cloneNode( boolean deep ) { + HTMLFormElementImpl clonedNode = (HTMLFormElementImpl)super.cloneNode( deep ); + clonedNode._elements = null; + return clonedNode; } /** 1.8 +12 -3 xml-xerces/java/src/org/apache/html/dom/HTMLTableRowElementImpl.java Index: HTMLTableRowElementImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/html/dom/HTMLTableRowElementImpl.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- HTMLTableRowElementImpl.java 24 Feb 2004 23:34:01 -0000 1.7 +++ HTMLTableRowElementImpl.java 28 May 2004 19:08:52 -0000 1.8 @@ -244,9 +244,18 @@ { setAttribute( "valign", vAlign ); } - - /** + /** + * Explicit implementation of cloneNode() to ensure that cache used + * for getCells() gets cleared. + */ + public Node cloneNode( boolean deep ) { + HTMLTableRowElementImpl clonedNode = (HTMLTableRowElementImpl)super.cloneNode( deep ); + clonedNode._cells = null; + return clonedNode; + } + + /** * Constructor requires owner document. * * @param owner The owner HTML document --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]