From fe8377a69c2afa95b7fe289c6ccd1e8e9b0b900c Mon Sep 17 00:00:00 2001 From: TheGlitch76 Date: Thu, 18 Jun 2020 18:29:39 -0500 Subject: [PATCH 1/4] Add a hot path for avoiding typetools... ...in non-generic events. --- .../net/minecraftforge/eventbus/EventBus.java | 33 ++++++++++++++----- .../eventbus/api/IEventBus.java | 6 +++- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/minecraftforge/eventbus/EventBus.java b/src/main/java/net/minecraftforge/eventbus/EventBus.java index 2b6a0f02..9cbaf0eb 100644 --- a/src/main/java/net/minecraftforge/eventbus/EventBus.java +++ b/src/main/java/net/minecraftforge/eventbus/EventBus.java @@ -150,20 +150,35 @@ public void addListener(final Consumer consumer) { } @Override + public void addExplicitListener(Consumer consumer, Class eventClass) { + addExplicitListener(EventPriority.NORMAL, consumer, eventClass); + } + public void addListener(final EventPriority priority, final Consumer consumer) { addListener(priority, false, consumer); } + @Override + public void addExplicitListener(EventPriority priority, Consumer consumer, Class eventClass) { + addExplicitListener(priority, false, consumer, eventClass); + } + @Override public void addListener(final EventPriority priority, final boolean receiveCancelled, final Consumer consumer) { - addListener(priority, passCancelled(receiveCancelled), consumer); + addListenerWithTypetools(priority, passCancelled(receiveCancelled), consumer); + } + + @Override + public void addExplicitListener(EventPriority priority, boolean receiveCancelled, Consumer consumer, Class eventClass) { + addListener(priority, receiveCancelled, eventClass, consumer); } @Override public void addListener(final EventPriority priority, final boolean receiveCancelled, final Class eventType, final Consumer consumer) { - addListener(priority, passCancelled(receiveCancelled), eventType, consumer); + addListenerWithExplicitClass(priority, passCancelled(receiveCancelled), eventType, consumer); } + @Override public , F> void addGenericListener(final Class genericClassFilter, final Consumer consumer) { addGenericListener(genericClassFilter, EventPriority.NORMAL, consumer); @@ -176,16 +191,16 @@ public , F> void addGenericListener(final Cl @Override public , F> void addGenericListener(final Class genericClassFilter, final EventPriority priority, final boolean receiveCancelled, final Consumer consumer) { - addListener(priority, passGenericFilter(genericClassFilter).and(passCancelled(receiveCancelled)), consumer); + addListenerWithTypetools(priority, passGenericFilter(genericClassFilter).and(passCancelled(receiveCancelled)), consumer); } @Override public , F> void addGenericListener(final Class genericClassFilter, final EventPriority priority, final boolean receiveCancelled, final Class eventType, final Consumer consumer) { - addListener(priority, passGenericFilter(genericClassFilter).and(passCancelled(receiveCancelled)), eventType, consumer); + addListenerWithExplicitClass(priority, passGenericFilter(genericClassFilter).and(passCancelled(receiveCancelled)), eventType, consumer); } @SuppressWarnings("unchecked") - private void addListener(final EventPriority priority, final Predicate filter, final Consumer consumer) { + private void addListenerWithTypetools(final EventPriority priority, final Predicate filter, final Consumer consumer) { final Class eventClass = (Class) TypeResolver.resolveRawArgument(Consumer.class, consumer.getClass()); if ((Class) eventClass == TypeResolver.Unknown.class) { @@ -199,14 +214,14 @@ private void addListener(final EventPriority priority, final P + "the generic type information is erased and cannot be recovered at runtime."); } - addListener(priority, filter, eventClass, consumer); + addListenerWithExplicitClass(priority, filter, eventClass, consumer); } - private void addListener(final EventPriority priority, final Predicate filter, final Class eventClass, final Consumer consumer) { - addListener(priority, filter, eventClass, consumer, consumer); + private void addListenerWithExplicitClass(final EventPriority priority, final Predicate filter, final Class eventClass, final Consumer consumer) { + addListenerWithExplicitClass(priority, filter, eventClass, consumer, consumer); } - private void addListener(final EventPriority priority, final Predicate filter, final Class eventClass, final Consumer consumer, final Object context) { + private void addListenerWithExplicitClass(final EventPriority priority, final Predicate filter, final Class eventClass, final Consumer consumer, final Object context) { IEventListener listener = event -> doCastFilter(filter, consumer, event); ListenerList listenerList = EventListenerHelper.getListenerList(eventClass); diff --git a/src/main/java/net/minecraftforge/eventbus/api/IEventBus.java b/src/main/java/net/minecraftforge/eventbus/api/IEventBus.java index 12a3af1d..f503b3f9 100644 --- a/src/main/java/net/minecraftforge/eventbus/api/IEventBus.java +++ b/src/main/java/net/minecraftforge/eventbus/api/IEventBus.java @@ -36,6 +36,8 @@ public interface IEventBus { */ void addListener(Consumer consumer); + void addExplicitListener(Consumer consumer, Class eventClass); + /** * Add a consumer listener with the specified {@link EventPriority} and not receiving cancelled events. * @@ -45,6 +47,8 @@ public interface IEventBus { */ void addListener(EventPriority priority, Consumer consumer); + void addExplicitListener(EventPriority priority, Consumer consumer, Class eventClass); + /** * Add a consumer listener with the specified {@link EventPriority} and potentially cancelled events. * @@ -55,6 +59,7 @@ public interface IEventBus { */ void addListener(EventPriority priority, boolean receiveCancelled, Consumer consumer); + void addExplicitListener(EventPriority priority, boolean receiveCancelled, Consumer consumer, Class eventClass); /** * Add a consumer listener with the specified {@link EventPriority} and potentially cancelled events. * @@ -68,7 +73,6 @@ public interface IEventBus { * @param The {@link Event} subclass to listen for */ void addListener(EventPriority priority, boolean receiveCancelled, Class eventType, Consumer consumer); - /** * Add a consumer listener for a {@link GenericEvent} subclass, filtered to only be called for the specified * filter {@link Class}. From 644ad58ffa8439a6b42c800a553af9bb5360d3d4 Mon Sep 17 00:00:00 2001 From: TheGlitch76 Date: Thu, 18 Jun 2020 18:38:52 -0500 Subject: [PATCH 2/4] Remove unneeded method --- src/main/java/net/minecraftforge/eventbus/EventBus.java | 7 +------ .../java/net/minecraftforge/eventbus/api/IEventBus.java | 1 - 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/net/minecraftforge/eventbus/EventBus.java b/src/main/java/net/minecraftforge/eventbus/EventBus.java index 9cbaf0eb..8773bdb0 100644 --- a/src/main/java/net/minecraftforge/eventbus/EventBus.java +++ b/src/main/java/net/minecraftforge/eventbus/EventBus.java @@ -160,7 +160,7 @@ public void addListener(final EventPriority priority, final Co @Override public void addExplicitListener(EventPriority priority, Consumer consumer, Class eventClass) { - addExplicitListener(priority, false, consumer, eventClass); + addListener(priority, false, eventClass, consumer); } @Override @@ -168,11 +168,6 @@ public void addListener(final EventPriority priority, final bo addListenerWithTypetools(priority, passCancelled(receiveCancelled), consumer); } - @Override - public void addExplicitListener(EventPriority priority, boolean receiveCancelled, Consumer consumer, Class eventClass) { - addListener(priority, receiveCancelled, eventClass, consumer); - } - @Override public void addListener(final EventPriority priority, final boolean receiveCancelled, final Class eventType, final Consumer consumer) { addListenerWithExplicitClass(priority, passCancelled(receiveCancelled), eventType, consumer); diff --git a/src/main/java/net/minecraftforge/eventbus/api/IEventBus.java b/src/main/java/net/minecraftforge/eventbus/api/IEventBus.java index f503b3f9..41ff1afe 100644 --- a/src/main/java/net/minecraftforge/eventbus/api/IEventBus.java +++ b/src/main/java/net/minecraftforge/eventbus/api/IEventBus.java @@ -59,7 +59,6 @@ public interface IEventBus { */ void addListener(EventPriority priority, boolean receiveCancelled, Consumer consumer); - void addExplicitListener(EventPriority priority, boolean receiveCancelled, Consumer consumer, Class eventClass); /** * Add a consumer listener with the specified {@link EventPriority} and potentially cancelled events. * From b67f6deeefd9ea2f2ddde16158514e9f0e4ba8c0 Mon Sep 17 00:00:00 2001 From: TheGlitch76 Date: Thu, 18 Jun 2020 19:52:41 -0500 Subject: [PATCH 3/4] Just impl with default methods --- .../java/net/minecraftforge/eventbus/EventBus.java | 10 ---------- .../net/minecraftforge/eventbus/api/IEventBus.java | 8 ++++++-- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/minecraftforge/eventbus/EventBus.java b/src/main/java/net/minecraftforge/eventbus/EventBus.java index 8773bdb0..7d00a146 100644 --- a/src/main/java/net/minecraftforge/eventbus/EventBus.java +++ b/src/main/java/net/minecraftforge/eventbus/EventBus.java @@ -149,20 +149,10 @@ public void addListener(final Consumer consumer) { addListener(EventPriority.NORMAL, consumer); } - @Override - public void addExplicitListener(Consumer consumer, Class eventClass) { - addExplicitListener(EventPriority.NORMAL, consumer, eventClass); - } - public void addListener(final EventPriority priority, final Consumer consumer) { addListener(priority, false, consumer); } - @Override - public void addExplicitListener(EventPriority priority, Consumer consumer, Class eventClass) { - addListener(priority, false, eventClass, consumer); - } - @Override public void addListener(final EventPriority priority, final boolean receiveCancelled, final Consumer consumer) { addListenerWithTypetools(priority, passCancelled(receiveCancelled), consumer); diff --git a/src/main/java/net/minecraftforge/eventbus/api/IEventBus.java b/src/main/java/net/minecraftforge/eventbus/api/IEventBus.java index 41ff1afe..2790f977 100644 --- a/src/main/java/net/minecraftforge/eventbus/api/IEventBus.java +++ b/src/main/java/net/minecraftforge/eventbus/api/IEventBus.java @@ -36,7 +36,9 @@ public interface IEventBus { */ void addListener(Consumer consumer); - void addExplicitListener(Consumer consumer, Class eventClass); + default void addExplicitListener(Consumer consumer, Class eventClass) { + addListener(EventPriority.NORMAL, false, eventClass, consumer); + } /** * Add a consumer listener with the specified {@link EventPriority} and not receiving cancelled events. @@ -47,7 +49,9 @@ public interface IEventBus { */ void addListener(EventPriority priority, Consumer consumer); - void addExplicitListener(EventPriority priority, Consumer consumer, Class eventClass); + default void addExplicitListener(EventPriority priority, Consumer consumer, Class eventClass) { + addListener(priority, false, eventClass, consumer); + } /** * Add a consumer listener with the specified {@link EventPriority} and potentially cancelled events. From d7ddef720d0979e4817ce6a71e91256e8d8e2a7c Mon Sep 17 00:00:00 2001 From: TheGlitch76 Date: Thu, 18 Jun 2020 20:01:39 -0500 Subject: [PATCH 4/4] Fix gradle + checkstyle --- gradle/wrapper/gradle-wrapper.properties | 2 +- src/main/java/net/minecraftforge/eventbus/EventBus.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 52ccecf4..4108c067 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ #Tue Sep 24 15:14:52 CEST 2019 -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStorePath=wrapper/dists diff --git a/src/main/java/net/minecraftforge/eventbus/EventBus.java b/src/main/java/net/minecraftforge/eventbus/EventBus.java index 7d00a146..5dd51561 100644 --- a/src/main/java/net/minecraftforge/eventbus/EventBus.java +++ b/src/main/java/net/minecraftforge/eventbus/EventBus.java @@ -163,7 +163,6 @@ public void addListener(final EventPriority priority, final bo addListenerWithExplicitClass(priority, passCancelled(receiveCancelled), eventType, consumer); } - @Override public , F> void addGenericListener(final Class genericClassFilter, final Consumer consumer) { addGenericListener(genericClassFilter, EventPriority.NORMAL, consumer);