This is an automated email from the ASF dual-hosted git repository.

borinquenkid pushed a commit to branch 8.0.x-hibernate7-dev
in repository https://gitbox.apache.org/repos/asf/grails-core.git

commit 45c7764f70a021cb5c29e455de1ab1d14dbb17a9
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Sun Mar 22 11:21:59 2026 -0500

    hibernate 7: linting and EventListenerIntegrator tightening
---
 .../orm/hibernate/EventListenerIntegrator.java     |  7 ++-
 .../hibernate/HibernatePersistentProperty.java     | 17 +++-----
 .../secondpass/UnidirectionalOneToManyBinder.java  | 19 ++++----
 .../util/DefaultColumnNameFetcher.java             | 16 +++----
 .../hibernate/proxy/GrailsBytecodeProvider.java    | 13 ++----
 .../hibernate/EventListenerIntegratorSpec.groovy   | 51 ++++++++++++++++++++++
 6 files changed, 83 insertions(+), 40 deletions(-)

diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/EventListenerIntegrator.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/EventListenerIntegrator.java
index 7574f08676..c4e470b0ce 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/EventListenerIntegrator.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/EventListenerIntegrator.java
@@ -44,7 +44,6 @@ public class EventListenerIntegrator implements Integrator {
         this.eventListeners = eventListeners;
     }
 
-    @SuppressWarnings("unchecked")
     protected static final List<EventType<?>> TYPES = Arrays.asList(
             EventType.AUTO_FLUSH,
             EventType.MERGE,
@@ -83,6 +82,9 @@ public class EventListenerIntegrator implements Integrator {
     public void integrate(Metadata metadata, BootstrapContext 
bootstrapContext, SessionFactoryImplementor sfi) {
 
         EventListenerRegistry listenerRegistry = 
sfi.getServiceRegistry().getService(EventListenerRegistry.class);
+        if (listenerRegistry == null) {
+            throw new IllegalStateException("EventListenerRegistry not 
available from ServiceRegistry");
+        }
 
         if (eventListeners != null) {
             for (Map.Entry<String, Object> entry : eventListeners.entrySet()) {
@@ -115,7 +117,7 @@ public class EventListenerIntegrator implements Integrator {
                     // since ClosureEventTriggeringInterceptor extends 
DefaultSaveOrUpdateEventListener we
                     // want to override instead of append the listener here
                     // to avoid there being 2 implementations which would 
impact performance too
-                    group.clear();
+                    group.clearListeners();
                     group.appendListener(listener);
                 } else {
                     group.appendListener(listener);
@@ -151,6 +153,7 @@ public class EventListenerIntegrator implements Integrator {
         }
     }
 
+    @Override
     public void disintegrate(SessionFactoryImplementor sessionFactory, 
SessionFactoryServiceRegistry serviceRegistry) {
         // nothing to do
     }
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernatePersistentProperty.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernatePersistentProperty.java
index 6ed7139205..f45c0071ff 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernatePersistentProperty.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernatePersistentProperty.java
@@ -104,7 +104,7 @@ public interface HibernatePersistentProperty extends 
PersistentProperty<Property
     }
 
     default GrailsHibernatePersistentEntity getHibernateOwner() {
-        return (GrailsHibernatePersistentEntity )getOwner() ;
+        return (GrailsHibernatePersistentEntity) getOwner();
     }
 
     @SuppressWarnings("PMD.DataflowAnomalyAnalysis")
@@ -154,15 +154,15 @@ public interface HibernatePersistentProperty extends 
PersistentProperty<Property
 
     @Override
     default boolean isLazyAble() {
-        return this instanceof HibernateAssociation ||
-                !(this instanceof Embedded) && 
!this.equals(this.getOwner().getIdentity());
+        return this instanceof HibernateAssociation
+                || !(this instanceof Embedded) && 
!this.equals(this.getOwner().getIdentity());
     }
 
     /**
      * @return The mapped form
      */
     default PropertyConfig getHibernateMappedForm() {
-        return (PropertyConfig) getMappedForm();
+        return getMappedForm();
     }
 
     /**
@@ -181,10 +181,7 @@ public interface HibernatePersistentProperty extends 
PersistentProperty<Property
     }
 
     default String getMappedColumnName() {
-        if (getMappedForm() != null) {
-            return getMappedForm().getColumn();
-        }
-        return null;
+        return 
Optional.ofNullable(getMappedForm()).map(PropertyConfig::getColumn).orElse(null);
     }
 
     default String getColumnName(ColumnConfig cc) {
@@ -228,10 +225,10 @@ public interface HibernatePersistentProperty extends 
PersistentProperty<Property
     }
 
     default Table getTable() {
-      return getPersistentClass().getTable();
+        return getPersistentClass().getTable();
     }
 
-    default PersistentClass getPersistentClass(){
+    default PersistentClass getPersistentClass() {
         return getHibernateOwner().getPersistentClass();
     }
 }
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/UnidirectionalOneToManyBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/UnidirectionalOneToManyBinder.java
index 79bdbbf293..321c7c4193 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/UnidirectionalOneToManyBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/UnidirectionalOneToManyBinder.java
@@ -26,8 +26,7 @@ import org.hibernate.mapping.Collection;
 import org.hibernate.mapping.ManyToOne;
 import org.hibernate.mapping.OneToMany;
 import org.hibernate.mapping.Value;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
 
 import 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity;
 import 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateOneToManyProperty;
@@ -38,7 +37,6 @@ import static 
org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsDomainBind
 /** Binds unidirectional one-to-many associations. */
 public class UnidirectionalOneToManyBinder {
 
-    private static final Logger LOG = 
LoggerFactory.getLogger(UnidirectionalOneToManyBinder.class);
     private final CollectionWithJoinTableBinder collectionWithJoinTableBinder;
     private final BackticksRemover backticksRemover = new BackticksRemover();
     private final InFlightMetadataCollector mappings;
@@ -63,9 +61,9 @@ public class UnidirectionalOneToManyBinder {
         Value element = collection.getElement();
         element.createForeignKey();
 
-        String entityName = (element instanceof ManyToOne manyToOne) ?
-                manyToOne.getReferencedEntityName() :
-                ((OneToMany) element).getReferencedEntityName();
+        String entityName = (element instanceof ManyToOne manyToOne)
+                ? manyToOne.getReferencedEntityName()
+                : ((OneToMany) element).getReferencedEntityName();
 
         collection.setInverse(false);
 
@@ -76,11 +74,10 @@ public class UnidirectionalOneToManyBinder {
         GrailsHibernatePersistentEntity owner = 
(GrailsHibernatePersistentEntity) property.getOwner();
         Backref backref = new Backref();
         backref.setEntityName(owner.getName());
-        backref.setName(UNDERSCORE +
-                backticksRemover.apply(owner.getJavaClass().getSimpleName()) +
-                UNDERSCORE +
-                backticksRemover.apply(property.getName()) +
-                "Backref");
+        backref.setName(UNDERSCORE + 
backticksRemover.apply(owner.getJavaClass().getSimpleName())
+                + UNDERSCORE
+                + backticksRemover.apply(property.getName())
+                + "Backref");
         backref.setUpdatable(false);
         backref.setInsertable(true);
         backref.setCollectionRole(collection.getRole());
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/DefaultColumnNameFetcher.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/DefaultColumnNameFetcher.java
index 8ca63530bb..7594cbd244 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/DefaultColumnNameFetcher.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/DefaultColumnNameFetcher.java
@@ -65,20 +65,20 @@ public class DefaultColumnNameFetcher {
             if (!association.isBidirectional() && association instanceof 
HibernateOneToManyProperty) {
                 String prefix = namingStrategyWrapper.resolveTableName(
                         
property.getOwner().getRootEntity().getJavaClass().getSimpleName());
-                return backticksRemover.apply(prefix) +
-                        UNDERSCORE +
-                        backticksRemover.apply(columnName) +
-                        FOREIGN_KEY_SUFFIX;
+                return backticksRemover.apply(prefix)
+                        + UNDERSCORE
+                        + backticksRemover.apply(columnName)
+                        + FOREIGN_KEY_SUFFIX;
             }
 
             if (property.isInherited() && property.isBidirectionalManyToOne()) 
{
                 return 
namingStrategyWrapper.resolveColumnName(property.getOwner()
                                 .getRootEntity()
                                 .getJavaClass()
-                                .getSimpleName()) +
-                        '_' +
-                        columnName +
-                        FOREIGN_KEY_SUFFIX;
+                                .getSimpleName())
+                        + '_'
+                        + columnName
+                        + FOREIGN_KEY_SUFFIX;
             }
 
             return columnName + FOREIGN_KEY_SUFFIX;
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/proxy/GrailsBytecodeProvider.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/proxy/GrailsBytecodeProvider.java
index 43044f3fd7..e4548d09ae 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/proxy/GrailsBytecodeProvider.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/proxy/GrailsBytecodeProvider.java
@@ -20,13 +20,13 @@ package org.grails.orm.hibernate.proxy;
 
 import java.util.Map;
 
-import org.hibernate.bytecode.enhance.spi.Enhancer;
 import org.hibernate.bytecode.enhance.spi.EnhancementContext;
+import org.hibernate.bytecode.enhance.spi.Enhancer;
 import org.hibernate.bytecode.spi.BytecodeProvider;
 import org.hibernate.bytecode.spi.ProxyFactoryFactory;
 import org.hibernate.bytecode.spi.ReflectionOptimizer;
-import org.hibernate.proxy.pojo.bytebuddy.ByteBuddyProxyHelper;
 import org.hibernate.property.access.spi.PropertyAccess;
+import org.hibernate.proxy.pojo.bytebuddy.ByteBuddyProxyHelper;
 
 /**
  * A {@link BytecodeProvider} implementation for Hibernate 7 that provides 
Groovy-aware proxies.
@@ -53,17 +53,12 @@ public class GrailsBytecodeProvider implements 
BytecodeProvider {
 
     @Override
     public ReflectionOptimizer getReflectionOptimizer(
-            Class clazz,
-            String[] getterNames,
-            String[] setterNames,
-            Class[] types) {
+            Class clazz, String[] getterNames, String[] setterNames, Class[] 
types) {
         return null;
     }
 
     @Override
-    public ReflectionOptimizer getReflectionOptimizer(
-            Class<?> clazz,
-            Map<String, PropertyAccess> propertyAccessMap) {
+    public ReflectionOptimizer getReflectionOptimizer(Class<?> clazz, 
Map<String, PropertyAccess> propertyAccessMap) {
         return null;
     }
 
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/EventListenerIntegratorSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/EventListenerIntegratorSpec.groovy
new file mode 100644
index 0000000000..1c6e21b298
--- /dev/null
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/EventListenerIntegratorSpec.groovy
@@ -0,0 +1,51 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    https://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.grails.orm.hibernate
+
+import org.hibernate.boot.Metadata
+import org.hibernate.boot.spi.BootstrapContext
+import org.hibernate.engine.spi.SessionFactoryImplementor
+import org.hibernate.event.service.spi.EventListenerRegistry
+import org.hibernate.service.spi.SessionFactoryServiceRegistry
+import spock.lang.Specification
+
+class EventListenerIntegratorSpec extends Specification {
+
+    def "test that integrate throws IllegalStateException if 
EventListenerRegistry is not available"() {
+        given:
+        HibernateEventListeners hibernateEventListeners = 
Mock(HibernateEventListeners)
+        Map<String, Object> eventListeners = [:]
+        EventListenerIntegrator integrator = new 
EventListenerIntegrator(hibernateEventListeners, eventListeners)
+
+        Metadata metadata = Mock(Metadata)
+        BootstrapContext bootstrapContext = Mock(BootstrapContext)
+        SessionFactoryImplementor sfi = Mock(SessionFactoryImplementor)
+        SessionFactoryServiceRegistry serviceRegistry = 
Mock(SessionFactoryServiceRegistry)
+
+        when:
+        integrator.integrate(metadata, bootstrapContext, sfi)
+
+        then:
+        1 * sfi.getServiceRegistry() >> serviceRegistry
+        1 * serviceRegistry.getService(EventListenerRegistry) >> null
+        
+        def e = thrown(IllegalStateException)
+        e.message == "EventListenerRegistry not available from ServiceRegistry"
+    }
+}

Reply via email to