You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by bo...@apache.org on 2026/04/16 02:23:46 UTC

(grails-core) 02/02: CodeStyke and CodeNarc

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 4807c1c76e2a06e29f7037d76955817719fa10ea
Author: Walter Duque de Estrada <wb...@mac.com>
AuthorDate: Wed Apr 15 21:23:38 2026 -0500

    CodeStyke and CodeNarc
---
 .../grails/buildsrc/GrailsCodeStylePlugin.groovy   |  2 +-
 .../buildsrc/GrailsCodeStylePluginSpec.groovy      | 50 ++++++++++++++++++++++
 .../grails/orm/HibernateCriteriaBuilder.java       |  4 +-
 .../orm/hibernate/ChildHibernateDatastore.java     |  5 ++-
 .../grails/orm/hibernate/HibernateDatastore.java   |  1 -
 .../org/grails/orm/hibernate/HibernateSession.java |  7 +--
 .../orm/hibernate/SchemaTenantGormEnhancer.java    | 18 ++++----
 .../grails/orm/hibernate/cfg/IdentityEnumType.java |  2 +-
 .../grails/orm/hibernate/query/AliasRegistry.java  |  3 +-
 .../orm/hibernate/query/HqlQueryContext.java       |  2 +-
 .../orm/hibernate/query/HqlQueryDelegate.java      |  1 -
 .../grails/orm/hibernate/query/JoinTracker.java    |  3 +-
 .../hibernate/query/JpaCriteriaQueryCreator.java   | 24 +++++------
 .../orm/hibernate/query/JpaProjectionAdapter.java  | 10 ++---
 .../hibernate/query/JpaProjectionTranslator.java   |  4 +-
 .../orm/hibernate/query/JpaQueryContext.java       |  3 +-
 .../orm/hibernate/query/PredicateGenerator.java    | 48 ++++++++++++---------
 .../grails/orm/hibernate/query/SelectHqlQuery.java | 28 ++++++------
 .../gorm/finders/FindOrCreateByFinder.java         |  8 ++--
 19 files changed, 144 insertions(+), 79 deletions(-)

diff --git a/build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/GrailsCodeStylePlugin.groovy b/build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/GrailsCodeStylePlugin.groovy
index a1612aabb5..326ec56747 100644
--- a/build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/GrailsCodeStylePlugin.groovy
+++ b/build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/GrailsCodeStylePlugin.groovy
@@ -838,7 +838,7 @@ class GrailsCodeStylePlugin implements Plugin<Project> {
                     content = content.replaceAll(/(\(\s*(?:[\w\-.]+|'[^']+'|"[^"]+")):([^\s\/])/, '$1: $2')
 
                     // 3. UnnecessaryGString
-                    content = content.replaceAll(/(?<!")"([^"$\n\\]*)"(?!")/) { all, inner ->
+                    content = content.replaceAll(/(?<!\\)(?<!")"([^"$\n\\]*)"(?!")/) { all, inner ->
                         if (!inner.contains("'")) {
                             return "'$inner'"
                         }
diff --git a/build-logic/plugins/src/test/groovy/org/apache/grails/buildsrc/GrailsCodeStylePluginSpec.groovy b/build-logic/plugins/src/test/groovy/org/apache/grails/buildsrc/GrailsCodeStylePluginSpec.groovy
index 49d416ffbd..4dff85a593 100644
--- a/build-logic/plugins/src/test/groovy/org/apache/grails/buildsrc/GrailsCodeStylePluginSpec.groovy
+++ b/build-logic/plugins/src/test/groovy/org/apache/grails/buildsrc/GrailsCodeStylePluginSpec.groovy
@@ -166,4 +166,54 @@ class Test{
         !fixedContent.contains(";")
         fixedContent.count('\n\n') == 3 // ConsecutiveBlankLines
     }
+
+    def "test codenarcFix task does not break strings with single quotes"() {
+        given: "a file with double quoted strings containing single quotes"
+        groovyFile.text = """package org.test
+
+class Test {
+    def s1 = "it's a test"
+    def s2 = "format 'yyyy-MM-dd'"
+    def s3 = "contains \\"double\\" and 'single' quotes"
+}
+"""
+        when: "running codenarcFix"
+        def result = GradleRunner.create()
+                .withProjectDir(testProjectDir.toFile())
+                .withArguments('codenarcFix', '--stacktrace')
+                .withPluginClasspath()
+                .build()
+
+        then: "task finished successfully"
+        result.task(':codenarcFix').outcome == org.gradle.testkit.runner.TaskOutcome.SUCCESS
+
+        and: "strings with single quotes are NOT changed to single quotes (which would break them)"
+        def content = groovyFile.text
+        content.contains('def s1 = "it\'s a test"')
+        content.contains('def s2 = "format \'yyyy-MM-dd\'"')
+        // s3 has escaped double quotes, so it should also remain double quoted
+        content.contains('def s3 = "contains \\"double\\" and \'single\' quotes"')
+    }
+
+    def "test codenarcFix task does not break escaped double quotes in double quotes"() {
+        given: "a file with escaped double quotes"
+        groovyFile.text = """package org.test
+
+class Test {
+    def s = "\\"\\\$it\\""
+}
+"""
+        when: "running codenarcFix"
+        def result = GradleRunner.create()
+                .withProjectDir(testProjectDir.toFile())
+                .withArguments('codenarcFix', '--stacktrace')
+                .withPluginClasspath()
+                .build()
+
+        then: "task finished successfully"
+        result.task(':codenarcFix').outcome == org.gradle.testkit.runner.TaskOutcome.SUCCESS
+
+        and: "escaped quotes are NOT broken"
+        groovyFile.text.contains('"\\"\\$it\\""')
+    }
 }
diff --git a/grails-data-hibernate7/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java b/grails-data-hibernate7/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java
index e9306bbfb5..2103d08e23 100644
--- a/grails-data-hibernate7/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java
+++ b/grails-data-hibernate7/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java
@@ -169,11 +169,11 @@ public class HibernateCriteriaBuilder extends GroovyObjectSupport implements Bui
         return (Objects.nonNull(alias) ? alias + ALIAS_SEPARATOR : "") + propertyName;
     }
 
-    public org.grails.datastore.mapping.query.api.Criteria exists(Closure  subquery) {
+    public org.grails.datastore.mapping.query.api.Criteria exists(Closure subquery) {
         return exists(new grails.gorm.DetachedCriteria(targetClass).build(subquery));
     }
 
-    public org.grails.datastore.mapping.query.api.Criteria notExists(Closure  subquery) {
+    public org.grails.datastore.mapping.query.api.Criteria notExists(Closure subquery) {
         return notExists(new grails.gorm.DetachedCriteria(targetClass).build(subquery));
     }
 
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/ChildHibernateDatastore.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/ChildHibernateDatastore.java
index f526518320..c3be048d73 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/ChildHibernateDatastore.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/ChildHibernateDatastore.java
@@ -18,12 +18,13 @@
  */
 package org.grails.orm.hibernate;
 
+import org.hibernate.SessionFactory;
+
+import org.grails.datastore.gorm.events.ConfigurableApplicationEventPublisher;
 import org.grails.datastore.mapping.core.connections.ConnectionSource;
 import org.grails.datastore.mapping.core.connections.ConnectionSources;
 import org.grails.orm.hibernate.cfg.HibernateMappingContext;
 import org.grails.orm.hibernate.cfg.Settings;
-import org.hibernate.SessionFactory;
-import org.grails.datastore.gorm.events.ConfigurableApplicationEventPublisher;
 import org.grails.orm.hibernate.connections.HibernateConnectionSourceSettings;
 
 /**
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java
index 8b4d97be1b..07465a8a5b 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java
@@ -69,7 +69,6 @@ import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
 import org.springframework.transaction.PlatformTransactionManager;
 import org.springframework.transaction.support.TransactionSynchronizationManager;
 
-import grails.gorm.MultiTenant;
 import grails.gorm.multitenancy.Tenants;
 import org.grails.datastore.gorm.events.AutoTimestampEventListener;
 import org.grails.datastore.gorm.events.ConfigurableApplicationContextEventPublisher;
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateSession.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateSession.java
index 9f0b9f155e..7ff7be93f6 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateSession.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateSession.java
@@ -29,10 +29,8 @@ import java.util.Map;
 
 import jakarta.persistence.FlushModeType;
 import jakarta.persistence.LockModeType;
+
 import org.hibernate.LockMode;
-import org.grails.orm.hibernate.query.HibernateHqlQueryCreator;
-import org.grails.orm.hibernate.query.HqlQueryContext;
-import org.grails.orm.hibernate.query.MutationHqlQuery;
 import org.hibernate.Session;
 import org.hibernate.SessionFactory;
 import org.hibernate.proxy.HibernateProxy;
@@ -62,7 +60,10 @@ import org.grails.datastore.mapping.transactions.Transaction;
 import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity;
 import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentEntity;
 import org.grails.orm.hibernate.proxy.HibernateProxyHandler;
+import org.grails.orm.hibernate.query.HibernateHqlQueryCreator;
 import org.grails.orm.hibernate.query.HibernateQuery;
+import org.grails.orm.hibernate.query.HqlQueryContext;
+import org.grails.orm.hibernate.query.MutationHqlQuery;
 
 /**
  * Session implementation that wraps a Hibernate {@link org.hibernate.Session}.
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/SchemaTenantGormEnhancer.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/SchemaTenantGormEnhancer.java
index be412f3c99..c5e11ba047 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/SchemaTenantGormEnhancer.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/SchemaTenantGormEnhancer.java
@@ -18,20 +18,20 @@
  */
 package org.grails.orm.hibernate;
 
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.transaction.PlatformTransactionManager;
+
 import grails.gorm.MultiTenant;
+import org.grails.datastore.gorm.jdbc.schema.SchemaHandler;
 import org.grails.datastore.mapping.core.Datastore;
+import org.grails.datastore.mapping.model.PersistentEntity;
 import org.grails.datastore.mapping.multitenancy.AllTenantsResolver;
 import org.grails.datastore.mapping.multitenancy.TenantResolver;
-import org.grails.datastore.mapping.model.PersistentEntity;
-import org.grails.datastore.gorm.jdbc.schema.SchemaHandler;
 import org.grails.orm.hibernate.connections.HibernateConnectionSource;
-import org.springframework.transaction.PlatformTransactionManager;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
 
 /**
  * A {@link HibernateGormEnhancer} for SCHEMA multi-tenancy mode that resolves all tenant qualifiers
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/IdentityEnumType.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/IdentityEnumType.java
index 58e3ff693a..a465c7e5fd 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/IdentityEnumType.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/IdentityEnumType.java
@@ -18,8 +18,8 @@ import org.hibernate.MappingException;
 import org.hibernate.engine.spi.SharedSessionContractImplementor;
 import org.hibernate.type.descriptor.WrapperOptions;
 import org.hibernate.type.descriptor.java.JavaType;
-import org.hibernate.type.descriptor.jdbc.JdbcType;
 import org.hibernate.type.descriptor.jdbc.IntegerJdbcType;
+import org.hibernate.type.descriptor.jdbc.JdbcType;
 import org.hibernate.type.descriptor.jdbc.VarcharJdbcType;
 import org.hibernate.type.spi.TypeConfiguration;
 import org.hibernate.usertype.ParameterizedType;
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/AliasRegistry.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/AliasRegistry.java
index 4c834fc43c..66f28ad066 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/AliasRegistry.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/AliasRegistry.java
@@ -15,10 +15,11 @@
  */
 package org.grails.orm.hibernate.query;
 
-import jakarta.persistence.criteria.Expression;
 import java.util.HashMap;
 import java.util.Map;
 
+import jakarta.persistence.criteria.Expression;
+
 /**
  * Registry for user-defined and auto-generated aliases in a JPA query.
  *
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HqlQueryContext.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HqlQueryContext.java
index fbf0638011..bf38f30742 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HqlQueryContext.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HqlQueryContext.java
@@ -35,8 +35,8 @@ import jakarta.annotation.Nonnull;
 import jakarta.annotation.Nullable;
 
 import org.hibernate.jpa.AvailableHints;
-import org.grails.datastore.mapping.model.PersistentEntity;
 
+import org.grails.datastore.mapping.model.PersistentEntity;
 
 import static org.grails.orm.hibernate.query.HqlQueryMethods.convertValue;
 
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HqlQueryDelegate.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HqlQueryDelegate.java
index 13eb06fb90..567dc55db9 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HqlQueryDelegate.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HqlQueryDelegate.java
@@ -57,7 +57,6 @@ public interface HqlQueryDelegate extends Serializable {
 
     // ── select-only (no-ops for mutation queries) ─────────────────────────────
 
-
     default void setMaxResults(int n) {}
 
     default void setFirstResult(int n) {}
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JoinTracker.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JoinTracker.java
index 8539111d23..1a1f20096d 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JoinTracker.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JoinTracker.java
@@ -15,10 +15,11 @@
  */
 package org.grails.orm.hibernate.query;
 
-import jakarta.persistence.criteria.From;
 import java.util.HashMap;
 import java.util.Map;
 
+import jakarta.persistence.criteria.From;
+
 /**
  * Tracks physical JPA Joins and Roots to ensure consistency and avoid duplicate joins.
  *
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaCriteriaQueryCreator.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaCriteriaQueryCreator.java
index 545c18c160..0846e1b316 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaCriteriaQueryCreator.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaCriteriaQueryCreator.java
@@ -15,29 +15,27 @@
  */
 package org.grails.orm.hibernate.query;
 
-import grails.gorm.DetachedCriteria;
-import jakarta.persistence.Tuple;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
 import jakarta.persistence.criteria.AbstractQuery;
 import jakarta.persistence.criteria.CriteriaBuilder;
 import jakarta.persistence.criteria.CriteriaQuery;
 import jakarta.persistence.criteria.Expression;
-import jakarta.persistence.criteria.From;
-import jakarta.persistence.criteria.Order;
 import jakarta.persistence.criteria.Root;
-import jakarta.persistence.criteria.Selection;
-import jakarta.persistence.criteria.Subquery;
-import org.grails.datastore.mapping.model.PersistentEntity;
-import org.grails.datastore.gorm.query.criteria.DetachedAssociationCriteria;
-import org.grails.datastore.mapping.query.Query;
-import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity;
+
 import org.hibernate.query.criteria.HibernateCriteriaBuilder;
 import org.hibernate.query.criteria.JpaCriteriaQuery;
 import org.hibernate.query.criteria.JpaSubQuery;
+
 import org.springframework.core.convert.ConversionService;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import grails.gorm.DetachedCriteria;
+import org.grails.datastore.gorm.query.criteria.DetachedAssociationCriteria;
+import org.grails.datastore.mapping.model.PersistentEntity;
+import org.grails.datastore.mapping.query.Query;
+import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity;
 
 /**
  * A class that creates a JPA {@link CriteriaQuery} from a GORM {@link Query} and {@link DetachedCriteria}.
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaProjectionAdapter.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaProjectionAdapter.java
index 351dce98c3..5f1f7c9ff7 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaProjectionAdapter.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaProjectionAdapter.java
@@ -15,17 +15,17 @@
  */
 package org.grails.orm.hibernate.query;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import jakarta.persistence.Tuple;
-import jakarta.persistence.criteria.AbstractQuery;
-import jakarta.persistence.criteria.CriteriaBuilder;
 import jakarta.persistence.criteria.CriteriaQuery;
 import jakarta.persistence.criteria.Selection;
 import jakarta.persistence.criteria.Subquery;
-import org.grails.datastore.mapping.query.Query;
+
 import org.hibernate.query.criteria.HibernateCriteriaBuilder;
 
-import java.util.ArrayList;
-import java.util.List;
+import org.grails.datastore.mapping.query.Query;
 
 /**
  * Adapts Grails datastore projections to JPA Selections.
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaProjectionTranslator.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaProjectionTranslator.java
index 2950497c56..d6858d8130 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaProjectionTranslator.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaProjectionTranslator.java
@@ -17,9 +17,11 @@ package org.grails.orm.hibernate.query;
 
 import jakarta.persistence.criteria.CriteriaBuilder;
 import jakarta.persistence.criteria.Expression;
-import org.grails.datastore.mapping.query.Query;
+
 import org.hibernate.query.criteria.JpaExpression;
 
+import org.grails.datastore.mapping.query.Query;
+
 /**
  * A class that translates GORM projections to JPA expressions.
  *
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaQueryContext.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaQueryContext.java
index 423f840c0f..c12153df2b 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaQueryContext.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaQueryContext.java
@@ -15,10 +15,11 @@
  */
 package org.grails.orm.hibernate.query;
 
+import java.util.List;
+
 import jakarta.persistence.criteria.Expression;
 import jakarta.persistence.criteria.From;
 import jakarta.persistence.criteria.Path;
-import java.util.List;
 
 /**
  * Orchestrator for JPA query translation state (Aliases, Joins, Expressions).
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 2e4c1eb72e..4ce1aa0cbe 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
@@ -18,26 +18,34 @@
  */
 package org.grails.orm.hibernate.query;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import jakarta.persistence.criteria.AbstractQuery;
+import jakarta.persistence.criteria.Expression;
+import jakarta.persistence.criteria.From;
+import jakarta.persistence.criteria.JoinType;
+import jakarta.persistence.criteria.Predicate;
+import jakarta.persistence.criteria.Subquery;
+
+import org.hibernate.query.criteria.HibernateCriteriaBuilder;
+import org.hibernate.query.criteria.JpaSubQuery;
+
+import org.springframework.core.convert.ConversionService;
+
 import grails.gorm.DetachedCriteria;
-import jakarta.persistence.criteria.*;
 import org.grails.datastore.gorm.query.criteria.DetachedAssociationCriteria;
+import org.grails.datastore.mapping.core.exceptions.ConfigurationException;
 import org.grails.datastore.mapping.model.PersistentProperty;
-import org.grails.datastore.mapping.query.Query;
 import org.grails.datastore.mapping.query.Projections;
+import org.grails.datastore.mapping.query.Query;
 import org.grails.datastore.mapping.query.api.QueryableCriteria;
-import org.grails.datastore.mapping.core.exceptions.ConfigurationException;
 import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity;
 import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentProperty;
 import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateToManyProperty;
-import org.hibernate.query.criteria.HibernateCriteriaBuilder;
-import org.hibernate.query.criteria.JpaSubQuery;
-import org.springframework.core.convert.ConversionService;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
 
 /**
  * A class that generates predicates for a given list of criteria.
@@ -199,7 +207,7 @@ public class PredicateGenerator {
         if (associationRoot == null) {
             // Check if we already have it in our parent or alias map
             Expression<?> expr = fromsByProvider.getFullyQualifiedExpression(associationName);
-            if (expr instanceof From<?,?> from) {
+            if (expr instanceof From<?, ?> from) {
                 associationRoot = from;
             } else {
                 associationRoot = fromsByProvider.getRoot().join(associationName);
@@ -223,7 +231,7 @@ public class PredicateGenerator {
         From<?, ?> associationRoot = fromsByProvider.getFrom(associationName);
         if (associationRoot == null) {
             Expression<?> expr = fromsByProvider.getFullyQualifiedExpression(associationName);
-            if (expr instanceof From<?,?> from) {
+            if (expr instanceof From<?, ?> from) {
                 associationRoot = from;
             } else {
                 associationRoot = fromsByProvider.getRoot().join(associationName, JoinType.INNER);
@@ -371,13 +379,13 @@ public class PredicateGenerator {
 
     private Predicate handlePropertyNameCriterion(JpaQueryContext fromsByProvider, Query.PropertyNameCriterion c) {
         Expression<?> propertyPath = fromsByProvider.getFullyQualifiedExpression(c.getProperty());
-        if (((Object)c) instanceof Query.IsNull) {
+        if (((Object) c) instanceof Query.IsNull) {
             return criteriaBuilder.isNull(propertyPath);
-        } else if (((Object)c) instanceof Query.IsNotNull) {
+        } else if (((Object) c) instanceof Query.IsNotNull) {
             return criteriaBuilder.isNotNull(propertyPath);
-        } else if (((Object)c) instanceof Query.IsEmpty) {
+        } else if (((Object) c) instanceof Query.IsEmpty) {
             return criteriaBuilder.isEmpty((Expression<java.util.Collection<?>>) propertyPath);
-        } else if (((Object)c) instanceof Query.IsNotEmpty) {
+        } else if (((Object) c) instanceof Query.IsNotEmpty) {
             return criteriaBuilder.isNotEmpty((Expression<java.util.Collection<?>>) propertyPath);
         }
         throw new UnsupportedOperationException("Unsupported property name criterion: " + c.getClass().getName());
@@ -402,7 +410,7 @@ public class PredicateGenerator {
                 }
             }
             
-            creator.populateSubquery((JpaSubQuery)subquery);
+            creator.populateSubquery((JpaSubQuery) subquery);
             return criteriaBuilder.equal(propertyPath, subquery);
         } else {
             return criteriaBuilder.equal(propertyPath, convertComparisonValue(entity, pc.getProperty(), pc.getValue(), fromsByProvider, propertyPath));
@@ -455,7 +463,7 @@ public class PredicateGenerator {
         Subquery<?> subquery = criteriaQuery.subquery(subqueryEntity.getJavaClass());
         var creator = new JpaCriteriaQueryCreator(new Query.ProjectionList(), criteriaBuilder, subqueryEntity, (DetachedCriteria) subqueryCriteria, conversionService);
         creator.setParentContext(fromsByProvider);
-        creator.populateSubquery((JpaSubQuery)subquery);
+        creator.populateSubquery((JpaSubQuery) subquery);
         return criteriaBuilder.exists(subquery);
     }
 
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/SelectHqlQuery.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/SelectHqlQuery.java
index b619fa8e03..a487f3ddf7 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/SelectHqlQuery.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/SelectHqlQuery.java
@@ -72,17 +72,21 @@ public class SelectHqlQuery extends Query implements HqlQueryMethods, Serializab
         return delegate.selectQuery();
     }
 
-@Override
-public Integer getMax() {
-    if (max != null && max > -1) return max;
-    Object m = queryContext.querySettings().get(HibernateQueryArgument.MAX.value());
-    return m instanceof Number n ? n.intValue() : -1;
-}
+    @Override
+    public Integer getMax() {
+        if (max != null && max > -1) {
+            return max;
+        }
+        Object m = queryContext.querySettings().get(HibernateQueryArgument.MAX.value());
+        return m instanceof Number n ? n.intValue() : -1;
+    }
 
-@Override
-public Integer getOffset() {
-    if (offset != null && offset > -1) return offset;
-    Object o = queryContext.querySettings().get(HibernateQueryArgument.OFFSET.value());
-    return o instanceof Number n ? n.intValue() : 0;
-}
+    @Override
+    public Integer getOffset() {
+        if (offset != null && offset > -1) {
+            return offset;
+        }
+        Object o = queryContext.querySettings().get(HibernateQueryArgument.OFFSET.value());
+        return o instanceof Number n ? n.intValue() : 0;
+    }
 }
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/finders/FindOrCreateByFinder.java b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/finders/FindOrCreateByFinder.java
index 93d073de3b..8205dec00b 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/finders/FindOrCreateByFinder.java
+++ b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/finders/FindOrCreateByFinder.java
@@ -93,10 +93,10 @@ public class FindOrCreateByFinder extends AbstractFindByFinder {
 
     protected void validateInvocation(DynamicFinderInvocation invocation) {
         for (MethodExpression methodExpression : invocation.getExpressions()) {
-            if (methodExpression instanceof MethodExpression.GreaterThan
-                    || methodExpression instanceof MethodExpression.LessThan
-                    || methodExpression instanceof MethodExpression.GreaterThanEquals
-                    || methodExpression instanceof MethodExpression.LessThanEquals) {
+            if (methodExpression instanceof MethodExpression.GreaterThan ||
+                    methodExpression instanceof MethodExpression.LessThan ||
+                    methodExpression instanceof MethodExpression.GreaterThanEquals ||
+                    methodExpression instanceof MethodExpression.LessThanEquals) {
                 throw new ConfigurationException("Only equality-based expressions are supported for " + invocation.getMethodName());
             }
         }