@@ -73,7 +73,6 @@ public Collection<EventListener> register(MethodHandles.Lookup callerLookup, Obj
7373 }
7474
7575 @ Override
76- @ SuppressWarnings ({"unchecked" , "rawtypes" })
7776 public void unregister (Collection <EventListener > listeners ) {
7877 if (listeners .isEmpty ())
7978 throw new IllegalArgumentException ("Listeners cannot be empty! You should be getting the collection from" +
@@ -96,11 +95,11 @@ private <T extends Event> EventBus<T> createEventBus(Class<T> eventType) {
9695 if (RecordEvent .class .isAssignableFrom (eventType ) && !eventType .isRecord ())
9796 throw new IllegalArgumentException ("Event type " + eventType + " is not a record class but implements RecordEvent" );
9897
99- if (MonitorAware .class .isAssignableFrom (eventType ) && !MutableEvent .class .isAssignableFrom (eventType ))
100- throw new IllegalArgumentException ("Event type " + eventType + " implements MonitorAware but is not a MutableEvent" );
101-
10298 int characteristics = AbstractEventBusImpl .computeEventCharacteristics (eventType );
10399
100+ if (Constants .isMonitorAware (characteristics ) && !MutableEvent .class .isAssignableFrom (eventType ))
101+ throw new IllegalArgumentException ("Event type " + eventType + " implements MonitorAware but is not a MutableEvent" );
102+
104103 var backingList = new ArrayList <EventListener >();
105104 List <EventBus <?>> parents = Collections .emptyList ();
106105 if (Constants .isInheritable (characteristics )) {
@@ -126,7 +125,16 @@ private <T extends Event> EventBus<T> createEventBus(Class<T> eventType) {
126125
127126 @ SuppressWarnings ("unchecked" )
128127 public <T extends Event > EventBus <T > getOrCreateEventBus (Class <T > eventType ) {
129- return (EventBus <T >) eventBuses .computeIfAbsent (eventType , event -> createEventBus (eventType ));
128+ var eventBus = eventBuses .get (eventType );
129+ if (eventBus != null )
130+ return (EventBus <T >) eventBus ;
131+
132+ var computedEventBus = createEventBus (eventType );
133+
134+ synchronized (eventBuses ) {
135+ eventBuses .putIfAbsent (eventType , computedEventBus );
136+ return computedEventBus ;
137+ }
130138 }
131139 //endregion
132140
0 commit comments