@@ -73,7 +73,6 @@ public Collection<EventListener> register(MethodHandles.Lookup callerLookup, Obj
73
73
}
74
74
75
75
@ Override
76
- @ SuppressWarnings ({"unchecked" , "rawtypes" })
77
76
public void unregister (Collection <EventListener > listeners ) {
78
77
if (listeners .isEmpty ())
79
78
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) {
96
95
if (RecordEvent .class .isAssignableFrom (eventType ) && !eventType .isRecord ())
97
96
throw new IllegalArgumentException ("Event type " + eventType + " is not a record class but implements RecordEvent" );
98
97
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
-
102
98
int characteristics = AbstractEventBusImpl .computeEventCharacteristics (eventType );
103
99
100
+ if (Constants .isMonitorAware (characteristics ) && !MutableEvent .class .isAssignableFrom (eventType ))
101
+ throw new IllegalArgumentException ("Event type " + eventType + " implements MonitorAware but is not a MutableEvent" );
102
+
104
103
var backingList = new ArrayList <EventListener >();
105
104
List <EventBus <?>> parents = Collections .emptyList ();
106
105
if (Constants .isInheritable (characteristics )) {
@@ -126,7 +125,16 @@ private <T extends Event> EventBus<T> createEventBus(Class<T> eventType) {
126
125
127
126
@ SuppressWarnings ("unchecked" )
128
127
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
+ }
130
138
}
131
139
//endregion
132
140
0 commit comments