You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by jd...@apache.org on 2026/09/30 15:20:11 UTC
(grails-core) 07/11: Deduplicate DefaultApplicationEventPublisher.publishEvent overloads
This is an automated email from the ASF dual-hosted git repository.
jdaugherty pushed a commit to branch test/document-datamapping-events
in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 164f298a3f5742350512f9bc66b6e8e62f76132a
Author: Walter Duque de Estrada <wb...@mac.com>
AuthorDate: Fri Aug 14 11:08:09 2026 -0500
Deduplicate DefaultApplicationEventPublisher.publishEvent overloads
publishEvent(ApplicationEvent) and publishEvent(Object) both
iterated applicationListeners and applied the same
SmartApplicationListener event/source-type filtering before
dispatching; only the event-wrapping step differed. Extracted the
shared iterate-filter-dispatch logic into a private dispatch(ApplicationEvent)
method both overloads now call.
Also narrows ConfigurableApplicationEventPublisher.addApplicationListener's
parameter to ApplicationListener<? extends ApplicationEvent>, matching
ConfigurableApplicationContextEventPublisher's already-narrower signature.
No behavior change; existing DefaultApplicationEventPublisherSpec
coverage (95%/81%) verifies both overloads unchanged.
---
.../ConfigurableApplicationEventPublisher.groovy | 3 ++-
.../events/DefaultApplicationEventPublisher.groovy | 28 ++++++++--------------
2 files changed, 12 insertions(+), 19 deletions(-)
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/events/ConfigurableApplicationEventPublisher.groovy b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/events/ConfigurableApplicationEventPublisher.groovy
index 57ea9a8244..7687be7319 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/events/ConfigurableApplicationEventPublisher.groovy
+++ b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/events/ConfigurableApplicationEventPublisher.groovy
@@ -19,6 +19,7 @@
package org.grails.datastore.gorm.events
+import org.springframework.context.ApplicationEvent
import org.springframework.context.ApplicationEventPublisher
import org.springframework.context.ApplicationListener
@@ -35,5 +36,5 @@ interface ConfigurableApplicationEventPublisher extends ApplicationEventPublishe
*
* @param listener The application listener
*/
- void addApplicationListener(ApplicationListener<?> listener)
+ void addApplicationListener(ApplicationListener<? extends ApplicationEvent> listener)
}
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/events/DefaultApplicationEventPublisher.groovy b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/events/DefaultApplicationEventPublisher.groovy
index 4101072e38..43fa9303b5 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/events/DefaultApplicationEventPublisher.groovy
+++ b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/events/DefaultApplicationEventPublisher.groovy
@@ -36,42 +36,34 @@ import org.springframework.context.event.SmartApplicationListener
class DefaultApplicationEventPublisher implements ConfigurableApplicationEventPublisher {
private List<ApplicationListener> applicationListeners = []
+
@Override
void publishEvent(ApplicationEvent event) {
- for (listener in applicationListeners) {
- if (listener instanceof SmartApplicationListener) {
- SmartApplicationListener smartApplicationListener = (SmartApplicationListener) listener
- if (!smartApplicationListener.supportsEventType((Class<ApplicationEvent>) event.getClass())) {
- continue
- }
- else if (!smartApplicationListener.supportsSourceType(event.source.getClass())) {
- continue
- }
- }
- listener.onApplicationEvent(event)
- }
+ dispatch(event)
}
@Override
void publishEvent(Object event) {
+ dispatch(new PayloadApplicationEvent<Object>(this, event))
+ }
+
+ private void dispatch(ApplicationEvent event) {
for (listener in applicationListeners) {
- def eventObject = new PayloadApplicationEvent<Object>(this, event)
if (listener instanceof SmartApplicationListener) {
SmartApplicationListener smartApplicationListener = (SmartApplicationListener) listener
- if (!smartApplicationListener.supportsEventType((Class<ApplicationEvent>) eventObject.getClass())) {
+ if (!smartApplicationListener.supportsEventType((Class<ApplicationEvent>) event.getClass())) {
continue
}
- else if (!smartApplicationListener.supportsSourceType(eventObject.source.getClass())) {
+ else if (!smartApplicationListener.supportsSourceType(event.source.getClass())) {
continue
}
}
-
- listener.onApplicationEvent(eventObject)
+ listener.onApplicationEvent(event)
}
}
@Override
- void addApplicationListener(ApplicationListener<?> listener) {
+ void addApplicationListener(ApplicationListener<? extends ApplicationEvent> listener) {
applicationListeners.add(listener)
}
}