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)
     }
 }

Reply via email to