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

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

commit e5311da0aa00528211e25b584bcabf3bf0f7cc55
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Wed Feb 25 23:08:29 2026 -0600

    Fix PMD DataflowAnomalyAnalysis in CriteriaMethodInvoker
---
 grails-data-hibernate7/core/PMD.md                 | 353 +++++++++++++++++++++
 .../groovy/grails/orm/CriteriaMethodInvoker.java   |  84 +++--
 2 files changed, 394 insertions(+), 43 deletions(-)

diff --git a/grails-data-hibernate7/core/PMD.md 
b/grails-data-hibernate7/core/PMD.md
new file mode 100644
index 0000000000..173ec625d3
--- /dev/null
+++ b/grails-data-hibernate7/core/PMD.md
@@ -0,0 +1,353 @@
+PMD Error,Fully Qualified Class,Line Number,DONE
+DataflowAnomalyAnalysis,grails.orm.CriteriaMethodInvoker,151,YES
+DataflowAnomalyAnalysis,grails.orm.CriteriaMethodInvoker,154,YES
+DataflowAnomalyAnalysis,grails.orm.CriteriaMethodInvoker,154,YES
+DataflowAnomalyAnalysis,grails.orm.CriteriaMethodInvoker,155,YES
+DataflowAnomalyAnalysis,grails.orm.CriteriaMethodInvoker,155,YES
+DataflowAnomalyAnalysis,grails.orm.CriteriaMethodInvoker,184,YES
+DataflowAnomalyAnalysis,grails.orm.CriteriaMethodInvoker,210,YES
+DataflowAnomalyAnalysis,grails.orm.CriteriaMethodInvoker,220,YES
+DataflowAnomalyAnalysis,grails.orm.CriteriaMethodInvoker,221,YES
+DataflowAnomalyAnalysis,grails.orm.CriteriaMethodInvoker,240,YES
+AvoidFieldNameMatchingMethodName,grails.orm.HibernateCriteriaBuilder,101,
+AvoidFieldNameMatchingMethodName,grails.orm.HibernateCriteriaBuilder,102,
+AvoidFieldNameMatchingMethodName,grails.orm.HibernateCriteriaBuilder,114,
+AvoidFieldNameMatchingMethodName,grails.orm.HibernateCriteriaBuilder,115,
+AvoidDuplicateLiterals,grails.orm.HibernateCriteriaBuilder,117,
+ConstructorCallsOverridableMethod,grails.orm.HibernateCriteriaBuilder,121,
+ConstructorCallsOverridableMethod,grails.orm.HibernateCriteriaBuilder,128,
+AvoidDuplicateLiterals,grails.orm.HibernateCriteriaBuilder,504,
+CompareObjectsWithEquals,grails.orm.HibernateCriteriaBuilder,855,
+NullAssignment,grails.orm.HibernateCriteriaBuilder,1213,
+AvoidFieldNameMatchingMethodName,org.grails.orm.hibernate.AbstractHibernateDatastore,112,
+CloseResource,org.grails.orm.hibernate.AbstractHibernateDatastore,137,
+CloseResource,org.grails.orm.hibernate.AbstractHibernateDatastore,265,
+CloseResource,org.grails.orm.hibernate.AbstractHibernateDatastore,460,
+CloseResource,org.grails.orm.hibernate.AbstractHibernateDatastore,461,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.AbstractHibernateDatastore,499,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.AbstractHibernateDatastore,499,
+EmptyCatchBlock,org.grails.orm.hibernate.AbstractHibernateSession,107,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.EventListenerIntegrator,82,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.EventListenerIntegrator,87,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.EventListenerIntegrator,87,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.EventListenerIntegrator,98,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.EventListenerIntegrator,108,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.GrailsHibernateTemplate,135,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.GrailsHibernateTemplate,136,
+CloseResource,org.grails.orm.hibernate.GrailsHibernateTemplate,138,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.GrailsHibernateTemplate,138,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.GrailsHibernateTemplate,141,
+CloseResource,org.grails.orm.hibernate.GrailsHibernateTemplate,191,
+CloseResource,org.grails.orm.hibernate.GrailsHibernateTemplate,303,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.GrailsHibernateTemplate,309,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.GrailsHibernateTemplate,311,
+CompareObjectsWithEquals,org.grails.orm.hibernate.GrailsHibernateTemplate,348,
+UseProperClassLoader,org.grails.orm.hibernate.GrailsHibernateTemplate,382,
+CompareObjectsWithEquals,org.grails.orm.hibernate.GrailsHibernateTemplate$CloseSuppressingInvocationHandler,541,
+EmptyIfStmt,org.grails.orm.hibernate.GrailsHibernateTemplate,685,
+EmptyIfStmt,org.grails.orm.hibernate.GrailsSessionContext,137,
+CompareObjectsWithEquals,org.grails.orm.hibernate.GrailsSessionContext,147,
+EmptyIfStmt,org.grails.orm.hibernate.GrailsSessionContext,192,
+CompareObjectsWithEquals,org.grails.orm.hibernate.GrailsSessionContext,199,
+AvoidCatchingThrowable,org.grails.orm.hibernate.GrailsSessionContext,202,
+CloseResource,org.grails.orm.hibernate.GrailsSessionContext,209,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.GrailsSessionContext,209,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.GrailsSessionContext,209,
+CloseResource,org.grails.orm.hibernate.GrailsSessionContext,213,
+ConstructorCallsOverridableMethod,org.grails.orm.hibernate.HibernateDatastore,111,
+CloseResource,org.grails.orm.hibernate.HibernateDatastore,113,
+ConstructorCallsOverridableMethod,org.grails.orm.hibernate.HibernateDatastore,131,
+ConstructorCallsOverridableMethod,org.grails.orm.hibernate.HibernateDatastore,132,
+CloseResource,org.grails.orm.hibernate.HibernateDatastore,144,
+CloseResource,org.grails.orm.hibernate.HibernateDatastore,147,
+CloseResource,org.grails.orm.hibernate.HibernateDatastore,150,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,150,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,150,
+CloseResource,org.grails.orm.hibernate.HibernateDatastore,153,
+ConstructorCallsOverridableMethod,org.grails.orm.hibernate.HibernateDatastore,198,
+ConstructorCallsOverridableMethod,org.grails.orm.hibernate.HibernateDatastore,198,
+ConstructorCallsOverridableMethod,org.grails.orm.hibernate.HibernateDatastore,198,
+CloseResource,org.grails.orm.hibernate.HibernateDatastore,488,
+CloseResource,org.grails.orm.hibernate.HibernateDatastore,542,
+CompareObjectsWithEquals,org.grails.orm.hibernate.HibernateDatastore,543,
+CloseResource,org.grails.orm.hibernate.HibernateDatastore,580,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,581,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,582,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,589,
+CloseResource,org.grails.orm.hibernate.HibernateDatastore,632,
+CloseResource,org.grails.orm.hibernate.HibernateDatastore,641,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,669,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,669,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,669,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,669,
+CloseResource,org.grails.orm.hibernate.HibernateDatastore,671,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,671,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,671,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,671,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,671,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,675,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,675,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,675,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,675,
+EmptyCatchBlock,org.grails.orm.hibernate.HibernateDatastore,707,
+CloseResource,org.grails.orm.hibernate.HibernateDatastore,731,
+CloseResource,org.grails.orm.hibernate.HibernateDatastore,733,
+CloseResource,org.grails.orm.hibernate.HibernateDatastore,736,
+CloseResource,org.grails.orm.hibernate.HibernateDatastore,739,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,751,
+CloseResource,org.grails.orm.hibernate.HibernateDatastore,752,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateDatastore,760,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateSession,80,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.HibernateSession,183,
+NullAssignment,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,50,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,85,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,85,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,85,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,85,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,91,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,91,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,91,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,91,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,94,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,94,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,94,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,94,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,95,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,95,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,95,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.access.TraitPropertyAccessStrategy,95,
+CloseResource,org.grails.orm.hibernate.cfg.GrailsHibernateUtil,84,
+CloseResource,org.grails.orm.hibernate.cfg.GrailsHibernateUtil,108,
+CloseResource,org.grails.orm.hibernate.cfg.GrailsHibernateUtil,113,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.GrailsHibernateUtil,120,
+EmptyCatchBlock,org.grails.orm.hibernate.cfg.GrailsHibernateUtil,254,
+EmptyCatchBlock,org.grails.orm.hibernate.cfg.GrailsHibernateUtil,256,
+UseProperClassLoader,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,116,
+UseProperClassLoader,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,137,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,190,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,190,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,195,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,195,
+UseProperClassLoader,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,197,
+UseProperClassLoader,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,249,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,254,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,254,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,254,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,254,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,275,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,275,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,275,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,275,
+CloseResource,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,290,
+CloseResource,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,315,
+AvoidCatchingThrowable,org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration,318,
+CompareObjectsWithEquals,org.grails.orm.hibernate.cfg.IdentityEnumType,119,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.MappingCacheHolder,65,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.ClassPropertiesBinder,72,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.CollectionBinder,228,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.CollectionBinder,229,
+NullAssignment,org.grails.orm.hibernate.cfg.domainbinding.binder.ColumnBinder,80,
+NullAssignment,org.grails.orm.hibernate.cfg.domainbinding.binder.ColumnBinder,81,
+NullAssignment,org.grails.orm.hibernate.cfg.domainbinding.binder.ColumnBinder,82,
+NullAssignment,org.grails.orm.hibernate.cfg.domainbinding.binder.ColumnBinder,83,
+NullAssignment,org.grails.orm.hibernate.cfg.domainbinding.binder.ColumnBinder,84,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.ColumnBinder,139,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.ColumnBinder,139,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.ColumnBinder,139,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.ComponentBinder,68,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.ComponentBinder,69,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.ComponentBinder,70,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.CompositeIdBinder,69,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.CompositeIdentifierToManyToOneBinder,85,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.DiscriminatorPropertyBinder,68,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.DiscriminatorPropertyBinder,68,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsDomainBinder,227,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsPropertyBinder,75,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsPropertyBinder,75,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsPropertyBinder,75,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsPropertyBinder,75,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsPropertyBinder,75,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsPropertyBinder,75,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsPropertyBinder,75,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.ManyToOneBinder,120,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.NumericColumnConstraintsBinder,36,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.RootBinder,78,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleIdBinder,69,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleIdBinder,73,
+NullAssignment,org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueBinder,80,
+NullAssignment,org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueBinder,81,
+NullAssignment,org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueBinder,82,
+NullAssignment,org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueBinder,83,
+NullAssignment,org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueBinder,84,
+NullAssignment,org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueBinder,85,
+MissingSerialVersionUID,org.grails.orm.hibernate.cfg.domainbinding.generator.GrailsIdentityGenerator,27,
+MissingSerialVersionUID,org.grails.orm.hibernate.cfg.domainbinding.generator.GrailsIncrementGenerator,40,
+MissingSerialVersionUID,org.grails.orm.hibernate.cfg.domainbinding.generator.GrailsNativeGenerator,27,
+EmptyCatchBlock,org.grails.orm.hibernate.cfg.domainbinding.generator.GrailsNativeGenerator,34,
+MissingSerialVersionUID,org.grails.orm.hibernate.cfg.domainbinding.generator.GrailsSequenceStyleGenerator,30,
+ConstructorCallsOverridableMethod,org.grails.orm.hibernate.cfg.domainbinding.generator.GrailsSequenceStyleGenerator,59,
+MissingSerialVersionUID,org.grails.orm.hibernate.cfg.domainbinding.generator.GrailsTableGenerator,30,
+ReturnEmptyArrayRatherThanNull,org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEmbeddedPersistentEntity,50,
+ReturnEmptyCollectionRatherThanNull,org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEmbeddedPersistentEntity,51,
+ReturnEmptyCollectionRatherThanNull,org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentEntity,77,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentEntity,79,
+NullAssignment,org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentEntity,82,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentEntity,82,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentProperty,113,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentProperty,113,
+EmptyCatchBlock,org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentProperty,120,
+ReturnEmptyCollectionRatherThanNull,org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentProperty,198,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.secondpass.CollectionSecondPassBinder,94,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.secondpass.CollectionWithJoinTableBinder,96,
+NonSerializableClass,org.grails.orm.hibernate.cfg.domainbinding.secondpass.ListSecondPass,32,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.secondpass.ListSecondPassBinder,73,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.secondpass.ListSecondPassBinder,106,
+NonSerializableClass,org.grails.orm.hibernate.cfg.domainbinding.secondpass.MapSecondPass,32,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.secondpass.MapSecondPassBinder,95,
+NonSerializableClass,org.grails.orm.hibernate.cfg.domainbinding.secondpass.SetSecondPass,39,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.BasicValueIdCreator,67,
+EmptyCatchBlock,org.grails.orm.hibernate.cfg.domainbinding.util.CascadeBehavior,94,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.CreateKeyForProps,58,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.DefaultColumnNameFetcher,49,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.DefaultColumnNameFetcher,51,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.ForeignKeyColumnCountCalculator,30,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.ForeignKeyColumnCountCalculator,30,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.ForeignKeyColumnCountCalculator,38,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.ForeignKeyColumnCountCalculator,38,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.ForeignKeyColumnCountCalculator,41,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.ForeignKeyColumnCountCalculator,41,
+LoggerIsNotStaticFinal,org.grails.orm.hibernate.cfg.domainbinding.util.LogCascadeMapping,30,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.OrderByClauseBuilder,57,
+UseLocaleWithCaseConversions,org.grails.orm.hibernate.cfg.domainbinding.util.OrderByClauseBuilder,68,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.OrderByClauseBuilder,95,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.OrderByClauseBuilder,96,
+CompareObjectsWithEquals,org.grails.orm.hibernate.cfg.domainbinding.util.OrderByClauseBuilder,106,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.TableForManyCalculator,56,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.TableForManyCalculator,59,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.TableForManyCalculator,61,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.cfg.domainbinding.util.TableForManyCalculator,92,
+AvoidLiteralsInIfCondition,org.grails.orm.hibernate.cfg.domainbinding.util.UniqueNameGenerator,51,
+CloseResource,org.grails.orm.hibernate.connections.HibernateConnectionSource,53,
+CloseResource,org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory,109,
+CloseResource,org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory,172,
+AvoidCatchingThrowable,org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory,237,
+CloseResource,org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory,256,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory,298,
+CloseResource,org.grails.orm.hibernate.event.listener.HibernateEventListener,106,
+CloseResource,org.grails.orm.hibernate.event.listener.HibernateEventListener,119,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.event.listener.HibernateEventListener,154,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.event.listener.HibernateEventListener,164,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.event.listener.HibernateEventListener,182,
+CloseResource,org.grails.orm.hibernate.event.listener.HibernateEventListener,222,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.multitenancy.MultiTenantEventListener,59,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.multitenancy.MultiTenantEventListener,79,
+CompareObjectsWithEquals,org.grails.orm.hibernate.multitenancy.MultiTenantEventListener,93,
+CloseResource,org.grails.orm.hibernate.proxy.HibernateProxyHandler,155,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.GrailsHibernateQueryUtils,68,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.GrailsHibernateQueryUtils,84,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.GrailsHibernateQueryUtils,84,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.GrailsHibernateQueryUtils,87,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.GrailsHibernateQueryUtils,138,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.GrailsHibernateQueryUtils,139,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.GrailsHibernateQueryUtils,201,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.GrailsHibernateQueryUtils,214,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.GrailsHibernateQueryUtils,252,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.GrailsHibernateQueryUtils,252,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.GrailsHibernateQueryUtils,252,
+AvoidDuplicateLiterals,org.grails.orm.hibernate.query.HibernateHqlQuery,67,
+AvoidDuplicateLiterals,org.grails.orm.hibernate.query.HibernateHqlQuery,84,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HibernateQuery,336,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HibernateQuery,336,
+CloneMethodReturnTypeMustMatchClassName,org.grails.orm.hibernate.query.HibernateQuery,630,
+CloneThrowsCloneNotSupportedException,org.grails.orm.hibernate.query.HibernateQuery,630,
+UseLocaleWithCaseConversions,org.grails.orm.hibernate.query.HqlQueryContext,101,
+AvoidDuplicateLiterals,org.grails.orm.hibernate.query.HqlQueryContext,102,
+AvoidDuplicateLiterals,org.grails.orm.hibernate.query.HqlQueryContext,105,
+UseLocaleWithCaseConversions,org.grails.orm.hibernate.query.HqlQueryContext,111,
+AvoidDuplicateLiterals,org.grails.orm.hibernate.query.HqlQueryContext,112,
+AvoidDuplicateLiterals,org.grails.orm.hibernate.query.HqlQueryContext,113,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,116,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,116,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,116,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,117,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,117,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,122,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,125,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,127,
+AvoidLiteralsInIfCondition,org.grails.orm.hibernate.query.HqlQueryContext,129,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,129,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,129,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,130,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,130,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,131,
+UseLocaleWithCaseConversions,org.grails.orm.hibernate.query.HqlQueryContext,151,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,159,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,160,
+UseLocaleWithCaseConversions,org.grails.orm.hibernate.query.HqlQueryContext,180,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,189,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,189,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,189,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,189,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,189,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,192,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,196,
+UnnecessaryCaseChange,org.grails.orm.hibernate.query.HqlQueryContext,202,
+UseLocaleWithCaseConversions,org.grails.orm.hibernate.query.HqlQueryContext,202,
+UseLocaleWithCaseConversions,org.grails.orm.hibernate.query.HqlQueryContext,219,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.HqlQueryContext,239,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.JpaCriteriaQueryCreator,131,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.JpaFromProvider,62,
+AvoidLiteralsInIfCondition,org.grails.orm.hibernate.query.JpaFromProvider,150,
+ProperCloneImplementation,org.grails.orm.hibernate.query.JpaFromProvider,162,
+CloneMethodReturnTypeMustMatchClassName,org.grails.orm.hibernate.query.JpaFromProvider,162,
+CloneThrowsCloneNotSupportedException,org.grails.orm.hibernate.query.JpaFromProvider,162,
+MissingSerialVersionUID,org.grails.orm.hibernate.query.PagedResultList,31,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.PredicateGenerator,116,
+AvoidLiteralsInIfCondition,org.grails.orm.hibernate.query.PredicateGenerator,123,
+AvoidDuplicateLiterals,org.grails.orm.hibernate.query.PredicateGenerator,141,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.PredicateGenerator,168,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.PredicateGenerator,229,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.PredicateGenerator,230,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.PredicateGenerator,297,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.PredicateGenerator,299,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.PredicateGenerator,337,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.PredicateGenerator,338,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.query.PredicateGenerator,350,
+AvoidAccessibilityAlteration,org.grails.orm.hibernate.support.ClosureEventListener,143,
+AvoidAccessibilityAlteration,org.grails.orm.hibernate.support.ClosureEventListener,145,
+EmptyCatchBlock,org.grails.orm.hibernate.support.ClosureEventListener,146,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventListener,188,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventListener,188,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventListener,215,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventListener,215,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventListener,232,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventListener,232,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventListener,312,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventListener,315,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventListener,341,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventListener,343,
+CompareObjectsWithEquals,org.grails.orm.hibernate.support.ClosureEventListener,361,
+CompareObjectsWithEquals,org.grails.orm.hibernate.support.ClosureEventListener,383,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventListener,387,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventListener,387,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventListener,387,
+CloseResource,org.grails.orm.hibernate.support.ClosureEventListener,400,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventListener,401,
+NonSerializableClass,org.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor,73,
+NonSerializableClass,org.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor,75,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor,235,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor,292,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor,293,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor,309,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor,332,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor,401,
+CloseResource,org.grails.orm.hibernate.support.HibernateDialectDetectorFactoryBean,94,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.HibernateDialectDetectorFactoryBean,94,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.HibernateDialectDetectorFactoryBean,94,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.HibernateDialectDetectorFactoryBean,96,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.HibernateDialectDetectorFactoryBean,96,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.HibernateDialectDetectorFactoryBean,103,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.HibernateDialectDetectorFactoryBean,103,
+CloseResource,org.grails.orm.hibernate.support.HibernateDialectDetectorFactoryBean,104,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.HibernateDialectDetectorFactoryBean,105,
+DataflowAnomalyAnalysis,org.grails.orm.hibernate.support.HibernateDialectDetectorFactoryBean,105,
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/grails/orm/CriteriaMethodInvoker.java
 
b/grails-data-hibernate7/core/src/main/groovy/grails/orm/CriteriaMethodInvoker.java
index 983d6f98ee..dfed974503 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/grails/orm/CriteriaMethodInvoker.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/grails/orm/CriteriaMethodInvoker.java
@@ -143,16 +143,17 @@ public class CriteriaMethodInvoker {
     return UNHANDLED;
   }
 
+  @SuppressWarnings("PMD.DataflowAnomalyAnalysis")
   private Object tryAssociationOrJunction(String name, CriteriaMethods method, 
Object[] args) {
     if (!isAssociationQueryMethod(args) && 
!isAssociationQueryWithJoinSpecificationMethod(args)) {
       return UNHANDLED;
     }
 
     final boolean hasMoreThanOneArg = args.length > 1;
+    final Closure callable = hasMoreThanOneArg ? (Closure) args[1] : (Closure) 
args[0];
+    final HibernateQuery hibernateQuery = builder.getHibernateQuery();
 
     if (method != null) {
-      HibernateQuery hibernateQuery = builder.getHibernateQuery();
-      Closure callable = hasMoreThanOneArg ? (Closure) args[1] : (Closure) 
args[0];
       switch (method) {
         case AND:
           hibernateQuery.and(callable);
@@ -181,16 +182,15 @@ public class CriteriaMethodInvoker {
       if (attribute.isAssociation()) {
         Class oldTargetClass = builder.getTargetClass();
         builder.setTargetClass(builder.getClassForAssociationType(attribute));
-        JoinType joinType =
-            hasMoreThanOneArg
-                ? builder.convertFromInt((Integer) args[0])
-                : builder.convertFromInt(0);
-        if (builder.getTargetClass().equals(oldTargetClass) && 
!hasMoreThanOneArg) {
+        JoinType joinType;
+        if (hasMoreThanOneArg) {
+          joinType = builder.convertFromInt((Integer) args[0]);
+        } else if (builder.getTargetClass().equals(oldTargetClass)) {
           joinType = JoinType.LEFT; // default to left join if joining on the 
same table
+        } else {
+          joinType = builder.convertFromInt(0);
         }
 
-        HibernateQuery hibernateQuery = builder.getHibernateQuery();
-        Closure callable = hasMoreThanOneArg ? (Closure) args[1] : (Closure) 
args[0];
         hibernateQuery.join(name, joinType);
         hibernateQuery.in(name, new 
DetachedCriteria(builder.getTargetClass()).build(callable));
         builder.setTargetClass(oldTargetClass);
@@ -201,29 +201,27 @@ public class CriteriaMethodInvoker {
     return UNHANDLED;
   }
 
-  protected Object trySimpleCriteria(String name, CriteriaMethods method, 
Object[] args) {
-    if (args.length != 1 || args[0] == null) {
+      @SuppressWarnings("PMD.DataflowAnomalyAnalysis")
+      protected Object trySimpleCriteria(String name, CriteriaMethods method, 
Object[] args) {    if (args.length != 1 || args[0] == null) {
       return UNHANDLED;
     }
 
     if (method != null) {
-      Object value = args[0];
       switch (method) {
         case ID_EQUALS:
-          return builder.eq("id", value);
+          return builder.eq("id", args[0]);
         case IS_NULL, IS_NOT_NULL, IS_EMPTY, IS_NOT_EMPTY:
-          if (!(value instanceof String)) {
+          if (!(args[0] instanceof String)) {
             builder.throwRuntimeException(
                 new IllegalArgumentException(
-                    "call to [" + name + "] with value [" + value + "] 
requires a String value."));
+                    "call to [" + name + "] with value [" + args[0] + "] 
requires a String value."));
           }
-          String propertyName = builder.calculatePropertyName((String) value);
-          HibernateQuery hibernateQuery = builder.getHibernateQuery();
+          final String value = (String) args[0];
           switch (method) {
-            case IS_NULL -> hibernateQuery.isNull(propertyName);
-            case IS_NOT_NULL -> hibernateQuery.isNotNull(propertyName);
-            case IS_EMPTY -> hibernateQuery.isEmpty(propertyName);
-            case IS_NOT_EMPTY -> hibernateQuery.isNotEmpty(propertyName);
+            case IS_NULL -> 
builder.getHibernateQuery().isNull(builder.calculatePropertyName(value));
+            case IS_NOT_NULL -> 
builder.getHibernateQuery().isNotNull(builder.calculatePropertyName(value));
+            case IS_EMPTY -> 
builder.getHibernateQuery().isEmpty(builder.calculatePropertyName(value));
+            case IS_NOT_EMPTY -> 
builder.getHibernateQuery().isNotEmpty(builder.calculatePropertyName(value));
           }
           return name;
       }
@@ -233,60 +231,60 @@ public class CriteriaMethodInvoker {
 
   @SuppressWarnings("PMD.AvoidLiteralsInIfCondition")
   protected Object tryPropertyCriteria(CriteriaMethods method, Object[] args) {
-    if (method == null || args.length < 2 || !(args[0] instanceof String)) {
+    if (method == null || args.length < 2 || !(args[0] instanceof String 
propertyName)) {
       return UNHANDLED;
     }
 
-    String propertyName = builder.calculatePropertyName((String) args[0]);
     switch (method) {
       case RLIKE:
-        return builder.rlike(propertyName, args[1]);
+        return builder.rlike(builder.calculatePropertyName(propertyName), 
args[1]);
       case BETWEEN:
         if (args.length >= 3) {
-          return builder.between(propertyName, args[1], args[2]);
+          return builder.between(builder.calculatePropertyName(propertyName), 
args[1], args[2]);
         }
         break;
       case EQUALS:
         if (args.length == 3 && args[2] instanceof Map) {
-          return builder.eq(propertyName, args[1], (Map) args[2]);
+          return builder.eq(builder.calculatePropertyName(propertyName), 
args[1], (Map) args[2]);
         }
-        return builder.eq(propertyName, args[1]);
+        return builder.eq(builder.calculatePropertyName(propertyName), 
args[1]);
       case EQUALS_PROPERTY:
-        return builder.eqProperty(propertyName, args[1].toString());
+        return builder.eqProperty(builder.calculatePropertyName(propertyName), 
args[1].toString());
       case GREATER_THAN:
-        return builder.gt(propertyName, args[1]);
+        return builder.gt(builder.calculatePropertyName(propertyName), 
args[1]);
       case GREATER_THAN_PROPERTY:
-        return builder.gtProperty(propertyName, args[1].toString());
+        return builder.gtProperty(builder.calculatePropertyName(propertyName), 
args[1].toString());
       case GREATER_THAN_OR_EQUAL:
-        return builder.ge(propertyName, args[1]);
+        return builder.ge(builder.calculatePropertyName(propertyName), 
args[1]);
       case GREATER_THAN_OR_EQUAL_PROPERTY:
-        return builder.geProperty(propertyName, args[1].toString());
+        return builder.geProperty(builder.calculatePropertyName(propertyName), 
args[1].toString());
       case ILIKE:
-        return builder.ilike(propertyName, args[1]);
+        return builder.ilike(builder.calculatePropertyName(propertyName), 
args[1]);
       case IN:
         if (args[1] instanceof Collection) {
-          return builder.in(propertyName, (Collection) args[1]);
+          return builder.in(builder.calculatePropertyName(propertyName), 
(Collection) args[1]);
         } else if (args[1] instanceof Object[]) {
-          return builder.in(propertyName, (Object[]) args[1]);
+          return builder.in(builder.calculatePropertyName(propertyName), 
(Object[]) args[1]);
         }
         break;
       case LESS_THAN:
-        return builder.lt(propertyName, args[1]);
+        return builder.lt(builder.calculatePropertyName(propertyName), 
args[1]);
       case LESS_THAN_PROPERTY:
-        return builder.ltProperty(propertyName, args[1].toString());
+        return builder.ltProperty(builder.calculatePropertyName(propertyName), 
args[1].toString());
       case LESS_THAN_OR_EQUAL:
-        return builder.le(propertyName, args[1]);
+        return builder.le(builder.calculatePropertyName(propertyName), 
args[1]);
       case LESS_THAN_OR_EQUAL_PROPERTY:
-        return builder.leProperty(propertyName, args[1].toString());
+        return builder.leProperty(builder.calculatePropertyName(propertyName), 
args[1].toString());
       case LIKE:
-        return builder.like(propertyName, args[1]);
+        return builder.like(builder.calculatePropertyName(propertyName), 
args[1]);
       case NOT_EQUAL:
-        return builder.ne(propertyName, args[1]);
+        return builder.ne(builder.calculatePropertyName(propertyName), 
args[1]);
       case NOT_EQUAL_PROPERTY:
-        return builder.neProperty(propertyName, args[1].toString());
+        return builder.neProperty(builder.calculatePropertyName(propertyName), 
args[1].toString());
       case SIZE_EQUALS:
         if (args[1] instanceof Number) {
-          return builder.sizeEq(propertyName, ((Number) args[1]).intValue());
+          return builder.sizeEq(
+              builder.calculatePropertyName(propertyName), ((Number) 
args[1]).intValue());
         }
         break;
     }


Reply via email to