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"() {
