This is an automated email from the ASF dual-hosted git repository. borinquenkid pushed a commit to branch test/document-datamapping-events in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 7ba8d626a56da2fdf285f8ea3bbbeb7f840aed3b Author: Walter Duque de Estrada <[email protected]> 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) } }
