public FieldWriter registerField(JClassType fieldType, String fieldName) throws UnableToCompleteException { return registerField(FieldWriterType.DEFAULT, fieldType, fieldName); }
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); } } }
/** * Gets a FieldWriter given its name or throws a RuntimeException if not found. * @param fieldName the name of the {@link FieldWriter} to find * @return the {@link FieldWriter} instance indexed by fieldName */ public FieldWriter require(String fieldName) { FieldWriter fieldWriter = lookup(fieldName); if (fieldWriter == null) { throw new RuntimeException(String.format("The required field \"%s\" doesn't exist.", fieldName)); } return fieldWriter; }
FieldWriter fieldWriter = fieldManager.require(fieldName); FieldWriter elementWriter = fieldManager.registerField( lazyDomElementPath, elementPointer); elementWriter.setInitializer(String.format("new %s<Element>(%s)", lazyDomElementPath, fieldManager.convertFieldToGetter(idHolder))); fieldManager.convertFieldToGetter(elementPointer)); fieldWriter.addDetachStatement( "%s.addAndReplaceElement(%s, %s.get());", fieldName, fieldManager.convertFieldToGetter(childFieldWriter.getName()), fieldManager.convertFieldToGetter(elementPointer)); } else { uiWriter.addInitStatement(
/** * Converts the given field to its getter. Example: * <li> myWidgetX = get_myWidgetX() * <li> f_html1 = get_f_html1() */ public String convertFieldToGetter(String fieldName) { // could this conversion can be moved to FieldWriter? if (!useLazyWidgetBuilders) { return fieldName; } incrementFieldCounter(fieldName); return getFieldGetter(fieldName); }
/** * Interprets <ui:data> elements. */ private void createData(XMLElement elem) throws UnableToCompleteException { String name = elem.consumeRequiredRawAttribute(FIELD_ATTRIBUTE); String source = elem.consumeRequiredRawAttribute(SOURCE_ATTRIBUTE); // doNotEmbed is optional on DataResource Boolean doNotEmbed = elem.consumeBooleanConstantAttribute(DO_NOT_EMBED_ATTRIBUTE); // mimeType is optional on DataResource String mimeType = elem.consumeRawAttribute(MIME_TYPE_ATTRIBUTE); ImplicitDataResource dataMethod = bundleClass.createDataResource( name, source, mimeType, doNotEmbed); FieldWriter field = fieldManager.registerField(dataResourceType, dataMethod.getName()); field.setInitializer(String.format("%s.%s()", fieldManager.convertFieldToGetter(bundleClass.getFieldName()), dataMethod.getName())); }
for (JParameter param : renderParameters) { fieldManager.disableOptimization(param.getName()); fieldManager.initializeWidgetsInnerClass(w, getOwnerClass()); w.outdent(); w.newline(); fieldManager.writeFieldDefinitions(w, getOracle(), getOwnerClass(), getDesignTime());
/** * Parse the document element and return the source of the Java class that * will implement its UiBinder. */ private String parseDocumentElement(XMLElement elem) throws UnableToCompleteException { FieldManager fieldManager = reflector.getField("fieldManager"); ImplicitClientBundle bundleClass = reflector.getField("bundleClass"); fieldManager .registerFieldOfGeneratedType( oracle.findType(ClientBundle.class.getName()), bundleClass .getPackageName(), bundleClass.getClassName(), bundleClass.getFieldName()); // Allow GWT.create() to init the field, the default behavior MessagesWriter messages = reflector.getField("messages"); String rootField = new CustomUiBinderParser(this, messages, fieldManager, oracle, bundleClass, binderUri, customResourceParsers).parse(elem); fieldManager.validate(); StringWriter stringWriter = new StringWriter(); IndentedWriter niceWriter = new IndentedWriter( new PrintWriter(stringWriter)); reflector.callMethod("writeBinder", new Class[]{IndentedWriter.class, String.class}, niceWriter, rootField); reflector.callMethod("ensureAttachmentCleanedUp", new Class[0]); return stringWriter.toString(); }
/** * 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); } }
String getterFieldName = getterToFieldName(getter.getName()); FieldWriter fieldWriter = fieldManager.lookup(getterFieldName); if (FieldWriterType.GENERATED_CSS.equals(fieldWriter.getFieldType())) { FieldManager.getFieldGetter(getterFieldName)); } else {
private String expandDots(String value) { StringBuilder b = new StringBuilder(); String[] segments = value.split("[.]"); for (int i = 0; i < segments.length; ++i) { String segment = cssConverter.convertName(segments[i]); // The first segment is converted to a field getter. So, // "bundle.whatever" becomes "get_bundle().whatever". if (fieldManager != null && i == 0) { segment = fieldManager.convertFieldToGetter(segment); } if (b.length() == 0) { b.append(segment); // field name } else { b.append(".").append(segment).append("()"); } } return b.toString(); }
w.indent(); w.write("this.owner = owner;"); fieldManager.initializeWidgetsInnerClass(w, getOwnerClass()); w.outdent(); w.write("}"); fieldManager.writeFieldDefinitions(w, getOracle(), getOwnerClass(), getDesignTime());
private void createStyle(XMLElement elem) throws UnableToCompleteException { String body = elem.consumeUnescapedInnerText(); String[] source = elem.consumeRawArrayAttribute(SOURCE_ATTRIBUTE); if (0 == body.length() && 0 == source.length) { writer.die(elem, "Must have either a src attribute or body text"); } String name = elem.consumeRawAttribute(FIELD_ATTRIBUTE, "style"); JClassType publicType = consumeCssResourceType(elem); String[] importTypeNames = elem.consumeRawArrayAttribute(IMPORT_ATTRIBUTE); LinkedHashSet<JClassType> importTypes = new LinkedHashSet<JClassType>(); for (String type : importTypeNames) { importTypes.add(findCssResourceType(elem, type)); } Boolean gss = elem.consumeBooleanConstantAttribute(GSS_ATTRIBUTE); ImplicitCssResource cssMethod = bundleClass.createCssResource(name, source, publicType, body, importTypes, gss, resourceOracle); FieldWriter field = fieldManager.registerFieldForGeneratedCssResource(cssMethod); field.setInitializer(String.format("%s.%s()", fieldManager.convertFieldToGetter(bundleClass.getFieldName()), cssMethod.getName())); }
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();
FieldManager fieldManager = new FieldManager(oracle, logger, useLazyWidgetBuilders);
FieldWriter fieldWriter = fieldManager.require(fieldName); FieldWriter elementWriter = fieldManager.registerField(lazyDomElementPath, elementPointer); elementWriter.setInitializer(String.format("new %s<Element>(%s)", lazyDomElementPath, fieldManager.convertFieldToGetter(idHolder))); fieldManager.convertFieldToGetter(elementPointer)); fieldWriter.addDetachStatement( "%s.addAndReplaceElement(%s, %s.get());", fieldName, fieldManager.convertFieldToGetter(childFieldWriter.getName()), fieldManager.convertFieldToGetter(elementPointer)); } else { idHolder = fieldManager.convertFieldToGetter(idHolder); if (uiWriter.useSafeHtmlTemplates()) { idHolder = uiWriter.tokenForStringExpression(elem, idHolder);
/** * Interprets <ui:data> elements. */ private void createData(XMLElement elem) throws UnableToCompleteException { String name = elem.consumeRequiredRawAttribute(FIELD_ATTRIBUTE); String source = elem.consumeRequiredRawAttribute(SOURCE_ATTRIBUTE); // doNotEmbed is optional on DataResource Boolean doNotEmbed = elem.consumeBooleanConstantAttribute(DO_NOT_EMBED_ATTRIBUTE); // mimeType is optional on DataResource String mimeType = elem.consumeRawAttribute(MIME_TYPE_ATTRIBUTE); ImplicitDataResource dataMethod = bundleClass.createDataResource( name, source, mimeType, doNotEmbed); FieldWriter field = fieldManager.registerField(dataResourceType, dataMethod.getName()); field.setInitializer(String.format("%s.%s()", fieldManager.convertFieldToGetter(bundleClass.getFieldName()), dataMethod.getName())); }
for (JParameter param : renderParameters) { fieldManager.disableOptimization(param.getName()); fieldManager.initializeWidgetsInnerClass(w, getOwnerClass()); w.outdent(); w.newline(); fieldManager.writeFieldDefinitions(w, getOracle(), getOwnerClass(), getDesignTime());
/** * Parse the document element and return the source of the Java class that * will implement its UiBinder. */ private String parseDocumentElement(XMLElement elem) throws UnableToCompleteException { fieldManager.registerFieldOfGeneratedType(oracle.findType(ClientBundle.class.getName()), bundleClass.getPackageName(), bundleClass.getClassName(), bundleClass.getFieldName()); // Allow GWT.create() to init the field, the default behavior FieldWriter rootField = new UiBinderParser(this, messages, fieldManager, oracle, bundleClass, binderUri, uiBinderCtx, resourceOracle, gssOptions).parse(elem); fieldManager.validate(); StringWriter stringWriter = new StringWriter(); IndentedWriter niceWriter = new IndentedWriter(new PrintWriter(stringWriter)); if (isRenderer) { ensureInjectedCssFields(); writeRenderer(niceWriter, rootField); } else if (useLazyWidgetBuilders) { ensureInjectedCssFields(); writeBinderForRenderableStrategy(niceWriter, rootField); } else { writeBinder(niceWriter, rootField); } ensureAttachmentCleanedUp(); return stringWriter.toString(); }
/** * 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); } }