Reviewers: rdayal,
Description:
Allows UiRenderer styles before the first call to render()
Fields are initialized both upon construction and on a call to render()
Also ensured that ui:with fields never get optimized as final.
Please review this at http://gwt-code-reviews.appspot.com/1794803/
Affected files:
M user/src/com/google/gwt/uibinder/rebind/UiBinderParser.java
M user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java
M user/test/com/google/gwt/uibinder/test/client/UiRendererTest.java
M user/test/com/google/gwt/uibinder/test/client/UiRendererUi.java
M user/test/com/google/gwt/uibinder/test/client/UiRendererUi.ui.xml
Index: user/src/com/google/gwt/uibinder/rebind/UiBinderParser.java
===================================================================
--- user/src/com/google/gwt/uibinder/rebind/UiBinderParser.java (revision
11175)
+++ user/src/com/google/gwt/uibinder/rebind/UiBinderParser.java (working
copy)
@@ -394,7 +394,7 @@
fieldWriter = fieldManager.registerField(
FieldWriterType.IMPORTED, matchingResourceType.getErasedType(),
resourceName);
- fieldWriter.setInitializer(UiBinderWriter.RENDER_PARAM_HOLDER_PREFIX +
resourceName);
+ fieldWriter.setInitializer(resourceName);
}
private void createSingleImport(XMLElement elem, JClassType
enclosingType,
Index: user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java
===================================================================
--- user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java (revision
11175)
+++ user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java (working
copy)
@@ -76,8 +76,6 @@
*/
public class UiBinderWriter implements Statements {
- static final String RENDER_PARAM_HOLDER_PREFIX
= "_renderer_param_holder_";
-
private static final String SAFE_VAR_PREFIX =
"somethingUnlikelyToCollideWithParamNamesWefio";
@@ -1935,8 +1933,30 @@
w.newline();
JParameter[] renderParameters = findRenderParameters(baseClass);
-
- writeRenderParameterDefinitions(w, renderParameters);
+ for (JParameter param : renderParameters) {
+ // Prevent fields related to parameters from being optimized as
having
+ // static values.
+ fieldManager.convertFieldToGetter(param.getName());
+ fieldManager.convertFieldToGetter(param.getName());
+ }
+
+ // public UiRendererImplClass() {
+ w.write("public %s() {", implClassName);
+ w.indent();
+ w.write("build_fields();");
+ w.outdent();
+ // }
+ w.write("}");
+ w.newline();
+
+ // private init_fields() {
+ w.write("private void build_fields() {", implClassName);
+ w.indent();
+ fieldManager.initializeWidgetsInnerClass(w, getOwnerClass());
+ w.outdent();
+ // }
+ w.write("}");
+ w.newline();
String renderParameterDeclarations =
renderMethodParameters(renderParameters);
w.write("public void render(final %s sb%s%s) {",
SafeHtmlBuilder.class.getName(),
@@ -1949,7 +1969,7 @@
w.write("uiId =
com.google.gwt.dom.client.Document.get().createUniqueId();");
w.newline();
- fieldManager.initializeWidgetsInnerClass(w, getOwnerClass());
+ w.write("build_fields();");
w.newline();
String safeHtml = rootField.getSafeHtml();
@@ -2245,20 +2265,13 @@
}
}
- private void writeRenderParameterDefinitions(IndentedWriter w,
JParameter[] renderParameters) {
- for (int i = 0; i < renderParameters.length; i++) {
- JParameter parameter = renderParameters[i];
- w.write("private %s %s%s;",
parameter.getType().getQualifiedSourceName(),
- RENDER_PARAM_HOLDER_PREFIX, parameter.getName());
- w.newline();
- }
- }
-
private void writeRenderParameterInitializers(IndentedWriter w,
JParameter[] renderParameters) {
for (int i = 0; i < renderParameters.length; i++) {
JParameter parameter = renderParameters[i];
- w.write("%s%s = %s;", RENDER_PARAM_HOLDER_PREFIX,
parameter.getName(), parameter.getName());
- w.newline();
+ if (fieldManager.lookup(parameter.getName()) != null) {
+ w.write("this.%s = %s;", parameter.getName(), parameter.getName());
+ w.newline();
+ }
}
}
Index: user/test/com/google/gwt/uibinder/test/client/UiRendererTest.java
===================================================================
--- user/test/com/google/gwt/uibinder/test/client/UiRendererTest.java
(revision 11175)
+++ user/test/com/google/gwt/uibinder/test/client/UiRendererTest.java
(working copy)
@@ -256,6 +256,12 @@
assertEquals(renderer.getUiStyle().disabled(),
nameSpan.getClassName());
}
+ public void testGetStyleBeforeRender() {
+ HtmlRenderer renderer = GWT.create(HtmlRenderer.class);
+ assertNotNull(renderer.getUiStyle().enabled());
+ assertNotNull(renderer.getUiStyle2().ok());
+ }
+
@Override
protected void gwtTearDown() {
docDiv.removeFromParent();
Index: user/test/com/google/gwt/uibinder/test/client/UiRendererUi.java
===================================================================
--- user/test/com/google/gwt/uibinder/test/client/UiRendererUi.java
(revision 11175)
+++ user/test/com/google/gwt/uibinder/test/client/UiRendererUi.java
(working copy)
@@ -86,10 +86,19 @@
}
/**
+ * Another style defined within the UiBinder file.
+ */
+ public interface UiStyle2 extends CssResource {
+ String ok();
+ String bad();
+ }
+
+ /**
* A UiRinder Cell renderer.
*/
public interface HtmlRenderer extends UiRenderer {
UiStyle getUiStyle();
+ UiStyle2 getUiStyle2();
SpanElement getNameSpan(Element owner);
TableColElement getNarrowColumn(Element owner);
DivElement getRoot(Element owner);
Index: user/test/com/google/gwt/uibinder/test/client/UiRendererUi.ui.xml
===================================================================
--- user/test/com/google/gwt/uibinder/test/client/UiRendererUi.ui.xml
(revision 11175)
+++ user/test/com/google/gwt/uibinder/test/client/UiRendererUi.ui.xml
(working copy)
@@ -20,6 +20,10 @@
<ui:style field="uiStyle"
type="com.google.gwt.uibinder.test.client.UiRendererUi.UiStyle">
.enabled { color:black; }
.disabled { color:gray; }
+ </ui:style>
+ <ui:style field="uiStyle2"
type="com.google.gwt.uibinder.test.client.UiRendererUi.UiStyle2">
+ .ok { color:blue; }
+ .bad { color:red; }
</ui:style>
<div ui:field='root' class="{res.style.bodyColor} {res.style.bodyFont}"
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors