public void writeFieldDefinition(IndentedWriter w, TypeOracle typeOracle,
OwnerField ownerField, DesignTimeUtils designTime, int getterCount,
boolean useLazyWidgetBuilders)
throws UnableToCompleteException {
JClassType renderablePanelType = typeOracle.findType(
RenderablePanel.class.getName());
boolean outputAttachDetachCallbacks = useLazyWidgetBuilders
&& getAssignableType() != null
&& getAssignableType().isAssignableTo(renderablePanelType);
// Check initializer.
if (initializer == null) {
if (ownerField != null && ownerField.isProvided()) {
initializer = String.format("owner.%s", name);
} else {
JClassType type = getInstantiableType();
if (type != null) {
if ((type.isInterface() == null)
&& (type.findConstructor(new JType[0]) == null)) {
logger.die(NO_DEFAULT_CTOR_ERROR, type.getQualifiedSourceName(),
type.getName());
}
}
initializer = String.format("(%1$s) GWT.create(%1$s.class)",
getQualifiedSourceName());
}
}
w.newline();
w.write("/**");
w.write(" * Getter for %s called %s times. Type: %s. Build precedence: %s.",
name, getterCount, getFieldType(), getBuildPrecedence());
w.write(" */");
if (getterCount > 1) {
w.write("private %1$s %2$s;", getQualifiedSourceName(), name);
}
w.write("private %s %s {", getQualifiedSourceName(), FieldManager.getFieldGetter(name));
w.indent();
w.write("return %s;", (getterCount > 1) ? name : FieldManager.getFieldBuilder(name));
w.outdent();
w.write("}");
w.write("private %s %s {", getQualifiedSourceName(), FieldManager.getFieldBuilder(name));
w.indent();
w.write("// Creation section.");
if (getterCount > 1) {
w.write("%s = %s;", name, initializer);
} else {
w.write("final %s %s = %s;", getQualifiedSourceName(), name, initializer);
}
if (ownerField != null && ownerField.isProvided() && !designTime.isDesignTime()) {
w.write("assert %1$s != null : \"UiField %1$s with 'provided = true' was null\";", name);
}
w.write("// Setup section.");
for (String s : statements) {
w.write(s);
}
String attachedVar = null;
if (attachStatements.size() > 0) {
w.newline();
w.write("// Attach section.");
if (outputAttachDetachCallbacks) {
// TODO(rdcastro): This is too coupled with RenderablePanel.
// Make this nicer.
w.write("%s.wrapInitializationCallback = ", getName());
w.indent();
w.indent();
w.write(
"new com.google.gwt.user.client.Command() {");
w.outdent();
w.write("@Override public void execute() {");
w.indent();
} else {
attachedVar = getNextAttachVar();
JClassType elementType = typeOracle.findType(Element.class.getName());
String elementToAttach = getInstantiableType().isAssignableTo(elementType)
? name : name + ".getElement()";
w.write("UiBinderUtil.TempAttachment %s = UiBinderUtil.attachToDom(%s);",