Skip to content

Commit 73e1cbc

Browse files
committed
Fix EventBus#hasListeners, fixes #95
The method now correctly returns false when no listeners are present. Previously, it would erroneously always return true.
1 parent 4dd150f commit 73e1cbc

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

eventbus-test/src/test/java/net/minecraftforge/eventbus/test/IndividualEventListenerTests.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,4 +291,29 @@ public EventBus<RecursiveTestEvent> getDefaultBus() {
291291
new RecursiveTestEvent(false).post();
292292
Assertions.assertEquals(1, hits.get(), "Listener should have been called once");
293293
}
294+
295+
/**
296+
* Tests that {@link EventBus#hasListeners()} works as expected.
297+
*/
298+
@Test
299+
public void testHasListeners() {
300+
record TestEvent() implements RecordEvent {
301+
static final EventBus<TestEvent> BUS = EventBus.create(TestEvent.class);
302+
}
303+
record CancellableTestEvent() implements Cancellable, RecordEvent {
304+
static final CancellableEventBus<CancellableTestEvent> BUS = CancellableEventBus.create(CancellableTestEvent.class);
305+
}
306+
307+
Assertions.assertFalse(TestEvent.BUS.hasListeners(), "TestEvent.BUS should not have listeners yet");
308+
var listener = TestEvent.BUS.addListener(event -> {});
309+
Assertions.assertTrue(TestEvent.BUS.hasListeners(), "TestEvent.BUS should have listeners");
310+
TestEvent.BUS.removeListener(listener);
311+
Assertions.assertFalse(TestEvent.BUS.hasListeners(), "TestEvent.BUS should no longer have listeners");
312+
313+
Assertions.assertFalse(CancellableTestEvent.BUS.hasListeners(), "CancellableTestEvent.BUS should not have listeners yet");
314+
listener = CancellableTestEvent.BUS.addListener(event -> true);
315+
Assertions.assertTrue(CancellableTestEvent.BUS.hasListeners(), "CancellableTestEvent.BUS should have listeners");
316+
CancellableTestEvent.BUS.removeListener(listener);
317+
Assertions.assertFalse(CancellableTestEvent.BUS.hasListeners(), "CancellableTestEvent.BUS should no longer have listeners");
318+
}
294319
}

src/main/java/net/minecraftforge/eventbus/internal/CancellableEventBusImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public T fire(T event) {
112112

113113
@Override
114114
public boolean hasListeners() {
115-
return getInvoker() != MH_NO_OP_PREDICATE;
115+
return ((Predicate<?>) getInvoker()) != NO_OP_PREDICATE;
116116
}
117117

118118
//region Invoker

src/main/java/net/minecraftforge/eventbus/internal/EventBusImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public T fire(T event) {
7373

7474
@Override
7575
public boolean hasListeners() {
76-
return getInvoker() != MH_NO_OP_CONSUMER;
76+
return getInvoker() != NO_OP_CONSUMER;
7777
}
7878

7979
//region Invoker

0 commit comments

Comments
 (0)