Skip to content

Commit 913fb17

Browse files
authored
Simplify listener class checks in posting hot-path (#62)
Remove the need for Objects#equals in the posting hot-path Remove null check in ASMEventHandler#invoke The handler is created by the factory, which for ASM and ClassFactory goes through IEventListenerFactory#getUniqueName, which would throw an NPE during handler creation, therefore handler can never be null. Cleanup ASMEventHandler, make filter final
1 parent 42eba1c commit 913fb17

File tree

3 files changed

+10
-12
lines changed

3 files changed

+10
-12
lines changed

src/main/java/net/minecraftforge/eventbus/ASMEventHandler.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,43 +10,40 @@
1010
import static org.objectweb.asm.Type.getMethodDescriptor;
1111

1212
public class ASMEventHandler implements IEventListener {
13-
private final IEventListenerFactory factory;
1413
private final IEventListener handler;
1514
private final SubscribeEvent subInfo;
1615
private final String readable;
17-
private Type filter = null;
16+
private final Type filter;
1817

1918
public ASMEventHandler(IEventListenerFactory factory, Object target, Method method, boolean isGeneric) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, ClassNotFoundException {
20-
this.factory = factory;
21-
handler = this.factory.create(method, target);
19+
handler = factory.create(method, target);
2220

2321
subInfo = method.getAnnotation(SubscribeEvent.class);
2422
readable = "ASM: " + target + " " + method.getName() + getMethodDescriptor(method);
23+
Type filter = null;
2524
if (isGeneric) {
2625
Type type = method.getGenericParameterTypes()[0];
2726
if (type instanceof ParameterizedType) {
2827
filter = ((ParameterizedType)type).getActualTypeArguments()[0];
2928
if (filter instanceof ParameterizedType) // Unlikely that nested generics will ever be relevant for event filtering, so discard them
3029
filter = ((ParameterizedType)filter).getRawType();
31-
else if (filter instanceof WildcardType) {
30+
else if (filter instanceof WildcardType wfilter) {
3231
// If there's a wildcard filter of Object.class, then remove the filter.
33-
final WildcardType wfilter = (WildcardType) filter;
3432
if (wfilter.getUpperBounds().length == 1 && wfilter.getUpperBounds()[0] == Object.class && wfilter.getLowerBounds().length == 0) {
3533
filter = null;
3634
}
3735
}
3836
}
3937
}
38+
this.filter = filter;
4039
}
4140

4241
@SuppressWarnings("rawtypes")
4342
@Override
4443
public void invoke(Event event) {
45-
if (handler != null) {
46-
if (!event.isCanceled() || subInfo.receiveCanceled()) {
47-
if (filter == null || filter == ((IGenericEvent)event).getGenericType())
48-
handler.invoke(event);
49-
}
44+
if (!event.isCanceled() || subInfo.receiveCanceled()) {
45+
if (filter == null || filter == ((IGenericEvent)event).getGenericType())
46+
handler.invoke(event);
5047
}
5148
}
5249

src/main/java/net/minecraftforge/eventbus/EventBus.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ public boolean post(Event event, IEventBusInvokeDispatcher wrapper) {
298298
int index = 0;
299299
try {
300300
for (; index < listeners.length; index++) {
301-
if (!trackPhases && Objects.equals(listeners[index].getClass(), EventPriority.class)) continue;
301+
if (!trackPhases && listeners[index].getClass() == EventPriority.class) continue;
302302
wrapper.invoke(listeners[index], event);
303303
}
304304
} catch (Throwable throwable) {

src/main/java/net/minecraftforge/eventbus/ListenerList.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ private void buildCache() {
203203
}
204204

205205
public void register(EventPriority priority, IEventListener listener) {
206+
if (listener == null) return;
206207
writeLock.acquireUninterruptibly();
207208
priorities.get(priority.ordinal()).add(listener);
208209
writeLock.release();

0 commit comments

Comments
 (0)