Skip to content

Commit 6bffebb

Browse files
committed
Avoid unnecessary object instantiation
EventService.subscribe gets called frequently. Instad of always instantiating a new list, let's wait to see if we actually have any EventHandlers to put in the list.
1 parent cd634d8 commit 6bffebb

File tree

1 file changed

+22
-18
lines changed

1 file changed

+22
-18
lines changed

src/main/java/org/scijava/event/DefaultEventService.java

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import java.lang.reflect.Method;
3636
import java.util.ArrayList;
3737
import java.util.Collection;
38+
import java.util.Collections;
3839
import java.util.HashMap;
3940
import java.util.HashSet;
4041
import java.util.List;
@@ -112,29 +113,32 @@ public <E extends SciJavaEvent> void publishLater(final E e) {
112113

113114
@Override
114115
public List<EventSubscriber<?>> subscribe(final Object o) {
115-
final List<EventSubscriber<?>> subscribers =
116-
new ArrayList<EventSubscriber<?>>();
116+
List<EventSubscriber<?>> subscribers = Collections.emptyList();
117117
final List<Method> eventHandlers =
118118
ClassUtils.getAnnotatedMethods(o.getClass(), EventHandler.class);
119-
for (final Method m : eventHandlers) {
120-
// verify that the event handler method is valid
121-
final Class<? extends SciJavaEvent> eventClass = getEventClass(m);
122-
if (eventClass == null) {
123-
log.warn("Invalid EventHandler method: " + m);
124-
continue;
125-
}
126119

127-
// verify that the event handler key isn't already claimed
128-
final String key = m.getAnnotation(EventHandler.class).key();
129-
if (!key.isEmpty()) {
130-
synchronized (keys) {
131-
if (keys.contains(key)) continue;
132-
keys.add(key);
120+
if (!eventHandlers.isEmpty()) {
121+
subscribers = new ArrayList<EventSubscriber<?>>();
122+
for (final Method m : eventHandlers) {
123+
// verify that the event handler method is valid
124+
final Class<? extends SciJavaEvent> eventClass = getEventClass(m);
125+
if (eventClass == null) {
126+
log.warn("Invalid EventHandler method: " + m);
127+
continue;
133128
}
134-
}
135129

136-
// subscribe the event handler
137-
subscribers.add(subscribe(eventClass, o, m));
130+
// verify that the event handler key isn't already claimed
131+
final String key = m.getAnnotation(EventHandler.class).key();
132+
if (!key.isEmpty()) {
133+
synchronized (keys) {
134+
if (keys.contains(key)) continue;
135+
keys.add(key);
136+
}
137+
}
138+
139+
// subscribe the event handler
140+
subscribers.add(subscribe(eventClass, o, m));
141+
}
138142
}
139143
return subscribers;
140144
}

0 commit comments

Comments
 (0)