List of usage examples for com.google.gwt.uibinder.client UiTemplate UiTemplate
UiTemplate
From source file:org.jboss.errai.uibinder.rebind.GWTUiBinderIOCExtension.java
License:Apache License
@Override public void configure(final IOCProcessingContext context, final InjectionContext injectionContext, final IOCConfigProcessor procFactory) { context.registerTypeDiscoveryListener(new TypeDiscoveryListener() { @Override/*from www . ja v a 2 s. c om*/ public void onDiscovery(final IOCProcessingContext context, final InjectionPoint injectionPoint, final MetaClass type) { // final MetaClass type = injectionPoint.getElementTypeOrMethodReturnType(); final MetaClass enclosingType = injectionPoint.getEnclosingType(); if (type.isAssignableFrom(UiBinder.class)) { MetaClass uiBinderParameterized = MetaClassFactory.parameterizedAs(UiBinder.class, MetaClassFactory.typeParametersOf(type.getParameterizedType().getTypeParameters()[0], enclosingType)); BuildMetaClass uiBinderBoilerPlaterIface = ClassBuilder .define(enclosingType.getFullyQualifiedName().replaceAll("\\.", "_") + "_UiBinder", uiBinderParameterized) .publicScope().staticClass().interfaceDefinition().body().getClassDefinition(); UiTemplate handler = new UiTemplate() { @Override public String value() { return enclosingType.getFullyQualifiedName() + ".ui.xml"; } @Override public Class<? extends Annotation> annotationType() { return UiTemplate.class; } }; PackageTarget packageTarget = new PackageTarget() { @Override public String value() { return enclosingType.getPackageName(); } @Override public Class<? extends Annotation> annotationType() { return PackageTarget.class; } }; uiBinderBoilerPlaterIface.addAnnotation(handler); uiBinderBoilerPlaterIface.addAnnotation(packageTarget); context.getBootstrapClass().addInnerClass(new InnerClass(uiBinderBoilerPlaterIface)); final BlockStatement staticInit = context.getBootstrapClass().getStaticInitializer(); String varName = "uiBinderInst_" + enclosingType.getFullyQualifiedName().replaceAll("\\.", "_"); if (Boolean.getBoolean("errai.simulatedClient")) { staticInit.addStatement(Stmt.declareVariable(UiBinder.class).named(varName) .initializeWith(ObjectBuilder.newInstanceOf(uiBinderBoilerPlaterIface).extend() .publicOverridesMethod("createAndBindUi", Parameter.of(type, "w")) .append(Stmt.loadLiteral(null).returnValue()).finish().finish())); } else { staticInit.addStatement(Stmt.declareVariable(UiBinder.class).named(varName) .initializeWith(Stmt.invokeStatic(GWT.class, "create", LiteralFactory.getLiteral(uiBinderBoilerPlaterIface)))); } staticInit.addStatement(Stmt.invokeStatic(UiBinderProvider.class, "registerBinder", enclosingType, Refs.get(varName))); } else if (type.isAssignableTo(SafeHtmlTemplates.class)) { final String varName = "safeTemplateInst_" + type.getFullyQualifiedName().replaceAll("\\.", "_"); if (Boolean.getBoolean("errai.simulatedClient")) { context.append(Stmt.declareVariable(SafeHtmlTemplates.class).named(varName) .initializeWith(ObjectBuilder.newInstanceOf(type).extend() .publicOverridesMethod("link", Parameter.of(SafeUri.class, "safe"), Parameter.of(String.class, "str")) .append(Stmt.loadLiteral(null).returnValue()).finish().finish())); } else { context.append(Stmt.declareVariable(type).named(varName).initializeWith( Stmt.invokeStatic(GWT.class, "create", LiteralFactory.getLiteral(type)))); } injectionContext.registerInjector(new AbstractInjector() { @Override public void renderProvider(InjectableInstance injectableInstance) { } @Override public Statement getBeanInstance(InjectableInstance injectableInstance) { return Refs.get(varName); } @Override public boolean isRendered() { return false; } @Override public boolean isSingleton() { return false; } @Override public boolean isPseudo() { return false; } @Override public String getInstanceVarName() { return varName; } @Override public MetaClass getInjectedType() { return type; } }); } } }); }