public void parse(XMLElement elem, String fieldName, JClassType type, final UiBinderWriter writer) throws UnableToCompleteException { String customTag = elem.consumeStringAttribute("tag", null); if (null != customTag) { OwnerField uiField = writer.getOwnerClass().getUiField(fieldName); if (uiField != null && uiField.isProvided()) { writer.die("UiField %s for FlowPanel cannot set tag when it is also provided.", fieldName); } writer.setFieldInitializerAsConstructor(fieldName, customTag); } }
private void createResourceUiField(String resourceName, OwnerField ownerField) throws UnableToCompleteException { FieldWriter fieldWriter; String initializer; if (writer.getDesignTime().isDesignTime()) { String typeName = ownerField.getType().getRawType().getQualifiedSourceName(); initializer = writer.getDesignTime().getProvidedField(typeName, ownerField.getName()); } else { initializer = "owner." + ownerField.getName(); } fieldWriter = fieldManager.registerField( FieldWriterType.IMPORTED, ownerField.getType().getRawType().getErasedType(), resourceName); fieldWriter.setInitializer(initializer); }
public FieldWriterOfLazyDomElement(FieldManager manager, JClassType templateFieldType, OwnerField ownerField, MortalLogger logger) throws UnableToCompleteException { super(manager, FieldWriterType.DEFAULT, ownerField.getName(), logger); // ownerFieldType null means LazyDomElement is not parameterized. this.ownerFieldType = ownerField.getRawType().isParameterized(); if (ownerFieldType == null) { logger.die("LazyDomElement must be of type LazyDomElement<? extends Element>."); } // Parameterized LazyDomElement<T> must match its respective html element. // Example: // DivElement -> div // SpanElement -> span parameterType = ownerFieldType.getTypeArgs()[0]; if (!templateFieldType.isAssignableTo(parameterType)) { logger.die("Field %s is %s<%s>, must be %s<%s>.", ownerField.getName(), ownerFieldType.getQualifiedSourceName(), parameterType, ownerFieldType.getQualifiedSourceName(), templateFieldType); } }
JClassType fieldType = ownerField.getType().getRawType(); if (!ownerField.isProvided()) { ownerField.getName(), templateClass.getQualifiedSourceName(), fieldType.getQualifiedSourceName()); niceWriter.write("owner.%1$s = %2$s;", ownerField.getName(), templateField); } else { + "@UiField(provided=true)%s is not assignable to %s", ownerField.getName(), fieldType.getQualifiedSourceName(), templateClass.getQualifiedSourceName());
/** * 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); } } }
.equals(ownerField.getType().getRawType().getErasedType())) { writer.die(elem, "Type must match %s.", ownerField); if (ownerField.isProvided()) { createResourceUiField(resourceName, ownerField); return; } else { resourceType = ownerField.getType().getRawType().getErasedType();
if (ownerField != null && ownerField.isProvided()) { initializer = String.format("owner.%s", name); } else if (initializer == null) { 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); if ((ownerField != null) && !ownerField.isProvided()) { w.newline(); if (!ownerField.getRawType().isAssignableTo(getDomElement(typeOracle)) && ownerField.getRawType().getAnnotation(JsType.class) != null) { w.write( "this.owner.%1$s = (%2$s) %1$s;", name, ownerField.getRawType().getQualifiedSourceName()); } else { w.write("this.owner.%1$s = %1$s;", name);
/** * Gets the type associated with this field. */ public JClassType getRawType() { // This shorten getType().getRawType() and make tests easier. return getType().getRawType(); }
/** * Register a new field for {@link com.google.gwt.uibinder.client.LazyDomElement} * types. LazyDomElement fields can only be associated with html elements. Example: * * <li>LazyDomElement<DivElement> -> <div></li> * <li>LazyDomElement<Element> -> <div></li> * <li>LazyDomElement<SpanElement> -> <span></li> * * @param templateFieldType the html type to bind, eg, SpanElement, DivElement, etc * @param ownerField the field instance */ public FieldWriter registerFieldForLazyDomElement(JClassType templateFieldType, OwnerField ownerField) throws UnableToCompleteException { if (ownerField == null) { throw new RuntimeException("Cannot register a null owner field for LazyDomElement."); } FieldWriter field = new FieldWriterOfLazyDomElement(this, templateFieldType, ownerField, logger); return registerField(ownerField.getName(), field); }
private JClassType tryEnhancingTypeInfo(String objectName, JClassType objectType) { OwnerField uiField = ownerClass.getUiField(objectName); if (uiField != null) { JParameterizedType pType = uiField.getRawType().isParameterized(); if (pType != null) { // Even field is parameterized, it might be a super class. In that case, if we use the field // type then we might miss some add handlers methods from the objectType itself; something // we don't want to happen! if (pType.getBaseType().equals(objectType)) { // Now we proved type from UiField is more specific, let's use that one return pType; } } } return objectType; }
/** * Scans the owner class to find all fields annotated with @UiField, and puts * them in {@link #uiFields} and {@link #uiFieldTypes}. * * @param ownerType the type of the owner class */ private void findUiFields(JClassType ownerType) throws UnableToCompleteException { JField[] fields = ownerType.getFields(); for (JField field : fields) { if (field.isAnnotationPresent(UiField.class)) { JClassType ownerFieldType = field.getType().isClassOrInterface(); if (ownerFieldType == null) { logger.die("Field type is not a class in field " + field.getName()); } OwnerField ownerField = new OwnerField(field, logger, context); String ownerFieldName = field.getName(); uiFields.put(ownerFieldName, ownerField); uiFieldTypes.put(ownerFieldType, ownerField); } } // Recurse to superclass JClassType superclass = ownerType.getSuperclass(); if (superclass != null) { findUiFields(superclass); } }
JClassType fieldType = ownerField.getType().getRawType(); if (!ownerField.isProvided()) { ownerField.getName(), templateClass.getQualifiedSourceName(), fieldType.getQualifiedSourceName()); niceWriter.write("owner.%1$s = %2$s;", ownerField.getName(), templateField); } else { + "@UiField(provided=true)%s is not assignable to %s", ownerField.getName(), fieldType.getQualifiedSourceName(), templateClass.getQualifiedSourceName());
/** * 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); } } }
.equals(ownerField.getType().getRawType().getErasedType())) { writer.die(elem, "Type must match %s.", ownerField); if (ownerField.isProvided()) { createResourceUiField(resourceName, ownerField); return; } else { resourceType = ownerField.getType().getRawType().getErasedType();
if (ownerField != null && ownerField.isProvided()) { initializer = String.format("owner.%s", name); } else if (initializer == null) { 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); if ((ownerField != null) && !ownerField.isProvided()) { w.newline(); if (!ownerField.getRawType().isAssignableTo(getDomElement(typeOracle)) && ownerField.getRawType().getAnnotation(JsType.class) != null) { w.write( "this.owner.%1$s = (%2$s) %1$s;", name, ownerField.getRawType().getQualifiedSourceName()); } else { w.write("this.owner.%1$s = %1$s;", name);
/** * Gets the type associated with this field. */ public JClassType getRawType() { // This shorten getType().getRawType() and make tests easier. return getType().getRawType(); }
/** * Register a new field for {@link com.google.gwt.uibinder.client.LazyDomElement} * types. LazyDomElement fields can only be associated with html elements. Example: * * <li>LazyDomElement<DivElement> -> <div></li> * <li>LazyDomElement<Element> -> <div></li> * <li>LazyDomElement<SpanElement> -> <span></li> * * @param templateFieldType the html type to bind, eg, SpanElement, DivElement, etc * @param ownerField the field instance */ public FieldWriter registerFieldForLazyDomElement(JClassType templateFieldType, OwnerField ownerField) throws UnableToCompleteException { if (ownerField == null) { throw new RuntimeException("Cannot register a null owner field for LazyDomElement."); } FieldWriter field = new FieldWriterOfLazyDomElement(this, templateFieldType, ownerField, logger); return registerField(ownerField.getName(), field); }
private JClassType tryEnhancingTypeInfo(String objectName, JClassType objectType) { OwnerField uiField = ownerClass.getUiField(objectName); if (uiField != null) { JParameterizedType pType = uiField.getRawType().isParameterized(); if (pType != null) { // Even field is parameterized, it might be a super class. In that case, if we use the field // type then we might miss some add handlers methods from the objectType itself; something // we don't want to happen! if (pType.getBaseType().equals(objectType)) { // Now we proved type from UiField is more specific, let's use that one return pType; } } } return objectType; }
/** * Scans the owner class to find all fields annotated with @UiField, and puts * them in {@link #uiFields} and {@link #uiFieldTypes}. * * @param ownerType the type of the owner class */ private void findUiFields(JClassType ownerType) throws UnableToCompleteException { JField[] fields = ownerType.getFields(); for (JField field : fields) { if (field.isAnnotationPresent(UiField.class)) { JClassType ownerFieldType = field.getType().isClassOrInterface(); if (ownerFieldType == null) { logger.die("Field type is not a class in field " + field.getName()); } OwnerField ownerField = new OwnerField(field, logger, context); String ownerFieldName = field.getName(); uiFields.put(ownerFieldName, ownerField); uiFieldTypes.put(ownerFieldType, ownerField); } } // Recurse to superclass JClassType superclass = ownerType.getSuperclass(); if (superclass != null) { findUiFields(superclass); } }
JClassType fieldType = ownerField.getType().getRawType(); if (!ownerField.isProvided()) { ownerField.getName(), templateClass.getQualifiedSourceName(), fieldType.getQualifiedSourceName()); niceWriter.write("owner.%1$s = %2$s;", ownerField.getName(), templateField); } else { + "@UiField(provided=true)%s is not assignable to %s", ownerField.getName(), fieldType.getQualifiedSourceName(), templateClass.getQualifiedSourceName());