private static <T> void dispatchVoidMethod(@NotNull Iterable<? extends T> listeners, @NotNull Method method, Object[] args) {
    List<Throwable> exceptions = null;
    method.setAccessible(true);

    for (T listener : listeners) {
      try {
        method.invoke(listener, args);
      }
      catch (Throwable e) {
        exceptions = handleException(e, exceptions);
      }
    }

    if (exceptions != null) {
      throwExceptions(exceptions);
    }
  }
private static <T> void dispatchVoidMethod(@NotNull Iterable<? extends T> listeners, @NotNull Method method, Object[] args)