Merge pull request 'Improve Documentation in Code' (#24) from f/improved-documentation into develop

Reviewed-on: https://git.kske.dev/kske/event-bus/pulls/24
Reviewed-by: DieGurke <maxi@kske.dev>
This commit is contained in:
Kai S. K. Engelbart 2021-11-01 21:48:51 +01:00
commit 40d48cb959
Signed by: Käfer & Engelbart Git
GPG Key ID: 70F2F9206EDC1FCE
3 changed files with 39 additions and 13 deletions

View File

@ -66,11 +66,28 @@ public final class EventBus {
return singletonInstance; return singletonInstance;
} }
private final Map<Class<?>, TreeSet<EventHandler>> bindings = /**
new ConcurrentHashMap<>(); * Event handler bindings (target class to handlers registered for that class), does not contain
private final Set<Object> registeredListeners = * other (polymorphic) handlers.
ConcurrentHashMap.newKeySet(); *
private final ThreadLocal<DispatchState> dispatchState = * @since 0.0.1
*/
private final Map<Class<?>, TreeSet<EventHandler>> bindings = new ConcurrentHashMap<>();
/**
* Stores all registered event listeners (which declare event handlers) and prevents them from
* being garbage collected.
*
* @since 0.0.1
*/
private final Set<Object> registeredListeners = ConcurrentHashMap.newKeySet();
/**
* The current event dispatching state, local to each thread.
*
* @since 0.1.0
*/
private final ThreadLocal<DispatchState> dispatchState =
ThreadLocal.withInitial(DispatchState::new); ThreadLocal.withInitial(DispatchState::new);
/** /**
@ -78,7 +95,8 @@ public final class EventBus {
* priority. * priority.
* *
* @param event the event to dispatch * @param event the event to dispatch
* @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
* @throws NullPointerException if the specified event is {@code null}
* @since 0.0.1 * @since 0.0.1
*/ */
public void dispatch(Object event) throws EventBusException { public void dispatch(Object event) throws EventBusException {
@ -173,8 +191,9 @@ public final class EventBus {
* Registers an event listener at this event bus. * Registers an event listener at this event bus.
* *
* @param listener the listener to register * @param listener the listener to register
* @throws EventBusException if the listener is already registered or a declared event handler * @throws EventBusException if the listener is already registered or a declared event
* does not comply with the specification * handler does not comply with the specification
* @throws NullPointerException if the specified listener is {@code null}
* @since 0.0.1 * @since 0.0.1
* @see Event * @see Event
*/ */
@ -229,6 +248,7 @@ public final class EventBus {
Objects.requireNonNull(listener); Objects.requireNonNull(listener);
logger.log(Level.INFO, "Removing event listener {0}", listener.getClass().getName()); logger.log(Level.INFO, "Removing event listener {0}", listener.getClass().getName());
// Remove bindings from binding map
for (var binding : bindings.values()) { for (var binding : bindings.values()) {
var it = binding.iterator(); var it = binding.iterator();
while (it.hasNext()) { while (it.hasNext()) {
@ -239,6 +259,8 @@ public final class EventBus {
} }
} }
} }
// Remove the listener itself
registeredListeners.remove(listener); registeredListeners.remove(listener);
} }

View File

@ -1,14 +1,18 @@
package dev.kske.eventbus.core; package dev.kske.eventbus.core;
/** /**
* This runtime exception is thrown when an event bus error occurs. This can * This unchecked exception is specific to the event bus and can be thrown under the following
* either occur while registering event listeners with invalid handlers, or when * circumstances:
* an event handler throws an exception. * <ul>
* <li>An event handler throws an exception (which is stored as the cause)</li>
* <li>An event listener with an invalid event handler is registered</li>
* <li>{@link EventBus#cancel()} is invoked from outside an active dispatch thread</li>
* </ul>
* *
* @author Kai S. K. Engelbart * @author Kai S. K. Engelbart
* @since 0.0.1 * @since 0.0.1
*/ */
public class EventBusException extends RuntimeException { public final class EventBusException extends RuntimeException {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -9,7 +9,7 @@
<packaging>pom</packaging> <packaging>pom</packaging>
<name>Event Bus</name> <name>Event Bus</name>
<description>An event handling framework for Java utilizing annotations.</description> <description>An event handling library for Java utilizing annotations.</description>
<url>https://git.kske.dev/kske/event-bus</url> <url>https://git.kske.dev/kske/event-bus</url>
<modules> <modules>