@Override public <ET extends Event> void push(ET event) { List<Subscriber<ET>> subscribers; synchronized (registeredSubscribers) { if (!registeredSubscribers.containsKey(event.getClass())) return; // Inspection disabled because all inserts in to registeredSubscribers are type insured // due to type erasure, we can not have per-pair types. // noinspection unchecked subscribers = (List<Subscriber<ET>>) new ArrayList(registeredSubscribers.get(event.getClass())); } for (Subscriber<ET> subscriber : subscribers) { boolean txDeterminate = true; for (ListenerFilter filter : subscriber.getFilters()) { // This can only occur if someone f***s something up in an annotation, as listeners should // be typesafe when passed to subscribers // noinspection unchecked txDeterminate = txDeterminate && filter.shouldSend(event); } if (txDeterminate) subscriber.eventReceived(event); } }