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 ed4ac2f26825f97f8a424962513c1a5c24684652 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Fri Feb 20 14:02:31 2026 -0600 Resolve unchecked assignments and ClassCastException by improving type safety --- .../org/grails/orm/hibernate/query/AliasMapEntryFunction.java | 6 +++--- .../orm/hibernate/query/DetachedAssociationFunction.java | 10 +++++----- .../groovy/org/grails/orm/hibernate/query/JpaFromProvider.java | 9 +++++---- .../org/grails/orm/hibernate/query/PredicateGenerator.java | 4 ++-- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/AliasMapEntryFunction.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/AliasMapEntryFunction.java index 458f916c86..f23a5f5af1 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/AliasMapEntryFunction.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/AliasMapEntryFunction.java @@ -7,10 +7,10 @@ import java.util.function.Function; public class AliasMapEntryFunction implements - Function<DetachedAssociationCriteria, - Map.Entry<String, DetachedAssociationCriteria>> { + Function<DetachedAssociationCriteria<?>, + Map.Entry<String, DetachedAssociationCriteria<?>>> { @Override - public Map.Entry<String, DetachedAssociationCriteria> apply(DetachedAssociationCriteria detachedAssociationCriteria) { + public Map.Entry<String, DetachedAssociationCriteria<?>> apply(DetachedAssociationCriteria<?> detachedAssociationCriteria) { return Map.entry(detachedAssociationCriteria.getAssociationPath(), detachedAssociationCriteria); } } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/DetachedAssociationFunction.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/DetachedAssociationFunction.java index 186d73dbe3..e1eb67fc98 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/DetachedAssociationFunction.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/DetachedAssociationFunction.java @@ -7,9 +7,9 @@ import java.util.List; import java.util.Objects; import java.util.function.Function; -public class DetachedAssociationFunction implements Function<Query.Criterion, List<DetachedAssociationCriteria>> { +public class DetachedAssociationFunction implements Function<Query.Criterion, List<DetachedAssociationCriteria<?>>> { @Override - public List<DetachedAssociationCriteria> apply(Query.Criterion o) { + public List<DetachedAssociationCriteria<?>> apply(Query.Criterion o) { List<Query.Criterion> criteria; if (o instanceof Query.In c && Objects.nonNull(c.getSubquery()) ) { criteria = c.getSubquery().getCriteria(); @@ -23,8 +23,8 @@ public class DetachedAssociationFunction implements Function<Query.Criterion, Li criteria = List.of(o); } return criteria.stream() - .filter(DetachedAssociationCriteria.class::isInstance) - .map(DetachedAssociationCriteria.class::cast) - .toList(); + .filter(it -> it instanceof DetachedAssociationCriteria) + .map(it -> (DetachedAssociationCriteria<?>) it) + .collect(java.util.stream.Collectors.toList()); } } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaFromProvider.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaFromProvider.java index 4a4926b477..b0d907e93b 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaFromProvider.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaFromProvider.java @@ -75,15 +75,16 @@ public class JpaFromProvider implements Cloneable { return fromsByName; } - private Map<String, From<?, ?>> createDetachedFroms(JpaCriteriaQuery<?> cq, List<DetachedAssociationCriteria> detachedAssociationCriteriaList) { - return detachedAssociationCriteriaList.stream() + private Map<String, From<?, ?>> createDetachedFroms(JpaCriteriaQuery<?> cq, List<DetachedAssociationCriteria<?>> detachedAssociationCriteriaList) { + return detachedAssociationCriteriaList + .stream() .collect(Collectors.toMap( DetachedAssociationCriteria::getAssociationPath, - criteria -> cq.from(criteria.getAssociation().getOwner().getJavaClass()) , (oldValue, newValue) -> newValue) + criteria -> (From<?, ?>) cq.from(criteria.getAssociation().getOwner().getJavaClass()) , (oldValue, newValue) -> newValue) ); } - private Map<String, DetachedAssociationCriteria> createAliasMap(List<DetachedAssociationCriteria> detachedAssociationCriteriaList) { + private Map<String, DetachedAssociationCriteria<?>> createAliasMap(List<DetachedAssociationCriteria<?>> detachedAssociationCriteriaList) { // Use a merge function and a stable map type to avoid DuplicateKey exceptions when the same // association path/alias appears multiple times (e.g., referenced in both predicate and sort). // Keep the first occurrence to preserve deterministic aliasing. diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/PredicateGenerator.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/PredicateGenerator.java index 98b0e495e0..20c22e5813 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/PredicateGenerator.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/PredicateGenerator.java @@ -41,7 +41,7 @@ public class PredicateGenerator { public Predicate[] getPredicates(HibernateCriteriaBuilder cb, CriteriaQuery<?> criteriaQuery, From<?, ?> root_, - List<Query.Criterion> criteriaList, + List criteriaList, JpaFromProvider fromsByProvider, PersistentEntity entity) { @@ -57,7 +57,7 @@ public class PredicateGenerator { return list.toArray(new Predicate[0]); } - private Predicate handleCriterion(HibernateCriteriaBuilder cb, CriteriaQuery<?> criteriaQuery, From<?, ?> root, JpaFromProvider fromsByProvider, PersistentEntity entity, Query.Criterion criterion) { + private Predicate handleCriterion(HibernateCriteriaBuilder cb, CriteriaQuery<?> criteriaQuery, From<?, ?> root, JpaFromProvider fromsByProvider, PersistentEntity entity, Object criterion) { if (criterion instanceof Query.Junction junction) { return handleJunction(cb, criteriaQuery, root, fromsByProvider, entity, junction); } else if (criterion instanceof Query.DistinctProjection) {
