Finalizing IsRenderable API step 1: renaming wrapElement() and performDetachedInitialization().
Review at http://gwt-code-reviews.appspot.com/1463804
Review by: rchandia@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10352 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/uibinder/elementparsers/IsRenderableInterpreter.java b/user/src/com/google/gwt/uibinder/elementparsers/IsRenderableInterpreter.java
index 3a0b328..b1d92cf 100644
--- a/user/src/com/google/gwt/uibinder/elementparsers/IsRenderableInterpreter.java
+++ b/user/src/com/google/gwt/uibinder/elementparsers/IsRenderableInterpreter.java
@@ -56,14 +56,14 @@
"com.google.gwt.dom.client.Document.get().getElementById(%s).cast();",
elementPointer, fieldManager.convertFieldToGetter(idHolder));
fieldWriter.addAttachStatement(
- "%s.wrapElement(%s);",
+ "%s.claimElement(%s);",
fieldManager.convertFieldToGetter(childFieldWriter.getName()),
elementPointer);
// Some operations are more efficient when the Widget isn't attached to
// the document. Perform them here.
fieldWriter.addDetachStatement(
- "%s.performDetachedInitialization();",
+ "%s.initializeClaimedElement();",
fieldManager.convertFieldToGetter(childFieldWriter.getName()));
fieldWriter.addDetachStatement(
diff --git a/user/src/com/google/gwt/user/client/ui/Composite.java b/user/src/com/google/gwt/user/client/ui/Composite.java
index 78cca37..6fbbeb1 100644
--- a/user/src/com/google/gwt/user/client/ui/Composite.java
+++ b/user/src/com/google/gwt/user/client/ui/Composite.java
@@ -57,6 +57,25 @@
private Element elementToWrap;
@Override
+ public final void claimElement(Element element) {
+ if (renderable != null) {
+ renderable.claimElement(element);
+ setElement(widget.getElement());
+ } else {
+ this.elementToWrap = element;
+ }
+ }
+
+ @Override
+ public final void initializeClaimedElement() {
+ if (renderable != null) {
+ renderable.initializeClaimedElement();
+ } else {
+ elementToWrap.getParentNode().replaceChild(widget.getElement(), elementToWrap);
+ }
+ }
+
+ @Override
public boolean isAttached() {
if (widget != null) {
return widget.isAttached();
@@ -74,15 +93,6 @@
}
@Override
- public final void performDetachedInitialization() {
- if (renderable != null) {
- renderable.performDetachedInitialization();
- } else {
- elementToWrap.getParentNode().replaceChild(widget.getElement(), elementToWrap);
- }
- }
-
- @Override
public final SafeHtml render(String id) {
if (renderable != null) {
return renderable.render(id);
@@ -102,16 +112,6 @@
}
}
- @Override
- public final void wrapElement(Element element) {
- if (renderable != null) {
- renderable.wrapElement(element);
- setElement(widget.getElement());
- } else {
- this.elementToWrap = element;
- }
- }
-
/**
* Provides subclasses access to the topmost widget that defines this
* composite.
diff --git a/user/src/com/google/gwt/user/client/ui/IsRenderable.java b/user/src/com/google/gwt/user/client/ui/IsRenderable.java
index 805fc5b..15a12be 100644
--- a/user/src/com/google/gwt/user/client/ui/IsRenderable.java
+++ b/user/src/com/google/gwt/user/client/ui/IsRenderable.java
@@ -30,10 +30,16 @@
public interface IsRenderable {
/**
- * Perform any initialization needed when the widget is not attached to
- * the document. Assumed to be called after {@link #wrapElement}.
+ * Replace the previous contents of the receiver with the given element,
+ * presumed to have been created via a previous call to {@link #render}.
*/
- void performDetachedInitialization();
+ void claimElement(Element element);
+
+ /**
+ * Perform any initialization needed when the widget is not attached to
+ * the document. Assumed to be called after {@link #claimElement}.
+ */
+ void initializeClaimedElement();
/**
* @see #render(String, SafeHtmlBuilder)
@@ -46,11 +52,4 @@
* The root element of the HTML must be identifies by the given id.
*/
void render(String id, SafeHtmlBuilder builder);
-
- /**
- * Replace the previous contents of the receiver with the given element,
- * presumed to have been created via a previous call to {@link #render}.
- * Assumes the element is attached to the document.
- */
- void wrapElement(Element element);
}
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 6080825..4d26c2f 100644
--- a/user/src/com/google/gwt/user/client/ui/RenderablePanel.java
+++ b/user/src/com/google/gwt/user/client/ui/RenderablePanel.java
@@ -139,6 +139,35 @@
this.addAndReplaceElement(widget.asWidget(), toReplace);
}
+ @Override
+ public void claimElement(Element element) {
+ if (isFullyInitialized()) {
+ /*
+ * If claimElement is being called after the widget is fully initialized,
+ * that's probably a programming error, as it's much more efficient to
+ * build the whole tree at once.
+ */
+ throw new IllegalStateException(
+ "claimElement() cannot be called twice, or after forcing the widget to"
+ + " render itself (e.g. after adding it to a panel)");
+ }
+
+ setElement(element);
+ html = null;
+ if (wrapInitializationCallback != null) {
+ wrapInitializationCallback.execute();
+ wrapInitializationCallback = null;
+ }
+ }
+
+ @Override
+ public void initializeClaimedElement() {
+ if (detachedInitializationCallback != null) {
+ detachedInitializationCallback.execute();
+ detachedInitializationCallback = null;
+ }
+ }
+
/**
* Adopts the given, but doesn't change anything about its DOM element.
* Should only be used for widgets with elements that are children of this
@@ -157,14 +186,6 @@
}
@Override
- public void performDetachedInitialization() {
- if (detachedInitializationCallback != null) {
- detachedInitializationCallback.execute();
- detachedInitializationCallback = null;
- }
- }
-
- @Override
public SafeHtml render(String id) {
SafeHtmlBuilder builder = new SafeHtmlBuilder();
render(id, builder);
@@ -189,27 +210,6 @@
return getElement();
}
- @Override
- public void wrapElement(Element element) {
- if (isFullyInitialized()) {
- /*
- * If wrapElement is being called after the widget is fully initialized,
- * that's probably a programming error, as it's much more efficient to
- * build the whole tree at once.
- */
- throw new IllegalStateException(
- "wrapElement() cannot be called twice, or after forcing the widget to"
- + " render itself (e.g. after adding it to a panel)");
- }
-
- setElement(element);
- html = null;
- if (wrapInitializationCallback != null) {
- wrapInitializationCallback.execute();
- wrapInitializationCallback = null;
- }
- }
-
/**
* Returns the HTML to be set as the innerHTML of the container.
*/