UiBinderWriter writer) throws UnableToCompleteException { writer.getDesignTime().handleUIObject(writer, elem, fieldName); JMethod factoryMethod = (JMethod) creator; String initializer; if (writer.getDesignTime().isDesignTime()) { String typeName = factoryMethod.getReturnType().getQualifiedSourceName(); initializer = writer.getDesignTime().getProvidedFactory(typeName, factoryMethod.getName(), UiBinderWriter.asCommaSeparatedList(args));
private void writeStatics(IndentedWriter w) { writeStaticMessagesInstance(w); designTime.addDeclarations(w); }
/** * Returns the design time path of this element, in form of indexes from root, * such as "0/0/1/0". */ public String getDesignTimePath() { return designTime.getPath(elem); }
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); }
private void writeHandlers(IndentedWriter w) throws UnableToCompleteException { if (designTime.isDesignTime()) { return; } handlerEvaluator.run(w, fieldManager, "owner"); }
private String consumeAttributeWithParser(String name, AttributeParser parser) throws UnableToCompleteException { String value = parser.parse(this, consumeRawAttribute(name)); designTime.putAttribute(this, name, value); return value; }
private void createResourceUiFactory(XMLElement elem, String resourceName, JClassType resourceType) throws UnableToCompleteException { FieldWriter fieldWriter; JMethod factoryMethod = writer.getOwnerClass().getUiFactoryMethod(resourceType); JClassType methodReturnType = factoryMethod.getReturnType().getErasedType() .isClassOrInterface(); if (!resourceType.getErasedType().equals(methodReturnType)) { writer.die(elem, "Type must match %s.", methodReturnType); } String initializer; if (writer.getDesignTime().isDesignTime()) { String typeName = factoryMethod.getReturnType().getQualifiedSourceName(); initializer = writer.getDesignTime().getProvidedFactory(typeName, factoryMethod.getName(), ""); } else { initializer = String.format("owner.%s()", factoryMethod.getName()); } fieldWriter = fieldManager.registerField( FieldWriterType.IMPORTED, resourceType, resourceName); fieldWriter.setInitializer(initializer); }
useLazyWidgetBuilders(logger, propertyOracle) && !designTime.isDesignTime(); FieldManager fieldManager = new FieldManager(oracle, logger, useLazyWidgetBuilders); designTime.rememberPathForElements(doc);
private Document getW3cDoc(MortalLogger logger, DesignTimeUtils designTime, ResourceOracle resourceOracle, String templatePath) throws UnableToCompleteException { Resource resource = resourceOracle.getResourceMap().get(templatePath); if (null == resource) { logger.die("Unable to find resource: " + templatePath); } Document doc = null; try { String content = designTime.getTemplateContent(templatePath); if (content == null) { content = Util.readStreamAsString(resource.openContents()); } doc = new W3cDomHelper(logger.getTreeLogger(), resourceOracle).documentFor( content, resource.getPath()); } catch (SAXParseException e) { logger.die( "Error parsing XML (line " + e.getLineNumber() + "): " + e.getMessage(), e); } return doc; }
@Override public String generate(TreeLogger logger, GeneratorContext genCtx, String fqInterfaceName) throws UnableToCompleteException { TypeOracle oracle = genCtx.getTypeOracle(); JClassType interfaceType; try { interfaceType = oracle.getType(fqInterfaceName); } catch (NotFoundException e) { throw new RuntimeException(e); } DesignTimeUtils designTime; if (DesignTimeUtilsImpl.isDesignTime(fqInterfaceName)) { designTime = new DesignTimeUtilsImpl(); } else { designTime = DesignTimeUtilsStub.EMPTY; } String implName = interfaceType.getName().replace('.', '_') + "Impl"; implName = designTime.getImplName(implName); String packageName = interfaceType.getPackage().getName(); PrintWriterManager writers = new PrintWriterManager(genCtx, logger, packageName); PrintWriter printWriter = writers.tryToMakePrintWriterFor(implName); if (printWriter != null) { generateOnce(interfaceType, implName, printWriter, logger, oracle, genCtx.getResourcesOracle(), genCtx.getPropertyOracle(), writers, designTime); } return packageName + "." + implName; }
private void generateOnce(JClassType interfaceType, String implName, PrintWriter binderPrintWriter, TreeLogger treeLogger, TypeOracle oracle, ResourceOracle resourceOracle, PropertyOracle propertyOracle, PrintWriterManager writerManager, DesignTimeUtils designTime) throws UnableToCompleteException { MortalLogger logger = new MortalLogger(treeLogger); String templatePath = deduceTemplateFile(logger, interfaceType); MessagesWriter messages = new MessagesWriter(oracle, BINDER_URI, logger, templatePath, interfaceType.getPackage().getName(), implName); boolean useLazyWidgetBuilders = useLazyWidgetBuilders(logger, propertyOracle); FieldManager fieldManager = new FieldManager(oracle, logger, useLazyWidgetBuilders); UiBinderWriter uiBinderWriter = new CustomUiBinderWriter(interfaceType, implName, templatePath, oracle, logger, fieldManager, messages, designTime, uiBinderCtx, useSafeHtmlTemplates(logger, propertyOracle), useLazyWidgetBuilders, BINDER_URI, propertyOracle); Document doc = getW3cDoc(logger, designTime, resourceOracle, templatePath); designTime.rememberPathForElements(doc); uiBinderWriter.parseDocument(doc, binderPrintWriter); if (messages.hasMessages()) { messages.write(writerManager.makePrintWriterFor(messages.getMessagesClassName())); } ImplicitClientBundle bundleClass = uiBinderWriter.getBundleClass(); new BundleWriter(bundleClass, writerManager, oracle, logger).write(); writerManager.commit(); }
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); }
private void writeHandlers(IndentedWriter w) throws UnableToCompleteException { if (designTime.isDesignTime()) { return; } handlerEvaluator.run(w, fieldManager, "owner"); }
private String consumeAttributeWithParser(String name, AttributeParser parser) throws UnableToCompleteException { String value = parser.parse(this, consumeRawAttribute(name)); designTime.putAttribute(this, name, value); return value; }
private void createResourceUiFactory(XMLElement elem, String resourceName, JClassType resourceType) throws UnableToCompleteException { FieldWriter fieldWriter; JMethod factoryMethod = writer.getOwnerClass().getUiFactoryMethod(resourceType); JClassType methodReturnType = factoryMethod.getReturnType().getErasedType() .isClassOrInterface(); if (!resourceType.getErasedType().equals(methodReturnType)) { writer.die(elem, "Type must match %s.", methodReturnType); } String initializer; if (writer.getDesignTime().isDesignTime()) { String typeName = factoryMethod.getReturnType().getQualifiedSourceName(); initializer = writer.getDesignTime().getProvidedFactory(typeName, factoryMethod.getName(), ""); } else { initializer = String.format("owner.%s()", factoryMethod.getName()); } fieldWriter = fieldManager.registerField( FieldWriterType.IMPORTED, resourceType, resourceName); fieldWriter.setInitializer(initializer); }
useLazyWidgetBuilders(logger, propertyOracle) && !designTime.isDesignTime(); FieldManager fieldManager = new FieldManager(oracle, logger, useLazyWidgetBuilders); designTime.rememberPathForElements(doc);
private Document getW3cDoc(MortalLogger logger, DesignTimeUtils designTime, ResourceOracle resourceOracle, String templatePath, Resource resource) throws UnableToCompleteException { Document doc = null; try { String content = designTime.getTemplateContent(templatePath); if (content == null) { content = Util.readStreamAsString(resource.openContents()); } doc = new W3cDomHelper(logger.getTreeLogger(), resourceOracle).documentFor( content, resource.getPath()); } catch (IOException iex) { logger.die("Error opening resource:" + resource.getLocation(), iex); } catch (SAXParseException e) { logger.die( "Error parsing XML (line " + e.getLineNumber() + "): " + e.getMessage(), e); } return doc; }
@Override public String generate(TreeLogger logger, GeneratorContext genCtx, String fqInterfaceName) throws UnableToCompleteException { TypeOracle oracle = genCtx.getTypeOracle(); ResourceOracle resourceOracle = genCtx.getResourcesOracle(); JClassType interfaceType; try { interfaceType = oracle.getType(fqInterfaceName); } catch (NotFoundException e) { throw new RuntimeException(e); } DesignTimeUtils designTime; if (DesignTimeUtilsImpl.isDesignTime(fqInterfaceName)) { designTime = new DesignTimeUtilsImpl(); } else { designTime = DesignTimeUtilsStub.EMPTY; } String implName = interfaceType.getName().replace('.', '_') + "Impl"; implName = designTime.getImplName(implName); String packageName = interfaceType.getPackage().getName(); PrintWriterManager writers = new PrintWriterManager(genCtx, logger, packageName); PrintWriter printWriter = writers.tryToMakePrintWriterFor(implName); if (printWriter != null) { generateOnce(interfaceType, implName, printWriter, logger, oracle, resourceOracle, genCtx.getPropertyOracle(), writers, designTime); } return packageName + "." + implName; }
UiBinderWriter writer) throws UnableToCompleteException { writer.getDesignTime().handleUIObject(writer, elem, fieldName); JMethod factoryMethod = (JMethod) creator; String initializer; if (writer.getDesignTime().isDesignTime()) { String typeName = factoryMethod.getReturnType().getQualifiedSourceName(); initializer = writer.getDesignTime().getProvidedFactory(typeName, factoryMethod.getName(), UiBinderWriter.asCommaSeparatedList(args));
/** * Write declarations for variables or fields to hold elements declared with * gwt:field in the template. For those that have not had constructor * generation suppressed, emit GWT.create() calls instantiating them (or die * if they have no default constructor). * * @throws UnableToCompleteException on constructor problem */ private void writeGwtFields(IndentedWriter niceWriter) throws UnableToCompleteException { // For each provided field in the owner class, initialize from the owner Collection<OwnerField> ownerFields = getOwnerClass().getUiFields(); for (OwnerField ownerField : ownerFields) { if (ownerField.isProvided()) { String fieldName = ownerField.getName(); FieldWriter fieldWriter = fieldManager.lookup(fieldName); // TODO why can this be null? if (fieldWriter != null) { String initializer; if (designTime.isDesignTime()) { String typeName = ownerField.getType().getRawType().getQualifiedSourceName(); initializer = designTime.getProvidedField(typeName, ownerField.getName()); } else { initializer = formatCode("owner.%1$s", fieldName); } fieldManager.lookup(fieldName).setInitializer(initializer); } } } fieldManager.writeGwtFieldsDeclaration(niceWriter); }