Rolling back due to API checker failure. Not caught by smoke tests for inexplicable reasons.


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7555 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/impl/DOMImplStandard.java b/user/src/com/google/gwt/user/client/impl/DOMImplStandard.java
index 61a6ea9..414e4c3 100644
--- a/user/src/com/google/gwt/user/client/impl/DOMImplStandard.java
+++ b/user/src/com/google/gwt/user/client/impl/DOMImplStandard.java
@@ -71,12 +71,13 @@
   public native Element getChild(Element elem, int index) /*-{
     var count = 0, child = elem.firstChild;
     while (child) {
+      var next = child.nextSibling;
       if (child.nodeType == 1) {
         if (index == count)
           return child;
         ++count;
       }
-      child = child.nextSibling;
+      child = next;
     }
 
     return null;
diff --git a/user/src/com/google/gwt/user/client/impl/ElementMapperImpl.java b/user/src/com/google/gwt/user/client/impl/ElementMapperImpl.java
index f0fba8e..c5163ad 100644
--- a/user/src/com/google/gwt/user/client/impl/ElementMapperImpl.java
+++ b/user/src/com/google/gwt/user/client/impl/ElementMapperImpl.java
@@ -16,7 +16,7 @@
 
 package com.google.gwt.user.client.impl;
 
-import com.google.gwt.dom.client.Element;
+import com.google.gwt.user.client.Element;
 import com.google.gwt.user.client.ui.UIObject;
 
 import java.util.ArrayList;
diff --git a/user/src/com/google/gwt/user/client/ui/HTMLTable.java b/user/src/com/google/gwt/user/client/ui/HTMLTable.java
index b71f9b6..54095a2 100644
--- a/user/src/com/google/gwt/user/client/ui/HTMLTable.java
+++ b/user/src/com/google/gwt/user/client/ui/HTMLTable.java
@@ -16,16 +16,12 @@
 package com.google.gwt.user.client.ui;
 
 import com.google.gwt.dom.client.Document;
-import com.google.gwt.dom.client.Element;
-import com.google.gwt.dom.client.NativeEvent;
-import com.google.gwt.dom.client.TableCellElement;
-import com.google.gwt.dom.client.TableElement;
-import com.google.gwt.dom.client.TableRowElement;
-import com.google.gwt.dom.client.TableSectionElement;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.event.dom.client.HasClickHandlers;
 import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Element;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.impl.ElementMapperImpl;
 import com.google.gwt.user.client.ui.HasHorizontalAlignment.HorizontalAlignmentConstant;
@@ -79,7 +75,7 @@
      * 
      * @return the cell's element.
      */
-    public com.google.gwt.user.client.Element getElement() {
+    public Element getElement() {
       return getCellFormatter().getElement(rowIndex, cellIndex);
     }
 
@@ -106,7 +102,7 @@
      */
     public void addStyleName(int row, int column, String styleName) {
       prepareCell(row, column);
-      Element td = getRawElement(row, column);
+      Element td = getCellElement(bodyElem, row, column);
       UIObject.setStyleName(td, styleName, true);
     }
 
@@ -118,9 +114,9 @@
      * @return the column's TD element
      * @throws IndexOutOfBoundsException
      */
-    public com.google.gwt.user.client.Element getElement(int row, int column) {
+    public Element getElement(int row, int column) {
       checkCellBounds(row, column);
-      return getRawElement(row, column).cast();
+      return getCellElement(bodyElem, row, column);
     }
 
     /**
@@ -172,7 +168,7 @@
      */
     public void removeStyleName(int row, int column, String styleName) {
       checkCellBounds(row, column);
-      Element td = getRawElement(row, column);
+      Element td = getCellElement(bodyElem, row, column);
       UIObject.setStyleName(td, styleName, false);
     }
 
@@ -204,8 +200,8 @@
      */
     public void setHeight(int row, int column, String height) {
       prepareCell(row, column);
-      Element elem = getRawElement(row, column);
-      elem.setPropertyString("height", height);
+      Element elem = getCellElement(bodyElem, row, column);
+      DOM.setElementProperty(elem, "height", height);
     }
 
     /**
@@ -220,8 +216,8 @@
     public void setHorizontalAlignment(int row, int column,
         HorizontalAlignmentConstant align) {
       prepareCell(row, column);
-      Element elem = getRawElement(row, column);
-      elem.setPropertyString("align", align.getTextAlignString());
+      Element elem = getCellElement(bodyElem, row, column);
+      DOM.setElementProperty(elem, "align", align.getTextAlignString());
     }
 
     /**
@@ -235,7 +231,7 @@
      */
     public void setStyleName(int row, int column, String styleName) {
       prepareCell(row, column);
-      UIObject.setStyleName(getRawElement(row, column), styleName);
+      UIObject.setStyleName(getCellElement(bodyElem, row, column), styleName);
     }
 
     /**
@@ -248,8 +244,7 @@
      * @throws IndexOutOfBoundsException
      */
     public void setStylePrimaryName(int row, int column, String styleName) {
-      prepareCell(row, column);
-      UIObject.setStylePrimaryName(getRawElement(row, column),
+      UIObject.setStylePrimaryName(getCellElement(bodyElem, row, column),
           styleName);
     }
 
@@ -265,7 +260,7 @@
     public void setVerticalAlignment(int row, int column,
         VerticalAlignmentConstant align) {
       prepareCell(row, column);
-      getRawElement(row, column).getStyle().setProperty(
+      DOM.setStyleAttribute(getCellElement(bodyElem, row, column),
           "verticalAlign", align.getVerticalAlignString());
     }
 
@@ -295,7 +290,8 @@
     public void setWidth(int row, int column, String width) {
       // Give the subclass a chance to prepare the cell.
       prepareCell(row, column);
-      getRawElement(row, column).setPropertyString("width", width);
+      DOM.setElementProperty(getCellElement(bodyElem, row, column), "width",
+          width);
     }
 
     /**
@@ -309,7 +305,7 @@
     public void setWordWrap(int row, int column, boolean wrap) {
       prepareCell(row, column);
       String wrapValue = wrap ? "" : "nowrap";
-      getElement(row, column).getStyle().setProperty("whiteSpace", wrapValue);
+      DOM.setStyleAttribute(getElement(row, column), "whiteSpace", wrapValue);
     }
 
     /**
@@ -321,9 +317,9 @@
      * @return the cell's element
      * @throws IndexOutOfBoundsException
      */
-    protected com.google.gwt.user.client.Element ensureElement(int row, int column) {
+    protected Element ensureElement(int row, int column) {
       prepareCell(row, column);
-      return getRawElement(row, column).cast();
+      return getCellElement(bodyElem, row, column);
     }
 
     /**
@@ -336,7 +332,8 @@
      * @throws IndexOutOfBoundsException
      */
     protected String getAttr(int row, int column, String attr) {
-      return getElement(row, column).getAttribute(attr);
+      Element elem = getElement(row, column);
+      return DOM.getElementAttribute(elem, attr);
     }
 
     /**
@@ -349,7 +346,8 @@
      * @throws IndexOutOfBoundsException
      */
     protected void setAttr(int row, int column, String attrName, String value) {
-      ensureElement(row, column).setAttribute(attrName, value);
+      Element elem = ensureElement(row, column);
+      DOM.setElementAttribute(elem, attrName, value);
     }
 
     /**
@@ -373,8 +371,8 @@
      * @param column the column of the cell to be retrieved
      * @return the cell's TD element
      */
-    private TableCellElement getRawElement(int row, int column) {
-      return TableCellElement.as(getCellElement(bodyElem, row, column));
+    private Element getRawElement(int row, int column) {
+      return getCellElement(bodyElem, row, column);
     }
   }
 
@@ -383,7 +381,7 @@
    * by the support cross-browser HTML support for column formatting.
    */
   public class ColumnFormatter {
-    protected com.google.gwt.user.client.Element columnGroup;
+    protected Element columnGroup;
 
     /**
      * Adds a style to the specified column.
@@ -403,8 +401,8 @@
      * @param column the column index
      * @return the col element
      */
-    public com.google.gwt.user.client.Element getElement(int column) {
-      return ensureColumn(column).cast();
+    public Element getElement(int column) {
+      return ensureColumn(column);
     }
 
     /**
@@ -475,7 +473,7 @@
      * @throws IndexOutOfBoundsException
      */
     public void setWidth(int column, String width) {
-      ensureColumn(column).setPropertyString("width", width);
+      DOM.setElementProperty(ensureColumn(column), "width", width);
     }
 
     /**
@@ -515,9 +513,9 @@
      */
     private void prepareColumnGroup() {
       if (columnGroup == null) {
-        columnGroup = Document.get().createColGroupElement().cast();
-        tableElem.insertFirst(columnGroup);
-        columnGroup.appendChild(Document.get().createColElement());
+        columnGroup = DOM.createElement("colgroup");
+        DOM.insertChild(tableElem, columnGroup, 0);
+        DOM.appendChild(columnGroup, DOM.createElement("col"));
       }
     }
   }
@@ -546,7 +544,7 @@
      * @return the row's TR element
      * @throws IndexOutOfBoundsException
      */
-    public com.google.gwt.user.client.Element getElement(int row) {
+    public Element getElement(int row) {
       checkRowBounds(row);
       return getRow(bodyElem, row);
     }
@@ -632,7 +630,7 @@
      * @throws IndexOutOfBoundsException
      */
     public void setVerticalAlign(int row, VerticalAlignmentConstant align) {
-      ensureElement(row).getStyle().setProperty("verticalAlign",
+      DOM.setStyleAttribute(ensureElement(row), "verticalAlign",
           align.getVerticalAlignString());
     }
 
@@ -656,12 +654,12 @@
      * @return the row's TR element
      * @throws IndexOutOfBoundsException
      */
-    protected com.google.gwt.user.client.Element ensureElement(int row) {
+    protected Element ensureElement(int row) {
       prepareRow(row);
       return getRow(bodyElem, row);
     }
 
-    protected native com.google.gwt.user.client.Element getRow(Element elem, int row) /*-{
+    protected native Element getRow(Element elem, int row)/*-{
       return elem.rows[row];
     }-*/;
 
@@ -675,14 +673,14 @@
      */
     protected void setAttr(int row, String attrName, String value) {
       Element elem = ensureElement(row);
-      elem.setAttribute(attrName, value);
+      DOM.setElementAttribute(elem, attrName, value);
     }
   }
 
   /**
    * Table's body.
    */
-  private final TableSectionElement bodyElem;
+  private final Element bodyElem;
 
   /**
    * Current cell formatter.
@@ -702,7 +700,7 @@
   /**
    * Table element.
    */
-  private final TableElement tableElem;
+  private final Element tableElem;
 
   private ElementMapperImpl<Widget> widgetMap = new ElementMapperImpl<Widget>();
 
@@ -710,10 +708,9 @@
    * Create a new empty HTML Table.
    */
   public HTMLTable() {
-    Document doc = Document.get();
-    tableElem = doc.createTableElement();
-    bodyElem = doc.createTBodyElement();
-    tableElem.appendChild(bodyElem);
+    tableElem = DOM.createTable();
+    bodyElem = DOM.createTBody();
+    DOM.appendChild(tableElem, bodyElem);
     setElement(tableElem);
   }
 
@@ -789,14 +786,15 @@
    * @return The appropriate cell, or null
    */
   public Cell getCellForEvent(ClickEvent event) {
-    TableCellElement td = getEventTargetCell(event.getNativeEvent());
+    Element td = getEventTargetCell(Event.as(event.getNativeEvent()));
     if (td == null) {
       return null;
     }
 
-    TableRowElement tr = TableRowElement.as(td.getParentElement());
-    int row = tr.getSectionRowIndex();
-    int column = td.getCellIndex();
+    Element tr = DOM.getParent(td);
+    Element body = DOM.getParent(tr);
+    int row = DOM.getChildIndex(body, tr);
+    int column = DOM.getChildIndex(tr, td);
 
     return new Cell(row, column);
   }
@@ -817,7 +815,7 @@
    * @return the cell padding, in pixels
    */
   public int getCellPadding() {
-    return tableElem.getCellPadding();
+    return DOM.getElementPropertyInt(tableElem, "cellPadding");
   }
 
   /**
@@ -826,7 +824,7 @@
    * @return the cell spacing, in pixels
    */
   public int getCellSpacing() {
-    return tableElem.getCellSpacing();
+    return DOM.getElementPropertyInt(tableElem, "cellSpacing");
   }
 
   /**
@@ -847,7 +845,7 @@
    * @throws IndexOutOfBoundsException
    */
   public String getHTML(int row, int column) {
-    return cellFormatter.getElement(row, column).getInnerHTML();
+    return DOM.getInnerHTML(cellFormatter.getElement(row, column));
   }
 
   /**
@@ -877,7 +875,7 @@
   public String getText(int row, int column) {
     checkCellBounds(row, column);
     Element e = cellFormatter.getElement(row, column);
-    return e.getInnerText();
+    return DOM.getInnerText(e);
   }
 
   /**
@@ -979,7 +977,7 @@
     } finally {
       // Physical detach.
       Element elem = widget.getElement();
-      elem.removeFromParent();
+      DOM.removeChild(DOM.getParent(elem), elem);
   
       // Logical detach.
       widgetMap.removeByElement(elem);
@@ -1007,7 +1005,7 @@
    * @param width the width of the border, in pixels
    */
   public void setBorderWidth(int width) {
-    tableElem.setBorder(width);
+    DOM.setElementProperty(tableElem, "border", "" + width);
   }
 
   /**
@@ -1016,7 +1014,7 @@
    * @param padding the cell padding, in pixels
    */
   public void setCellPadding(int padding) {
-    tableElem.setCellPadding(padding);
+    DOM.setElementPropertyInt(tableElem, "cellPadding", padding);
   }
 
   /**
@@ -1025,7 +1023,7 @@
    * @param spacing the cell spacing, in pixels
    */
   public void setCellSpacing(int spacing) {
-    tableElem.setCellSpacing(spacing);
+    DOM.setElementPropertyInt(tableElem, "cellSpacing", spacing);
   }
 
   /**
@@ -1038,9 +1036,9 @@
    */
   public void setHTML(int row, int column, String html) {
     prepareCell(row, column);
-    TableCellElement td = cleanCell(row, column, html == null);
+    Element td = cleanCell(row, column, html == null);
     if (html != null) {
-      td.setInnerHTML(html);
+      DOM.setInnerHTML(td, html);
     }
   }
 
@@ -1054,9 +1052,10 @@
    */
   public void setText(int row, int column, String text) {
     prepareCell(row, column);
-    TableCellElement td = cleanCell(row, column, text == null);
+    Element td;
+    td = cleanCell(row, column, text == null);
     if (text != null) {
-      td.setInnerText(text);
+      DOM.setInnerText(td, text);
     }
   }
 
@@ -1083,13 +1082,13 @@
       widget.removeFromParent();
 
       // Removes any existing widget.
-      TableCellElement td = cleanCell(row, column, true);
+      Element td = cleanCell(row, column, true);
 
       // Logical attach.
       widgetMap.put(widget);
 
       // Physical attach.
-      td.appendChild(widget.getElement());
+      DOM.appendChild(td, widget.getElement());
 
       adopt(widget);
     }
@@ -1135,8 +1134,8 @@
    * 
    * @return the newly created TD
    */
-  protected com.google.gwt.user.client.Element createCell() {
-    return Document.get().createTDElement().cast();
+  protected Element createCell() {
+    return DOM.createTD();
   }
 
   /**
@@ -1144,8 +1143,8 @@
    * 
    * @return the TBODY element
    */
-  protected com.google.gwt.user.client.Element getBodyElement() {
-    return bodyElem.cast();
+  protected Element getBodyElement() {
+    return bodyElem;
   }
 
   /**
@@ -1189,17 +1188,17 @@
    * @return the TD associated with the event, or <code>null</code> if none is
    *         found.
    */
-  protected com.google.gwt.user.client.Element getEventTargetCell(Event event) {
-    Element td = Element.as(event.getEventTarget());
-    for (; td != null; td = td.getParentElement()) {
+  protected Element getEventTargetCell(Event event) {
+    Element td = DOM.eventGetTarget(event);
+    for (; td != null; td = DOM.getParent(td)) {
       // If it's a TD, it might be the one we're looking for.
-      if (td.getTagName().equalsIgnoreCase("td")) {
+      if (DOM.getElementProperty(td, "tagName").equalsIgnoreCase("td")) {
         // Make sure it's directly a part of this table before returning
         // it.
-        Element tr = td.getParentElement();
-        Element body = tr.getParentElement();
+        Element tr = DOM.getParent(td);
+        Element body = DOM.getParent(tr);
         if (body == bodyElem) {
-          return td.cast();
+          return td;
         }
       }
       // If we run into this table's body, we're out of options.
@@ -1209,10 +1208,6 @@
     }
     return null;
   }
-  
-  protected final TableCellElement getEventTargetCell(NativeEvent event) {
-    return getEventTargetCell(Event.as(event)).cast();
-  }
 
   /**
    * Inserts a new cell into the specified row.
@@ -1224,11 +1219,7 @@
   protected void insertCell(int row, int column) {
     Element tr = rowFormatter.getRow(bodyElem, row);
     Element td = createCell();
-    if (column < tr.getChildCount()) {
-      tr.insertBefore(td, tr.getChild(column));
-    } else {
-      tr.appendChild(td);
-    }
+    DOM.insertChild(tr, td, column);
   }
 
   /**
@@ -1243,11 +1234,7 @@
     Element tr = rowFormatter.getRow(bodyElem, row);
     for (int i = column; i < column + count; i++) {
       Element td = createCell();
-      if (i < tr.getChildCount()) {
-        tr.insertBefore(td, tr.getChild(i));
-      } else {
-        tr.appendChild(td);
-      }
+      DOM.insertChild(tr, td, i);
     }
   }
 
@@ -1263,12 +1250,8 @@
     if (beforeRow != getRowCount()) {
       checkRowBounds(beforeRow);
     }
-    Element tr = Document.get().createTRElement();
-    if (beforeRow < bodyElem.getChildCount()) {
-      bodyElem.insertBefore(tr, bodyElem.getChild(beforeRow));
-    } else {
-      bodyElem.appendChild(tr);
-    }
+    Element tr = DOM.createTR();
+    DOM.insertChild(bodyElem, tr, beforeRow);
     return beforeRow;
   }
 
@@ -1282,7 +1265,7 @@
    * @return returns whether a widget was cleared
    */
   protected boolean internalClearCell(Element td, boolean clearInnerHTML) {
-    Element maybeChild = td.getFirstChildElement();
+    Element maybeChild = DOM.getFirstChild(td);
     Widget widget = null;
     if (maybeChild != null) {
       widget = widgetMap.get(maybeChild);
@@ -1294,7 +1277,7 @@
     } else {
       // Otherwise, simply clear whatever text and/or HTML may be there.
       if (clearInnerHTML) {
-        td.setInnerHTML("");
+        DOM.setInnerHTML(td, "");
       }
       return false;
     }
@@ -1369,7 +1352,8 @@
   protected void removeCell(int row, int column) {
     checkCellBounds(row, column);
     Element td = cleanCell(row, column, false);
-    td.removeFromParent();
+    Element tr = rowFormatter.getRow(bodyElem, row);
+    DOM.removeChild(tr, td);
   }
 
   /**
@@ -1383,7 +1367,7 @@
     for (int column = 0; column < columnCount; ++column) {
       cleanCell(row, column, false);
     }
-    rowFormatter.getRow(bodyElem, row).removeFromParent();
+    DOM.removeChild(bodyElem, rowFormatter.getRow(bodyElem, row));
   }
 
   /**
@@ -1423,9 +1407,9 @@
    * @param clearInnerHTML should the cell's inner html be cleared?
    * @return element that has been cleaned
    */
-  private TableCellElement cleanCell(int row, int column, boolean clearInnerHTML) {
+  private Element cleanCell(int row, int column, boolean clearInnerHTML) {
     // Clear whatever is in the cell.
-    TableCellElement td = getCellFormatter().getRawElement(row, column);
+    Element td = getCellFormatter().getRawElement(row, column);
     internalClearCell(td, clearInnerHTML);
     return td;
   }
@@ -1439,7 +1423,7 @@
    */
   private Widget getWidgetImpl(int row, int column) {
     Element e = cellFormatter.getRawElement(row, column);
-    Element child = e.getFirstChildElement();
+    Element child = DOM.getFirstChild(e);
     if (child == null) {
       return null;
     } else {