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 36e717a8462230a0791aef7474f54262cd44a8aa
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Fri Aug 14 10:30:16 2026 -0500

    Remove dead event-argument-hook branch from DomainEventListener
    
    invokeEvent's eventMethod.getParameterTypes().length == 1 branch could
    never be taken: findAndCacheEvent caches hooks via Spring's
    ReflectionUtils.findMethod(Class, String), which only ever matches
    zero-argument methods (confirmed by decompiling spring-core), so a
    cached eventMethod can never have one parameter. Dropped the branch
    and the now-unused ApplicationEvent parameter it required, along with
    the argument at all 8 call sites. No behavior change; full module
    suite, jacoco, and codeStyle all clean.
---
 .../datastore/gorm/events/DomainEventListener.java | 31 +++++++++-------------
 .../gorm/events/DomainEventListenerSpec.groovy     | 10 +++----
 2 files changed, 17 insertions(+), 24 deletions(-)

diff --git 
a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/events/DomainEventListener.java
 
b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/events/DomainEventListener.java
index 4f800d779b..fca82d846f 100644
--- 
a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/events/DomainEventListener.java
+++ 
b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/events/DomainEventListener.java
@@ -163,7 +163,7 @@ public class DomainEventListener extends 
AbstractPersistenceEventListener
             }
         }
 
-        return invokeEvent(EVENT_BEFORE_INSERT, entity, ea, event);
+        return invokeEvent(EVENT_BEFORE_INSERT, entity, ea);
     }
 
     protected void setVersion(final EntityAccess ea) {
@@ -180,19 +180,19 @@ public class DomainEventListener extends 
AbstractPersistenceEventListener
     }
 
     public boolean beforeUpdate(final PersistentEntity entity, final 
EntityAccess ea) {
-        return invokeEvent(EVENT_BEFORE_UPDATE, entity, ea, null);
+        return invokeEvent(EVENT_BEFORE_UPDATE, entity, ea);
     }
 
     public boolean beforeUpdate(final PersistentEntity entity, final 
EntityAccess ea, PreUpdateEvent event) {
-        return invokeEvent(EVENT_BEFORE_UPDATE, entity, ea, event);
+        return invokeEvent(EVENT_BEFORE_UPDATE, entity, ea);
     }
 
     public boolean beforeDelete(final PersistentEntity entity, final 
EntityAccess ea) {
-        return invokeEvent(EVENT_BEFORE_DELETE, entity, ea, null);
+        return invokeEvent(EVENT_BEFORE_DELETE, entity, ea);
     }
 
     public boolean beforeDelete(final PersistentEntity entity, final 
EntityAccess ea, PreDeleteEvent event) {
-        return invokeEvent(EVENT_BEFORE_DELETE, entity, ea, event);
+        return invokeEvent(EVENT_BEFORE_DELETE, entity, ea);
     }
 
     public void beforeLoad(final PersistentEntity entity, final EntityAccess 
ea) {
@@ -200,7 +200,7 @@ public class DomainEventListener extends 
AbstractPersistenceEventListener
     }
 
     public void beforeLoad(final PersistentEntity entity, final EntityAccess 
ea, PreLoadEvent event) {
-        invokeEvent(EVENT_BEFORE_LOAD, entity, ea, event);
+        invokeEvent(EVENT_BEFORE_LOAD, entity, ea);
     }
 
     public void afterDelete(final PersistentEntity entity, final EntityAccess 
ea) {
@@ -208,7 +208,7 @@ public class DomainEventListener extends 
AbstractPersistenceEventListener
     }
 
     public void afterDelete(final PersistentEntity entity, final EntityAccess 
ea, PostDeleteEvent event) {
-        invokeEvent(EVENT_AFTER_DELETE, entity, ea, event);
+        invokeEvent(EVENT_AFTER_DELETE, entity, ea);
     }
 
     public void afterInsert(final PersistentEntity entity, final EntityAccess 
ea) {
@@ -217,7 +217,7 @@ public class DomainEventListener extends 
AbstractPersistenceEventListener
 
     public void afterInsert(final PersistentEntity entity, final EntityAccess 
ea, PostInsertEvent event) {
         activateDirtyChecking(ea);
-        invokeEvent(EVENT_AFTER_INSERT, entity, ea, event);
+        invokeEvent(EVENT_AFTER_INSERT, entity, ea);
     }
 
     private void activateDirtyChecking(EntityAccess ea) {
@@ -233,7 +233,7 @@ public class DomainEventListener extends 
AbstractPersistenceEventListener
 
     public void afterUpdate(final PersistentEntity entity, final EntityAccess 
ea, PostUpdateEvent event) {
         activateDirtyChecking(ea); // reset dirty checking
-        invokeEvent(EVENT_AFTER_UPDATE, entity, ea, event);
+        invokeEvent(EVENT_AFTER_UPDATE, entity, ea);
     }
 
     public void afterLoad(final PersistentEntity entity, final EntityAccess 
ea) {
@@ -245,7 +245,7 @@ public class DomainEventListener extends 
AbstractPersistenceEventListener
         if (autowireEntities || (entity != null && 
entity.getMapping().getMappedForm().isAutowire())) {
             autowireBeanProperties(ea.getEntity());
         }
-        invokeEvent(EVENT_AFTER_LOAD, entity, ea, event);
+        invokeEvent(EVENT_AFTER_LOAD, entity, ea);
     }
 
     protected void autowireBeanProperties(final Object entity) {
@@ -274,7 +274,7 @@ public class DomainEventListener extends 
AbstractPersistenceEventListener
         return AbstractPersistenceEvent.class.isAssignableFrom(eventType);
     }
 
-    private boolean invokeEvent(String eventName, PersistentEntity entity, 
EntityAccess ea, ApplicationEvent event) {
+    private boolean invokeEvent(String eventName, PersistentEntity entity, 
EntityAccess ea) {
         final Map<String, Method> events = entityEvents.get(entity);
         if (events == null) {
             return true;
@@ -287,14 +287,7 @@ public class DomainEventListener extends 
AbstractPersistenceEventListener
 
         final Object result;
         if (ea != null) {
-            final Object o = ea.getEntity();
-
-            if (eventMethod.getParameterTypes().length == 1) {
-                result = ReflectionUtils.invokeMethod(eventMethod, o, event);
-            }
-            else {
-                result = ReflectionUtils.invokeMethod(eventMethod, o);
-            }
+            result = ReflectionUtils.invokeMethod(eventMethod, ea.getEntity());
         }
         else {
             result = null;
diff --git 
a/grails-datamapping-core/src/test/groovy/org/grails/datastore/gorm/events/DomainEventListenerSpec.groovy
 
b/grails-datamapping-core/src/test/groovy/org/grails/datastore/gorm/events/DomainEventListenerSpec.groovy
index 3ddf2d0118..319f27100c 100644
--- 
a/grails-datamapping-core/src/test/groovy/org/grails/datastore/gorm/events/DomainEventListenerSpec.groovy
+++ 
b/grails-datamapping-core/src/test/groovy/org/grails/datastore/gorm/events/DomainEventListenerSpec.groovy
@@ -60,14 +60,14 @@ import 
org.grails.datastore.mapping.model.config.GormProperties
  * - {@code invokeEvent}'s {@code ea != null} branch is always true through 
every public before-
  *   and after-hook method, which never passes a null {@code EntityAccess}; 
the {@code ea == null}
  *   path is unreachable via the public API.
- * - {@code invokeEvent}'s {@code eventMethod.getParameterTypes().length == 1} 
branch can never be
- *   taken: {@code findAndCacheEvent} caches hooks via Spring's {@code 
ReflectionUtils.findMethod(Class, String)},
- *   which (confirmed via decompiling spring-core) only ever matches 
zero-argument methods, so a
- *   cached {@code eventMethod} can never have one parameter. 
Event-argument-accepting hooks appear
- *   to be an unreachable, effectively dead capability.
  * - The protected {@code DomainEventListener(ConnectionSourcesProvider, 
MappingContext)}
  *   constructor exists solely for subclassing (e.g. {@code 
grails.gorm.rx.events.DomainEventListener}),
  *   which is covered by its own module's spec; exercising it here would 
duplicate that coverage.
+ *
+ * {@code invokeEvent} previously also branched on {@code 
eventMethod.getParameterTypes().length == 1}
+ * to invoke a hook with the triggering event as an argument. That branch was 
confirmed dead (via
+ * decompiling spring-core's {@code ReflectionUtils.findMethod(Class, 
String)}, which only ever
+ * matches zero-argument methods) and removed.
  */
 class DomainEventListenerSpec extends Specification {
 

Reply via email to