FieldWriter childFieldWriter = uiWriter.parseElementToField(childElem); genSetWidgetTextCall(idHolder, childFieldWriter.getName()); FieldWriter elementWriter = fieldManager.registerField( lazyDomElementPath, elementPointer); elementWriter.setInitializer(String.format("new %s<Element>(%s)", lazyDomElementPath, fieldManager.convertFieldToGetter(idHolder))); fieldWriter.addAttachStatement("%s.get();", fieldManager.convertFieldToGetter(elementPointer)); fieldWriter.addDetachStatement( "%s.addAndReplaceElement(%s, %s.get());", fieldName, fieldManager.convertFieldToGetter(childFieldWriter.getName()), fieldManager.convertFieldToGetter(elementPointer)); } else { uiWriter.addInitStatement( "%1$s.addAndReplaceElement(%2$s, %3$s);", fieldName, childFieldWriter.getName(), idHolder);
interpreter.menuBarField.getNextReference());
private FieldWriter registerField(String fieldName, FieldWriter field) throws UnableToCompleteException { ensureValidity(fieldName); requireUnique(fieldName); fieldsMap.put(fieldName, field); if (parsedFieldStack.size() > 0) { FieldWriter parent = parsedFieldStack.peek().field; field.setBuildPrecedence(parent.getBuildPrecedence() + 1); parent.needs(field); } return field; }
FieldWriter childFieldWriter = uiWriter.parseElementToField(elem); fieldWriter.addAttachStatement( "%s.claimElement(%s.findStampedElement());", fieldManager.convertFieldToGetter(childFieldWriter.getName()), fieldManager.convertFieldToGetter(stamper)); fieldWriter.addDetachStatement( "%s.initializeClaimedElement();", fieldManager.convertFieldToGetter(childFieldWriter.getName())); fieldWriter.addDetachStatement( "%s.logicalAdd(%s);", fieldManager.convertFieldToGetter(fieldName), fieldManager.convertFieldToGetter(childFieldWriter.getName())); String elementHtml = fieldManager.convertFieldToGetter(childFieldWriter.getName()) + ".render(" + fieldManager.convertFieldToGetter(stamper) + ")"; return uiWriter.tokenForSafeHtmlExpression(elem, elementHtml);
if (body != null) { writer.die(elem, "May have only one widget, but found %s and %s", body.getName(), child); writer.addStatement("%s.setWidget(%s);", fieldName, body.getNextReference());
field.setInitializer(formatCode("new %s(%s)", field.getQualifiedSourceName(), fieldManager.convertFieldToGetter(name))); } else { field.setInitializer(formatCode("new %s(%s).get().cast()", LazyDomElement.class.getCanonicalName(), fieldManager.convertFieldToGetter(name))); fieldManager.require(ancestorField).addAttachStatement( fieldManager.convertFieldToGetter(fieldName) + ";");
/** * Gives the writer the initializer to use for this field instead of the * default GWT.create call. * * @throws IllegalStateException if an initializer has already been set */ public void setFieldInitializer(String fieldName, String factoryMethod) { fieldManager.lookup(fieldName).setInitializer(factoryMethod); }
/** * Adds a statement to the block run after fields are declared, in the style * of {@link String#format}. */ public void addStatement(String format, Object... args) { String code = formatCode(format, args); if (useLazyWidgetBuilders) { /** * I'm intentionally over-simplifying this and assuming that the input * comes always in the format: field.somestatement(); Thus, field can be * extracted easily and the element parsers don't need to be changed all * at once. */ int idx = code.indexOf("."); String fieldName = code.substring(0, idx); fieldManager.require(fieldName).addStatement(format, args); } else { statements.add(code); } }
/** * Write the statements to fill in the fields of the UI owner. */ private void writeOwnerFieldSetters(IndentedWriter niceWriter) throws UnableToCompleteException { if (designTime.isDesignTime()) { return; } for (OwnerField ownerField : getOwnerClass().getUiFields()) { String fieldName = ownerField.getName(); FieldWriter fieldWriter = fieldManager.lookup(fieldName); if (fieldWriter != null) { // ownerField is a widget. JClassType type = fieldWriter.getInstantiableType(); if (type != null) { maybeWriteFieldSetter(niceWriter, ownerField, fieldWriter.getInstantiableType(), fieldName); } else { // Must be a generated type if (!ownerField.isProvided()) { niceWriter.write("owner.%1$s = %1$s;", fieldName); } } } else { // ownerField was not found as bundle resource or widget, must die. die("Template %s has no %s attribute for %s.%s#%s", templatePath, getUiFieldAttributeName(), uiOwnerType.getPackage().getName(), uiOwnerType.getName(), fieldName); } } }
public int compare(FieldWriter field1, FieldWriter field2) { // First get type precedence, if ties the field precedence is used. int precedence = field2.getFieldType().getBuildPrecedence() - field1.getFieldType().getBuildPrecedence(); if (precedence == 0) { precedence = field2.getBuildPrecedence() - field1.getBuildPrecedence(); } return precedence; } };
/** * Initialize with field builders the generated <b>Widgets</b> inner class. * {@see com.google.gwt.uibinder.rebind.FieldWriter#writeFieldBuilder}. */ public void initializeWidgetsInnerClass(IndentedWriter w, OwnerClass ownerClass) throws UnableToCompleteException { FieldWriter[] fields = fieldsMap.values().toArray( new FieldWriter[fieldsMap.size()]); Arrays.sort(fields, BUILD_DEFINITION_SORT); for (FieldWriter field : fields) { int count = getGetterCounter(field.getName()); field.writeFieldBuilder(w, count, ownerClass.getUiField(field.getName())); } }
/** * Outputs the getter and builder definitions for all fields. * {@see com.google.gwt.uibinder.rebind.AbstractFieldWriter#writeFieldDefinition}. */ public void writeFieldDefinitions(IndentedWriter writer, TypeOracle typeOracle, OwnerClass ownerClass, DesignTimeUtils designTime) throws UnableToCompleteException { Collection<FieldWriter> fields = fieldsMap.values(); for (FieldWriter field : fields) { int counter = getGetterCounter(field.getName()); field.writeFieldDefinition( writer, typeOracle, ownerClass.getUiField(field.getName()), designTime, counter, useLazyWidgetBuilders); } }
builder.append("\")"); FieldWriter ancestorWriter = fieldManager.require(ancestorExpression); ancestorWriter.setBuildPrecedence(1 + ancestorWriter.getBuildPrecedence()); writer.setFieldInitializer(fieldName, builder.toString());
String fieldName = getterToFieldName(getterName); FieldWriter field = fieldManager.lookup(fieldName); if (field == null || (!FieldWriterType.DEFAULT.equals(field.getFieldType()) && !FieldWriterType.GENERATED_CSS.equals(field.getFieldType()))) { die("%s does not match a \"ui:field='%s'\" declaration in %s, " + "or '%s' refers to something other than a ui:style" owner.getQualifiedSourceName(), fieldName); if (FieldWriterType.DEFAULT.equals(field.getFieldType()) && jMethod.getParameterTypes().length != 1) { die("Field getter %s must have exactly one parameter in %s", getterName, owner.getQualifiedSourceName()); } else if (FieldWriterType.GENERATED_CSS.equals(field.getFieldType()) && jMethod.getParameterTypes().length != 0) { die("Style getter %s must have no parameters in %s", getterName,
parser.parse(elem, field.getName(), type, this);
private void genSetWidgetTextCall(String idHolder, String childField) { if (uiWriter.useLazyWidgetBuilders()) { if (idIsHasText.contains(idHolder)) { fieldManager.require(fieldName).addAttachStatement( "%s.setText(%s.getElementById(%s).getInnerText());", fieldManager.convertFieldToGetter(childField), fieldName, fieldManager.convertFieldToGetter(idHolder)); } else if (idIsHasHTML.contains(idHolder)) { fieldManager.require(fieldName).addAttachStatement( "%s.setHTML(%s.getElementById(%s).getInnerHTML());", fieldManager.convertFieldToGetter(childField), fieldName, fieldManager.convertFieldToGetter(idHolder)); } } else { if (idIsHasText.contains(idHolder)) { uiWriter.addInitStatement( "%s.setText(%s.getElementById(%s).getInnerText());", childField, fieldName, idHolder); } if (idIsHasHTML.contains(idHolder)) { uiWriter.addInitStatement( "%s.setHTML(%s.getElementById(%s).getInnerHTML());", childField, fieldName, idHolder); } } }
/** * Instructs the writer to initialize the field with a specific constructor * invocation, instead of the default GWT.create call. * * @param fieldName the field to initialize * @param args arguments to the constructor call */ public void setFieldInitializerAsConstructor(String fieldName, String... args) { JClassType assignableType = fieldManager.lookup(fieldName).getAssignableType(); setFieldInitializer(fieldName, formatCode("new %s(%s)", assignableType.getQualifiedSourceName(), asCommaSeparatedList(args))); }
field.setInitializer(formatCode("new %s(%s)", field.getQualifiedSourceName(), fieldManager.convertFieldToGetter(name))); } else { field.setInitializer(formatCode("new %s(%s).get().cast()", LazyDomElement.class.getCanonicalName(), fieldManager.convertFieldToGetter(name))); fieldManager.require(ancestorField).addAttachStatement( fieldManager.convertFieldToGetter(fieldName) + ";");
/** * Gives the writer the initializer to use for this field instead of the * default GWT.create call. * * @throws IllegalStateException if an initializer has already been set */ public void setFieldInitializer(String fieldName, String factoryMethod) { fieldManager.lookup(fieldName).setInitializer(factoryMethod); }
FieldWriter childFieldWriter = uiWriter.parseElementToField(elem); fieldWriter.addAttachStatement( "%s.claimElement(%s.findStampedElement());", fieldManager.convertFieldToGetter(childFieldWriter.getName()), fieldManager.convertFieldToGetter(stamper)); fieldWriter.addDetachStatement( "%s.initializeClaimedElement();", fieldManager.convertFieldToGetter(childFieldWriter.getName())); fieldWriter.addDetachStatement( "%s.logicalAdd(%s);", fieldManager.convertFieldToGetter(fieldName), fieldManager.convertFieldToGetter(childFieldWriter.getName())); String elementHtml = fieldManager.convertFieldToGetter(childFieldWriter.getName()) + ".render(" + fieldManager.convertFieldToGetter(stamper) + ")"; return uiWriter.tokenForSafeHtmlExpression(elem, elementHtml);