private Collection<Statement> registerDeclarativeHandlers(final MetaClass bindable) { final List<MetaMethod> handlerMethods = bindable.getMethodsAnnotatedWith(org.jboss.errai.ui.shared.api.annotations.PropertyChangeHandler.class); if ( handlerMethods.isEmpty() ) return Collections.emptyList(); final List<Statement> retVal = new ArrayList<>(); for (final MetaMethod method : handlerMethods) { if (method.getParameters().length == 1 && method.getParameters()[0].getType().getFullyQualifiedName().equals(PropertyChangeEvent.class.getName())) { final String property = method.getAnnotation(org.jboss.errai.ui.shared.api.annotations.PropertyChangeHandler.class).value(); if (!property.isEmpty()) validateProperty(bindable, property); final Object handler = createHandlerForMethod(method); final ContextualStatementBuilder subStmt = (property.isEmpty() ? loadVariable("agent").invoke("addPropertyChangeHandler", handler): loadVariable("agent").invoke("addPropertyChangeHandler", property, handler)); retVal.add(subStmt); } else { throw new RuntimeException( String.format("The @ChangeHandler method [%s] must have exactly one argument of type %s.", method.getName(), PropertyChangeEvent.class.getSimpleName())); } } return retVal; }
private Collection<Statement> registerDeclarativeHandlers(final MetaClass bindable) { final List<MetaMethod> handlerMethods = bindable.getMethodsAnnotatedWith(org.jboss.errai.ui.shared.api.annotations.PropertyChangeHandler.class); if ( handlerMethods.isEmpty() ) return Collections.emptyList(); final List<Statement> retVal = new ArrayList<>(); for (final MetaMethod method : handlerMethods) { if (method.getParameters().length == 1 && method.getParameters()[0].getType().getFullyQualifiedName().equals(PropertyChangeEvent.class.getName())) { final String property = method.getAnnotation(org.jboss.errai.ui.shared.api.annotations.PropertyChangeHandler.class).value(); if (!property.isEmpty()) validateProperty(bindable, property); final Object handler = createHandlerForMethod(method); final ContextualStatementBuilder subStmt = (property.isEmpty() ? loadVariable("agent").invoke("addPropertyChangeHandler", handler): loadVariable("agent").invoke("addPropertyChangeHandler", property, handler)); retVal.add(subStmt); } else { throw new RuntimeException( String.format("The @ChangeHandler method [%s] must have exactly one argument of type %s.", method.getName(), PropertyChangeEvent.class.getSimpleName())); } } return retVal; }