public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer) throws UnableToCompleteException { // Parse children. for (XMLElement child : elem.consumeChildElements()) { if (!writer.isWidgetElement(child)) { writer.die(child, "Expecting only widgets in %s", elem); } FieldWriter childField = writer.parseElementToField(child); writer.addStatement("%1$s.add(%2$s);", fieldName, childField.getNextReference()); } } }
public String handleFragment(String literal) { return "\"" + UiBinderWriter.escapeTextForJavaStringLiteral(literal) + "\""; }
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer) throws UnableToCompleteException { JClassType itemType = writer.getOracle().findType(TreeItem.class.getName()); JClassType widgetType = writer.getOracle().findType(Widget.class.getName()); JClassType isWidgetType = writer.getOracle().findType(IsWidget.class.getName()); JClassType childType = writer.findFieldType(child); FieldWriter childField = writer.parseElementToField(child); writer.addStatement("%1$s.addItem(%2$s);", fieldName, childField.getNextReference()); continue; FieldWriter childField = writer.parseElementToField(child); writer.addStatement("%1$s.addItem(%2$s);", fieldName, childField.getNextReference()); continue; writer.die(child, BAD_CHILD);
public String interpretElement(XMLElement elem) throws UnableToCompleteException { if (writer.useLazyWidgetBuilders() && writer.isElementAssignableTo(elem, SafeHtml.class)) { FieldWriter childField = writer.parseElementToField(elem); return writer.tokenForSafeHtmlExpression(elem, childField.getNextReference()); } if (writer.isImportedElement(elem)) { writer.die(elem, "Not allowed in an HTML context"); } if (elem.getNamespaceUri() != null && !writer.isBinderElement(elem)) { // It's not a widget, and it's not a ui: element. writer.die(elem, "Prefix \"%s:\" has unrecognized xmlns \"%s\" (bad import?)", elem.getPrefix(), elem.getNamespaceUri()); } return pipe.interpretElement(elem); } }
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer) throws UnableToCompleteException { if (writer.getOwnerClass().getUiField(fieldName).isProvided()) { return; } if (!writer.useLazyWidgetBuilders()) { writer.die("LazyPanel only works with UiBinder.useLazyWidgetBuilders enabled."); } XMLElement child = elem.consumeSingleChildElement(); if (!writer.isWidgetElement(child)) { writer.die(child, "Expecting only widgets in %s", elem); } FieldWriter childField = writer.parseElementToField(child); String lazyPanelClassPath = LazyPanel.class.getName(); String widgetClassPath = Widget.class.getName(); String code = String.format(INITIALIZER_FORMAT, lazyPanelClassPath, widgetClassPath, childField.getNextReference()); writer.setFieldInitializer(fieldName, code); } }
writer.getDesignTime().handleUIObject(writer, elem, fieldName); writer.getLogger(), context); OwnerField uiField = writer.getOwnerClass().getUiField(fieldName); if ((uiField == null) || (!uiField.isProvided())) { creator = writer.getOwnerClass().getUiFactoryMethod(type); if (creator == null) { if (paramType != null) { if (!isString(writer, paramType)) { writer.die(elem, "In %s, cannot apply message attribute to non-string " + "constructor argument %s.", writer.die(elem, "No method found to apply message attribute %s", key); } else { setterValues.put(key, value); if (setterValues.keySet().contains(propertyName) || requiredValues.containsKey(propertyName)) { writer.die(elem, "Duplicate attribute name: %s", propertyName); null, paramType); if (value == null) { writer.die(elem, "Unable to parse %s as constructor argument " + "of type %s", attribute, paramType.getSimpleSourceName());
JEnumType unitEnumType = writer.getOracle().findType( Unit.class.getCanonicalName()).isEnum(); String unit = panelElem.consumeAttributeWithDefault("barUnit", writer.setFieldInitializerAsConstructor(fieldName, size, unit); writer.die(tabElem, "Only <%s:%s> children are allowed.", panelElem.getPrefix(), TAB); writer.die(tabElem, "Must have a child widget"); if (!writer.isWidgetElement(children.body)) { writer.die(children.body, "Must be a widget"); FieldWriter childField = writer.parseElementToField(children.body); writer, fieldName); String html = children.header.consumeInnerHtml(htmlInt); writer.addStatement("%s.add(%s, %s, true);", fieldName, childField.getNextReference(), writer.declareTemplateCall(html, fieldName)); } else if (children.customHeader != null) { XMLElement headerElement = children.customHeader.consumeSingleChildElement(); if (!writer.isWidgetElement(headerElement)) { writer.die(headerElement, "Is not a widget"); FieldWriter headerField = writer.parseElementToField(headerElement); writer.addStatement("%s.add(%s, %s);", fieldName,
public String interpretElement(XMLElement elem) throws UnableToCompleteException { if (!uiWriter.isWidgetElement(elem)) { return null; FieldManager fieldManager = uiWriter.getFieldManager(); FieldWriter fieldWriter = fieldManager.require(fieldName); String idHolder = uiWriter.declareDomIdHolder(null); uiWriter.ensureCurrentFieldAttached(); FieldWriter childFieldWriter = uiWriter.parseElementToField(elem); String elementPointer = idHolder + "Element"; uiWriter.addInitStatement( "Element %s = com.google.gwt.dom.client.Document.get().getElementById(%s);", elementPointer, idHolder); if (uiWriter.useLazyWidgetBuilders()) { uiWriter.addDetachStatement( "%1$s.addAndReplaceElement(%2$s, %3$s);", fieldName, if (uiWriter.useSafeHtmlTemplates()) { idHolder = uiWriter.tokenForStringExpression(elem, idHolder); } else { idHolder = "\" + " + idHolder + " + \"";
if (!writer.isImportedElement(toAdd)) { writer.die(child, "Expected child from a urn:import namespace, found %s", toAdd); if (!writer.isElementAssignableTo(toAdd, paramClass)) { writer.die(child, "Expected child of type %s in %s, found %s", paramClass.getSimpleSourceName(), child, toAdd); writer.die(toAdd, "Can only have one element per @UiChild parser tag."); writer.addStatement("%1$s.%2$s(%3$s);", fieldName, method.getName(), UiBinderWriter.asCommaSeparatedList(parameters));
if (!writer.isWidgetElement(customCaption)) { writer.die(customCaption, "<%s:%s> must be a widget", customCaption.getPrefix(), CUSTOM_CAPTION); writer.die(customCaption, "<%s:%s> must implement %s", customCaption.getPrefix(), CUSTOM_CAPTION, Caption.class.getCanonicalName()); FieldWriter fieldElement = writer.parseElementToField(customCaption); writer.setFieldInitializerAsConstructor(fieldName, autoHide, modal, fieldElement.getNextReference()); } else { writer.setFieldInitializerAsConstructor(fieldName, autoHide, modal);
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer) throws UnableToCompleteException { HtmlInterpreter interpreter = new HtmlInterpreter(writer, fieldName, new HtmlMessageInterpreter(writer, fieldName)); interpreter.interpretElement(elem); writer.beginAttachedSection(fieldName); String html = elem.consumeOpeningTag() + elem.consumeInnerHtml(interpreter) + elem.getClosingTag(); writer.endAttachedSection(); writer.setFieldInitializer(fieldName, String.format( "(%1$s) UiBinderUtil.fromHtml(%2$s)", type.getQualifiedSourceName(), writer.declareTemplateCall(html, fieldName))); } }
ensureAttached(); String name = declareDomIdHolder(fieldName); if (isOwnerFieldLazyDomElement(fieldName)) { 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))); setFieldInitializer(fieldName, "null"); addInitStatement("%s = com.google.gwt.dom.client.Document.get().getElementById(%s).cast();", fieldName, name); addInitStatement("%s.removeAttribute(\"id\");", fieldName); return tokenForStringExpression(source, fieldManager.convertFieldToGetter(name));
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer) throws UnableToCompleteException { handleTopBottomComponents(elem, fieldName, writer); for(XMLElement buttonsElem : elem.consumeChildElements(new SimpleInterpreter(elem.getNamespaceUri(), "buttons"))) { for(XMLElement button : buttonsElem.consumeChildElements()) { if ( ! ElementParserUtil.isElementOfType(writer, button, GxtClassnameConstants.BUTTON)) { writer.die("Element buttons can only contain Button children.", elem); } String buttonField = writer.parseElementToField(button); writer.addStatement("%s.addButton(%s);", fieldName, buttonField); } } for(XMLElement header : elem.consumeChildElements(new SimpleInterpreter(elem.getNamespaceUri(), "header"))) { String headerFieldName = writer.declareField(GxtClassnameConstants.HEADER, header); // set to null at first. assign with addStatement writer.setFieldInitializer(headerFieldName, "null"); writer.addStatement("%s = %s.getHeader();", headerFieldName, fieldName); ElementParserUtil.applyAttributes(header, headerFieldName , GxtClassnameConstants.HEADER, writer); for(XMLElement headerChild : header.consumeChildElements()) { String childField = writer.parseElementToField(headerChild); writer.addStatement("%s.addTool(%s);", headerFieldName, childField); } } }
@Override public String interpretElement(XMLElement elem) throws UnableToCompleteException { if (!uiWriter.isWidgetElement(elem)) { return super.interpretElement(elem); } JClassType type = uiWriter.findFieldType(elem); TypeOracle oracle = uiWriter.getOracle(); MessagesWriter mw = uiWriter.getMessages(); String name = mw.consumeMessageAttribute("ph", elem); if ("".equals(name)) { name = "widget" + (++serial); } String idHolder = uiWriter.declareDomIdHolder(null); idToWidgetElement.put(idHolder, elem); if (oracle.findType(HasHTML.class.getName()).isAssignableFrom(type)) { return handleHasHTMLPlaceholder(elem, name, idHolder); } if (oracle.findType(HasText.class.getName()).isAssignableFrom(type)) { return handleHasTextPlaceholder(elem, name, idHolder); } return handleOpaqueWidgetPlaceholder(elem, name, idHolder); }
/** * Determines if the element implements Caption. * * @throws UnableToCompleteException */ protected boolean isCaption(UiBinderWriter writer, XMLElement element) throws UnableToCompleteException { JClassType type = writer.findFieldType(element); Set<? extends JClassType> classes = type.getFlattenedSupertypeHierarchy(); JClassType captionType = writer.getOracle().findType( Caption.class.getCanonicalName()); return classes.contains(captionType); }
/** * 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))); }
public String interpretElement(XMLElement elem) throws UnableToCompleteException { String fieldName = writer.declareFieldIfNeeded(elem); if (fieldName != null) { String token = writer.declareDomField(elem, fieldName, element); if (elem.hasAttribute("id")) { writer.die(elem, String.format( "Cannot declare id=\"%s\" and %s=\"%s\" on the same element", elem.consumeRawAttribute("id"), writer.getUiFieldAttributeName(), fieldName)); } elem.setAttribute("id", token); } /* * Return null because we don't want to replace the dom element with any * particular string (though we may have consumed its id or gwt:field) */ return null; } }
public String interpretElement(XMLElement elem) throws UnableToCompleteException { if (!uiWriter.isRenderableElement(elem)) { return null; String stamper = uiWriter.declareRenderableStamper(); FieldManager fieldManager = uiWriter.getFieldManager(); FieldWriter fieldWriter = fieldManager.require(fieldName); FieldWriter childFieldWriter = uiWriter.parseElementToField(elem); return uiWriter.tokenForSafeHtmlExpression(elem, elementHtml);
private String consumeCurrency(XMLElement elem, UiBinderWriter writer) throws UnableToCompleteException { String currencyData = elem.consumeAttribute("currencyData", writer.getOracle().findType(CurrencyData.class.getCanonicalName())); String currencyCode = elem.consumeStringAttribute("currencyCode"); if (currencyData != null && currencyCode != null) { writer.die(elem, AT_MOST_ONE_SPECIFIED_CURRENCY); } return currencyData != null ? currencyData : currencyCode; }
writer.die(elem, "Invalid DockPanel child namespace: " + ns); writer.die(elem, "Invalid DockPanel child element: " + tagName); writer.die(elem, "Dock must specify the 'direction' attribute"); writer.die(elem, "Invalid value: dockDirection='" + value + "'"); FieldWriter childField = writer.parseElementToField(widget); writer.addStatement("%1$s.add(%2$s, %3$s);", fieldName, childField.getNextReference(), translated);