Transparently Propagate Event Handler Errors #14

Merged
kske merged 1 commits from b/error-passthrough into develop 2021-03-16 08:17:42 +01:00

View File

@ -67,7 +67,7 @@ public final class EventBus {
* @throws EventBusException if an event handler isn't accessible or has an invalid signature * @throws EventBusException if an event handler isn't accessible or has an invalid signature
* @since 0.0.1 * @since 0.0.1
*/ */
public void dispatch(Object event) { public void dispatch(Object event) throws EventBusException {
Objects.requireNonNull(event); Objects.requireNonNull(event);
logger.log(Level.INFO, "Dispatching event {0}", event); logger.log(Level.INFO, "Dispatching event {0}", event);
@ -90,6 +90,10 @@ public final class EventBus {
// Warn about system event not being handled // Warn about system event not being handled
logger.log(Level.WARNING, event + " not handled due to exception", e); logger.log(Level.WARNING, event + " not handled due to exception", e);
else if (e.getCause() instanceof Error)
// Transparently pass error to the caller
throw (Error) e.getCause();
else else
// Dispatch exception event // Dispatch exception event