@SuppressWarnings("serial") private List<Statement> generateDataFieldMetas(final String dataFieldMetasVarName, final Decorable decorable) { final Map<String, DataField> annoMap = DataFieldCodeDecorator.aggregateDataFieldAnnotationMap(decorable, decorable.getType()); final List<Statement> stmts = new ArrayList<>(annoMap.size()+1); stmts.add(declareFinalVariable(dataFieldMetasVarName, new TypeLiteral<Map<String, DataFieldMeta>>() { }, newObject(parameterizedAs(HashMap.class, typeParametersOf(String.class, DataFieldMeta.class)), annoMap.size()))); annoMap .entrySet() .stream() .map(entry -> { final String fieldName = entry.getKey(); final DataField dataField = entry.getValue(); Statement dataFieldMetaInstance; if (dataField.attributeRules().length == 0 && dataField.defaultStrategy().equals(ConflictStrategy.USE_TEMPLATE)) { dataFieldMetaInstance = newObject(DataFieldMeta.class); } else { dataFieldMetaInstance = newObject(DataFieldMeta.class, loadLiteral(dataField.attributeRules()), loadLiteral(dataField.defaultStrategy())); } return loadVariable(dataFieldMetasVarName).invoke("put", fieldName, dataFieldMetaInstance); }) .collect(Collectors.toCollection(() -> stmts)); return stmts; }
Statement instance = decorable.getAccessStatement(); final String name = getTemplateDataFieldName((DataField) decorable.getAnnotation(), decorable.getName()); final boolean isWidget = decorable.getType().isAssignableTo(Widget.class); if (!isWidget && decorable.getType().isAnnotationPresent(Templated.class)) { instance = Stmt.invokeStatic(TemplateWidgetMapper.class, "get", instance); } else if (decorable.getType().isAssignableTo(Element.class)) { instance = Stmt.invokeStatic(ElementWrapperWidget.class, "getWidget", instance); } else if (decorable.getType().isAssignableTo(IsElement.class)) { instance = Stmt.invokeStatic(ElementWrapperWidget.class, "getWidget", Stmt.nestedCall(instance).invoke("getElement")); } else if (decorable.getType().isAssignableTo(org.jboss.errai.common.client.api.elemental2.IsElement.class)) { instance = Stmt.invokeStatic(ElementWrapperWidget.class, "getWidget", Stmt.nestedCall(instance).invoke("getElement"), null); } else if (RebindUtil.isNativeJsType(decorable.getType()) || RebindUtil.isElementalIface(decorable.getType())) { if (decorable.getType().isAssignableTo(HasValue.class)) { final MetaClass valueType = decorable.getType().getMethod("getValue", new Class[0]).getReturnType(); instance = Stmt.invokeStatic(ElementWrapperWidget.class, "getWidget", Stmt.invokeStatic(TemplateUtil.class, "asElement", instance), loadLiteral(valueType)); instance = Stmt.invokeStatic(ElementWrapperWidget.class, "getWidget", Stmt.invokeStatic(TemplateUtil.class, "asElement", instance)); } else if (decorable.getType().isAssignableTo( IsWidget.class )) { instance = Stmt.nestedCall( instance ).invoke( "asWidget" ); } else { saveDataField(decorable, decorable.getType(), name, decorable.getName(), instance);
@SuppressWarnings("serial") private List<Statement> generateDataFieldMetas(final String dataFieldMetasVarName, final Decorable decorable) { final Map<String, DataField> annoMap = DataFieldCodeDecorator.aggregateDataFieldAnnotationMap(decorable, decorable.getType()); final List<Statement> stmts = new ArrayList<>(annoMap.size()+1); stmts.add(declareFinalVariable(dataFieldMetasVarName, new TypeLiteral<Map<String, DataFieldMeta>>() { }, newObject(parameterizedAs(HashMap.class, typeParametersOf(String.class, DataFieldMeta.class)), annoMap.size()))); annoMap .entrySet() .stream() .map(entry -> { final String fieldName = entry.getKey(); final DataField dataField = entry.getValue(); Statement dataFieldMetaInstance; if (dataField.attributeRules().length == 0 && dataField.defaultStrategy().equals(ConflictStrategy.USE_TEMPLATE)) { dataFieldMetaInstance = newObject(DataFieldMeta.class); } else { dataFieldMetaInstance = newObject(DataFieldMeta.class, loadLiteral(dataField.attributeRules()), loadLiteral(dataField.defaultStrategy())); } return loadVariable(dataFieldMetasVarName).invoke("put", fieldName, dataFieldMetaInstance); }) .collect(Collectors.toCollection(() -> stmts)); return stmts; }
final Statement fieldsMetaMap) { final boolean composite = decorable.getType().isAssignableTo(Composite.class); final Map<String, Statement> dataFields = DataFieldCodeDecorator.aggregateDataFieldMap(decorable, decorable.getType()); for (final Entry<String, Statement> field : dataFields.entrySet()) { initStmts.add(invokeStatic(TemplateUtil.class, "compositeComponentReplace", decorable.getDecorableDeclaringType()
final Statement fieldsMetaMap) { final boolean composite = decorable.getType().isAssignableTo(Composite.class); final Map<String, Statement> dataFields = DataFieldCodeDecorator.aggregateDataFieldMap(decorable, decorable.getType()); for (final Entry<String, Statement> field : dataFields.entrySet()) { initStmts.add(invokeStatic(TemplateUtil.class, "compositeComponentReplace", decorable.getDecorableDeclaringType()
Statement instance = decorable.getAccessStatement(); final String name = getTemplateDataFieldName((DataField) decorable.getAnnotation(), decorable.getName()); final boolean isWidget = decorable.getType().isAssignableTo(Widget.class); if (!isWidget && decorable.getType().isAnnotationPresent(Templated.class)) { instance = Stmt.invokeStatic(TemplateWidgetMapper.class, "get", instance); } else if (decorable.getType().isAssignableTo(Element.class)) { instance = Stmt.invokeStatic(ElementWrapperWidget.class, "getWidget", instance); } else if (decorable.getType().isAssignableTo(IsElement.class)) { instance = Stmt.invokeStatic(ElementWrapperWidget.class, "getWidget", Stmt.nestedCall(instance).invoke("getElement")); } else if (decorable.getType().isAssignableTo(org.jboss.errai.common.client.api.elemental2.IsElement.class)) { instance = Stmt.invokeStatic(ElementWrapperWidget.class, "getWidget", Stmt.nestedCall(instance).invoke("getElement"), null); } else if (RebindUtil.isNativeJsType(decorable.getType()) || RebindUtil.isElementalIface(decorable.getType())) { if (decorable.getType().isAssignableTo(HasValue.class)) { final MetaClass valueType = decorable.getType().getMethod("getValue", new Class[0]).getReturnType(); instance = Stmt.invokeStatic(ElementWrapperWidget.class, "getWidget", Stmt.invokeStatic(TemplateUtil.class, "asElement", instance), loadLiteral(valueType)); instance = Stmt.invokeStatic(ElementWrapperWidget.class, "getWidget", Stmt.invokeStatic(TemplateUtil.class, "asElement", instance)); } else if (decorable.getType().isAssignableTo( IsWidget.class )) { instance = Stmt.nestedCall( instance ).invoke( "asWidget" ); } else { saveDataField(decorable, decorable.getType(), name, decorable.getName(), instance);
@Override public void generateDecorator(final Decorable decorable, final FactoryController controller) { final ShadowService shadowService = (ShadowService) decorable.getAnnotation(); String serviceName = null; Statement subscribeShadowStatement = null; final Class<?> javaClass = decorable.getType().asClass(); for (final Class<?> intf : javaClass.getInterfaces()) { if (intf.isAnnotationPresent(Remote.class)) { serviceName = intf.getName() + ":RPC"; final AnonymousClassStructureBuilder builder = generateMethodDelegates(intf, decorable, controller); subscribeShadowStatement = Stmt.castTo(ClientMessageBus.class, Stmt.invokeStatic(ErraiBus.class, "get")) .invoke("subscribeShadow", serviceName, builder.finish()); } if (serviceName == null) { if (shadowService.value().equals("")) { serviceName = decorable.getName(); } else { serviceName = shadowService.value(); } subscribeShadowStatement = Stmt.castTo(ClientMessageBus.class, Stmt.invokeStatic(ErraiBus.class, "get")) .invoke("subscribeShadow", serviceName, controller.contextGetInstanceStmt()); } controller.addFactoryInitializationStatements(Collections.singletonList(subscribeShadowStatement)); } }
@Override public void generateDecorator(final Decorable decorable, final FactoryController controller) { final ShadowService shadowService = (ShadowService) decorable.getAnnotation(); String serviceName = null; Statement subscribeShadowStatement = null; final Class<?> javaClass = decorable.getType().asClass(); for (final Class<?> intf : javaClass.getInterfaces()) { if (intf.isAnnotationPresent(Remote.class)) { serviceName = intf.getName() + ":RPC"; final AnonymousClassStructureBuilder builder = generateMethodDelegates(intf, decorable, controller); subscribeShadowStatement = Stmt.castTo(ClientMessageBus.class, Stmt.invokeStatic(ErraiBus.class, "get")) .invoke("subscribeShadow", serviceName, builder.finish()); } if (serviceName == null) { if (shadowService.value().equals("")) { serviceName = decorable.getName(); } else { serviceName = shadowService.value(); } subscribeShadowStatement = Stmt.castTo(ClientMessageBus.class, Stmt.invokeStatic(ErraiBus.class, "get")) .invoke("subscribeShadow", serviceName, controller.contextGetInstanceStmt()); } controller.addFactoryInitializationStatements(Collections.singletonList(subscribeShadowStatement)); } }
if (decorable.getType().isAssignableTo(Widget.class)) { initStmts.add(invokeStatic(StyleBindingsRegistry.class, "get") .invoke("addElementBinding", Refs.get("instance"), nestedCall(valueAccessor).invoke("getElement"))); else if (decorable.getType().isAnnotationPresent(Templated.class)) { initStmts.add(invokeStatic(StyleBindingsRegistry.class, "get") .invoke("addElementBinding", Refs.get("instance"), Stmt.invokeStatic(TemplateWidgetMapper.class, "get", valueAccessor).invoke("getElement"))); else if (decorable.getType().isAssignableTo(com.google.gwt.dom.client.Element.class) || RebindUtil.isNativeJsType(decorable.getType()) || RebindUtil.isElementalIface(decorable.getType())) { initStmts.add(invokeStatic(StyleBindingsRegistry.class, "get") .invoke("addElementBinding", Refs.get("instance"), invokeStatic(TemplateUtil.class, "asDeprecatedElement", valueAccessor))); } else { throw new RuntimeException("Unrecognized type, " + decorable.getType().getFullyQualifiedName() + ", with style binding " + decorable.getAnnotation().annotationType().getName());
if (decorable.getType().isAssignableTo(Widget.class)) { initStmts.add(invokeStatic(StyleBindingsRegistry.class, "get") .invoke("addElementBinding", Refs.get("instance"), nestedCall(valueAccessor).invoke("getElement"))); else if (decorable.getType().isAnnotationPresent(Templated.class)) { initStmts.add(invokeStatic(StyleBindingsRegistry.class, "get") .invoke("addElementBinding", Refs.get("instance"), Stmt.invokeStatic(TemplateWidgetMapper.class, "get", valueAccessor).invoke("getElement"))); else if (decorable.getType().isAssignableTo(com.google.gwt.dom.client.Element.class) || RebindUtil.isNativeJsType(decorable.getType()) || RebindUtil.isElementalIface(decorable.getType())) { initStmts.add(invokeStatic(StyleBindingsRegistry.class, "get") .invoke("addElementBinding", Refs.get("instance"), invokeStatic(TemplateUtil.class, "asDeprecatedElement", valueAccessor))); } else { throw new RuntimeException("Unrecognized type, " + decorable.getType().getFullyQualifiedName() + ", with style binding " + decorable.getAnnotation().annotationType().getName());
String property = propertyIsEmpty ? decorable.getName() : bound.property(); if (!DataBindingValidator.isValidPropertyChain(binderLookup.getDataModelType(), property)) { if (propertyIsEmpty && binderLookup.getDataModelType().equals(getValueType(decorable.getType()))) { property = "this"; MetaClass componentType = decorable.getType(); if (componentType.isAssignableTo(Widget.class)) { Statement conv = coverterStatement(bound, decorable.getType(), DataBindingValidator.getPropertyType(binderLookup.getDataModelType(), property)); Statement onKeyUp = Stmt.load(bound.onKeyUp());
String property = propertyIsEmpty ? decorable.getName() : bound.property(); if (!DataBindingValidator.isValidPropertyChain(binderLookup.getDataModelType(), property)) { if (propertyIsEmpty && binderLookup.getDataModelType().equals(getValueType(decorable.getType()))) { property = "this"; MetaClass componentType = decorable.getType(); if (componentType.isAssignableTo(Widget.class)) { Statement conv = coverterStatement(bound, decorable.getType(), DataBindingValidator.getPropertyType(binderLookup.getDataModelType(), property)); Statement onKeyUp = Stmt.load(bound.onKeyUp());