Skip to content

Commit

Permalink
Merge pull request #24811 from avpinchuk/unregister-uninstalled-listener
Browse files Browse the repository at this point in the history
Unregister event listeners from uninstalled bundles
  • Loading branch information
avpinchuk authored Feb 27, 2024
2 parents ac8e198 + 5476894 commit 47b1081
Showing 1 changed file with 14 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import jakarta.inject.Inject;

import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ExecutorService;
Expand Down Expand Up @@ -62,8 +63,11 @@ public void send(final Event<?> event) {

@Override
public void send(final Event<?> event, boolean asynchronously) {
for (final EventListener listener : listeners) {
Method eventMethod = null;
Iterator<EventListener> iterator = listeners.iterator();
while (iterator.hasNext()) {
EventListener listener = iterator.next();

Method eventMethod;
try {
// Check if the listener is interested with his event.
eventMethod = listener.getClass().getMethod("event", Event.class);
Expand All @@ -78,14 +82,15 @@ public void send(final Event<?> event, boolean asynchronously) {
// As a result, an exception like NoClassDefFoundError is thrown
// from getMethod.
logger.log(Level.SEVERE, KernelLoggerInfo.exceptionSendEvent, t);
iterator.remove();
continue;
}
if (eventMethod != null) {
RestrictTo restrictTo = eventMethod.getParameters()[0].getAnnotation(RestrictTo.class);
if (restrictTo != null) {
EventTypes<?> interested = EventTypes.create(restrictTo.value());
if (!event.is(interested)) {
continue;
}

RestrictTo restrictTo = eventMethod.getParameters()[0].getAnnotation(RestrictTo.class);
if (restrictTo != null) {
EventTypes<?> interested = EventTypes.create(restrictTo.value());
if (!event.is(interested)) {
continue;
}
}

Expand Down

0 comments on commit 47b1081

Please sign in to comment.