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 d841627d9a93e4692449a18ad1ccb7883b0e1870
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Fri Aug 14 11:07:56 2026 -0500

    Assert supportsEventType's eventType parameter as @NonNull
    
    Rather than defensively guarding against null, declare the contract
    explicitly via jspecify's @NonNull and let a null argument fail fast
    with an NPE. Updated the corresponding spec to assert the NPE instead
    of a graceful false return.
---
 .../org/grails/datastore/gorm/events/DomainEventListener.java    | 6 ++++--
 .../grails/datastore/gorm/events/DomainEventListenerSpec.groovy  | 9 ++++++---
 2 files changed, 10 insertions(+), 5 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 75899037c9..b47a561654 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
@@ -26,6 +26,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.jspecify.annotations.NonNull;
+
 import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
 import org.springframework.context.ApplicationEvent;
 import org.springframework.context.ConfigurableApplicationContext;
@@ -291,8 +293,8 @@ public class DomainEventListener extends 
AbstractPersistenceEventListener
      * @see 
org.springframework.context.event.SmartApplicationListener#supportsEventType(
      *     java.lang.Class)
      */
-    public boolean supportsEventType(Class<? extends ApplicationEvent> 
eventType) {
-        return eventType != null && 
AbstractPersistenceEvent.class.isAssignableFrom(eventType);
+    public boolean supportsEventType(@NonNull Class<? extends 
ApplicationEvent> eventType) {
+        return AbstractPersistenceEvent.class.isAssignableFrom(eventType);
     }
 
     private boolean invokeEvent(String eventName, PersistentEntity entity, 
EntityAccess ea) {
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 01e6f61ee8..0f2eb86422 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
@@ -123,12 +123,15 @@ class DomainEventListenerSpec extends Specification {
         !listener.supportsEventType(PayloadApplicationEvent)
     }
 
-    void "supportsEventType rejects a null event type rather than throwing, 
matching SmartApplicationListener's nullable contract"() {
+    void "supportsEventType throws on a null event type, per its @NonNull 
contract"() {
         given:
         DomainEventListener listener = new 
DomainEventListener(plainDatastore(Stub(MappingContext) { 
getPersistentEntities() >> [] }))
 
-        expect:
-        !listener.supportsEventType(null)
+        when:
+        listener.supportsEventType(null)
+
+        then:
+        thrown(NullPointerException)
     }
 
     void "beforeInsert sets an initial numeric version to 0 when the entity is 
versioned"() {

Reply via email to