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 257a33b07535973b349c8a7e100e3a37c0575d7d Author: Walter Duque de Estrada <[email protected]> AuthorDate: Wed Feb 25 21:53:06 2026 -0600 Dataflow analysis fixes --- .../groovy/grails/orm/CriteriaMethodInvoker.java | 24 ++++++++++++---------- 1 file changed, 13 insertions(+), 11 deletions(-) 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 ef68e6fb66..983d6f98ee 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 @@ -106,11 +106,8 @@ public class CriteriaMethodInvoker { Map argMap = (Map) args[0]; final String sortField = (String) argMap.get(HibernateQueryConstants.ARGUMENT_SORT); if (sortField != null) { - boolean ignoreCase = true; - Object caseArg = argMap.get(HibernateQueryConstants.ARGUMENT_IGNORE_CASE); - if (caseArg instanceof Boolean) { - ignoreCase = (Boolean) caseArg; - } + final boolean ignoreCase = + !(argMap.get(HibernateQueryConstants.ARGUMENT_IGNORE_CASE) instanceof Boolean b) || b; final String orderParam = (String) argMap.get(HibernateQueryConstants.ARGUMENT_ORDER); final Query.Order.Direction direction = Query.Order.Direction.DESC.name().equalsIgnoreCase(orderParam) @@ -151,13 +148,11 @@ public class CriteriaMethodInvoker { return UNHANDLED; } - HibernateQuery hibernateQuery = builder.getHibernateQuery(); final boolean hasMoreThanOneArg = args.length > 1; - Closure callable = hasMoreThanOneArg ? (Closure) args[1] : (Closure) args[0]; - JoinType joinType = - hasMoreThanOneArg ? builder.convertFromInt((Integer) args[0]) : builder.convertFromInt(0); if (method != null) { + HibernateQuery hibernateQuery = builder.getHibernateQuery(); + Closure callable = hasMoreThanOneArg ? (Closure) args[1] : (Closure) args[0]; switch (method) { case AND: hibernateQuery.and(callable); @@ -186,10 +181,16 @@ 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.LEFT; // default to left join if joining on the same table } + 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); @@ -205,9 +206,8 @@ public class CriteriaMethodInvoker { return UNHANDLED; } - Object value = args[0]; if (method != null) { - HibernateQuery hibernateQuery = builder.getHibernateQuery(); + Object value = args[0]; switch (method) { case ID_EQUALS: return builder.eq("id", value); @@ -218,6 +218,7 @@ public class CriteriaMethodInvoker { "call to [" + name + "] with value [" + value + "] requires a String value.")); } String propertyName = builder.calculatePropertyName((String) value); + HibernateQuery hibernateQuery = builder.getHibernateQuery(); switch (method) { case IS_NULL -> hibernateQuery.isNull(propertyName); case IS_NOT_NULL -> hibernateQuery.isNotNull(propertyName); @@ -230,6 +231,7 @@ public class CriteriaMethodInvoker { return UNHANDLED; } + @SuppressWarnings("PMD.AvoidLiteralsInIfCondition") protected Object tryPropertyCriteria(CriteriaMethods method, Object[] args) { if (method == null || args.length < 2 || !(args[0] instanceof String)) { return UNHANDLED;
