Makes sure the RenderablePanel inherits all attributes from the PotentialElement when realizing the Element.

Review at http://gwt-code-reviews.appspot.com/1556805

Review by: rjrjr@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10712 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/PotentialElement.java b/user/src/com/google/gwt/user/client/ui/PotentialElement.java
index 83d06d9..a3b1e96 100644
--- a/user/src/com/google/gwt/user/client/ui/PotentialElement.java
+++ b/user/src/com/google/gwt/user/client/ui/PotentialElement.java
@@ -16,9 +16,11 @@
 package com.google.gwt.user.client.ui;
 
 import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.dom.client.Element;
-import com.google.gwt.dom.builder.shared.HtmlElementBuilder;
+import com.google.gwt.dom.builder.client.DomBuilderFactory;
+import com.google.gwt.dom.builder.shared.ElementBuilder;
 import com.google.gwt.dom.builder.shared.HtmlBuilderFactory;
+import com.google.gwt.dom.builder.shared.HtmlElementBuilder;
+import com.google.gwt.dom.client.Element;
 
 /**
  * EXPERIMENTAL and subject to change. Do not use this in production code.
@@ -71,6 +73,22 @@
   }-*/;
 
   /**
+   * Creates an {@link ElementBuilder} instance inheriting all attributes
+   * set for the given PotentialElement.
+   *
+   * @param potentialElement assumed to be a PotentialElement, used as basis for
+   *     the builder
+   * @return a propertly configured {@link ElementBuilder} instance
+   */
+  public static ElementBuilder createDomBuilderFor(Element potentialElement) {
+    PotentialElement el = PotentialElement.as(potentialElement);
+    ElementBuilder builder = DomBuilderFactory.get().trustedCreate(
+        el.getTagName());
+    el.mergeInto(builder);
+    return builder;
+  }
+
+  /**
    * Creates an {@link HtmlElementBuilder} instance inheriting all attributes
    * set for the given PotentialElement.
    *
@@ -78,7 +96,7 @@
    *     the builder
    * @return a propertly configured {@link HtmlElementBuilder} instance
    */
-  public static HtmlElementBuilder createBuilderFor(Element potentialElement) {
+  public static HtmlElementBuilder createHtmlBuilderFor(Element potentialElement) {
     PotentialElement el = PotentialElement.as(potentialElement);
     HtmlElementBuilder builder = HtmlBuilderFactory.get().trustedCreate(
         el.getTagName());
@@ -164,7 +182,7 @@
    * prototype. Do this by severing the __proto__ link, allowing us to iterate
    * only on the fields set in this specific instance.
    */
-  private native void mergeInto(HtmlElementBuilder builder) /*-{
+  private native void mergeInto(ElementBuilder builder) /*-{
     var savedProto = this.__proto__;
     var tagName = this.tagName;
     var gwtResolve = this.__gwt_resolve;
diff --git a/user/src/com/google/gwt/user/client/ui/RenderablePanel.java b/user/src/com/google/gwt/user/client/ui/RenderablePanel.java
index 747c049..793c1c4 100644
--- a/user/src/com/google/gwt/user/client/ui/RenderablePanel.java
+++ b/user/src/com/google/gwt/user/client/ui/RenderablePanel.java
@@ -188,7 +188,7 @@
 
   @Override
   public SafeHtml render(RenderableStamper stamper) {
-    HtmlElementBuilder builder = PotentialElement.createBuilderFor(getElement());
+    HtmlElementBuilder builder = PotentialElement.createHtmlBuilderFor(getElement());
     stamper.stamp(builder);
     builder.html(getInnerHtml()).end();
 
@@ -229,18 +229,8 @@
    * that may have been added to the panel.
    */
   private void buildAndInitDivContainer() {
-    // TODO(rdcastro): Use the same technique as in render() above.
-
-    // Build the div that'll container the panel's HTML.
-    Element element = Document.get().createDivElement();
-    element.setInnerHTML(getInnerHtml().asString());
-
-    // TODO(rdcastro): Implement something like
-    // element.mergeFrom(getElement());
-    String styleName = getStyleName();
-    if (styleName != null) {
-      element.setClassName(styleName);
-    }
+    Element element = PotentialElement.createDomBuilderFor(getElement())
+        .html(getInnerHtml()).finish();
 
     setElement(element);