private void generateEventHandlerMethodClasses(final Decorable decorable, final FactoryController controller, final List<Statement> initStmts, final String dataFieldElementsVarName, final Statement fieldsMap) { final Statement instance = Refs.get("instance"); final Map<String, MetaClass> dataFieldTypes = DataFieldCodeDecorator.aggregateDataFieldTypeMap(decorable, decorable.getDecorableDeclaringType()); dataFieldTypes.put("this", decorable.getDecorableDeclaringType()); final MetaClass declaringClass = decorable.getDecorableDeclaringType(); /* Ensure that no @DataFields are handled more than once when used in combination with @SyncNative */ final Set<String> processedNativeHandlers = new HashSet<>(); final Set<String> processedEventHandlers = new HashSet<>(); for (final MetaMethod method : declaringClass.getMethodsAnnotatedWith(EventHandler.class)) { final String[] targetDataFieldNames = method.getAnnotation(EventHandler.class).value(); validateNonEmptyEventHandlerTargets(declaringClass, method, targetDataFieldNames); final MetaClass eventType = assertEventType(declaringClass, method); if (eventType.isAssignableTo(Event.class)) { processGwtDomEvent(controller, initStmts, dataFieldElementsVarName, fieldsMap, instance, dataFieldTypes, declaringClass, processedNativeHandlers, processedEventHandlers, method, targetDataFieldNames, eventType); } else if (eventType.isAssignableTo(com.google.web.bindery.event.shared.Event.class)) { processGwtWidgetEvent(controller, initStmts, fieldsMap, dataFieldTypes, declaringClass, processedNativeHandlers, processedEventHandlers, method, targetDataFieldNames, eventType); } else { processJsInteropDomEvent(initStmts, dataFieldElementsVarName, fieldsMap, instance, dataFieldTypes, declaringClass, method, targetDataFieldNames, eventType, controller); } } }
private void generateEventHandlerMethodClasses(final Decorable decorable, final FactoryController controller, final List<Statement> initStmts, final String dataFieldElementsVarName, final Statement fieldsMap) { final Statement instance = Refs.get("instance"); final Map<String, MetaClass> dataFieldTypes = DataFieldCodeDecorator.aggregateDataFieldTypeMap(decorable, decorable.getDecorableDeclaringType()); dataFieldTypes.put("this", decorable.getDecorableDeclaringType()); final MetaClass declaringClass = decorable.getDecorableDeclaringType(); /* Ensure that no @DataFields are handled more than once when used in combination with @SyncNative */ final Set<String> processedNativeHandlers = new HashSet<>(); final Set<String> processedEventHandlers = new HashSet<>(); for (final MetaMethod method : declaringClass.getMethodsAnnotatedWith(EventHandler.class)) { final String[] targetDataFieldNames = method.getAnnotation(EventHandler.class).value(); validateNonEmptyEventHandlerTargets(declaringClass, method, targetDataFieldNames); final MetaClass eventType = assertEventType(declaringClass, method); if (eventType.isAssignableTo(Event.class)) { processGwtDomEvent(controller, initStmts, dataFieldElementsVarName, fieldsMap, instance, dataFieldTypes, declaringClass, processedNativeHandlers, processedEventHandlers, method, targetDataFieldNames, eventType); } else if (eventType.isAssignableTo(com.google.web.bindery.event.shared.Event.class)) { processGwtWidgetEvent(controller, initStmts, fieldsMap, dataFieldTypes, declaringClass, processedNativeHandlers, processedEventHandlers, method, targetDataFieldNames, eventType); } else { processJsInteropDomEvent(initStmts, dataFieldElementsVarName, fieldsMap, instance, dataFieldTypes, declaringClass, method, targetDataFieldNames, eventType, controller); } } }