Create #addListener0 to ensure proper stacktrace when adding a listener

This commit is contained in:
TheMode 2021-06-04 07:45:15 +02:00
parent a5a2a71d69
commit 030e5b6857

View File

@ -201,17 +201,11 @@ public class EventNode<T extends Event> {
}
public EventNode<T> addListener(@NotNull EventListener<? extends T> listener) {
synchronized (GLOBAL_CHILD_LOCK) {
final var eventType = listener.getEventType();
this.listenerMap.computeIfAbsent(eventType, aClass -> new CopyOnWriteArrayList<>())
.add((EventListener<T>) listener);
if (parent != null) {
synchronized (parent.lock) {
parent.increaseListenerCount(eventType, 1);
}
}
}
return this;
return addListener0(listener);
}
public <E extends T> EventNode<T> addListener(@NotNull Class<E> eventType, @NotNull Consumer<@NotNull E> listener) {
return addListener0(EventListener.of(eventType, listener));
}
public EventNode<T> removeListener(@NotNull EventListener<? extends T> listener) {
@ -230,10 +224,6 @@ public class EventNode<T extends Event> {
return this;
}
public <E extends T> EventNode<T> addListener(@NotNull Class<E> eventType, @NotNull Consumer<@NotNull E> listener) {
return addListener(EventListener.of(eventType, listener));
}
public <E extends T> EventNode<T> map(@NotNull Object value, @NotNull EventNode<E> node) {
this.redirectionMap.put(value, (EventNode<T>) node);
return this;
@ -248,6 +238,20 @@ public class EventNode<T extends Event> {
return name;
}
private EventNode<T> addListener0(@NotNull EventListener<? extends T> listener) {
synchronized (GLOBAL_CHILD_LOCK) {
final var eventType = listener.getEventType();
this.listenerMap.computeIfAbsent(eventType, aClass -> new CopyOnWriteArrayList<>())
.add((EventListener<T>) listener);
if (parent != null) {
synchronized (parent.lock) {
parent.increaseListenerCount(eventType, 1);
}
}
}
return this;
}
private void increaseListenerCount(Class<? extends T> eventClass, int count) {
final int current = childEventMap.getInt(eventClass);
final int result = current + count;