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

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

commit de9934e174400c8952aadf88e27a04b9748be336
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Mon Jul 7 22:53:29 2025 -0500

    refactoring and testing TypeNameProvider
---
 .../hibernate/cfg/AbstractGrailsDomainBinder.java  |   2 +-
 .../orm/hibernate/cfg/GrailsDomainBinder.java      | 141 ++++++++-------------
 .../ConfigureDerivedPropertiesConsumer.java        |  25 ++++
 .../cfg/domainbinding/TypeNameProvider.java        |  28 ++++
 .../gorm/specs/HibernateGormDatastoreSpec.groovy   |   7 +-
 .../hibernate/cfg/GrailsDomainBinderSpec.groovy    |   3 +-
 .../cfg/domainbinding/ClassBinderSpec.groovy       |   6 +-
 .../cfg/domainbinding/TypeNameProviderSpec.groovy  |  79 ++++++++++++
 .../data/testing/tck/tests/AttachMethodSpec.groovy |   2 +-
 .../testing/tck/tests/CircularOneToManySpec.groovy |   2 +-
 .../tck/tests/CommonTypesPersistenceSpec.groovy    |   2 +-
 11 files changed, 201 insertions(+), 96 deletions(-)

diff --git 
a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/AbstractGrailsDomainBinder.java
 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/AbstractGrailsDomainBinder.java
index 3dd3a4ba68..264fe90497 100644
--- 
a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/AbstractGrailsDomainBinder.java
+++ 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/AbstractGrailsDomainBinder.java
@@ -47,7 +47,7 @@ public abstract class AbstractGrailsDomainBinder {
      * @param theClass The domain class in question
      * @return A Mapping object or null
      */
-    static void cacheMapping(Class<?> theClass, Mapping mapping) {
+    public static void cacheMapping(Class<?> theClass, Mapping mapping) {
         MAPPING_CACHE.put(theClass, mapping);
     }
 
diff --git 
a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
index 4e57e4739b..14084c1902 100644
--- 
a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
+++ 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
@@ -35,6 +35,8 @@ import org.grails.datastore.mapping.reflect.EntityReflector;
 import org.grails.datastore.mapping.reflect.NameUtils;
 import org.grails.orm.hibernate.access.TraitPropertyAccessStrategy;
 import org.grails.orm.hibernate.cfg.domainbinding.ClassBinder;
+import 
org.grails.orm.hibernate.cfg.domainbinding.ConfigureDerivedPropertiesConsumer;
+import org.grails.orm.hibernate.cfg.domainbinding.TypeNameProvider;
 import org.hibernate.FetchMode;
 import org.hibernate.MappingException;
 import org.hibernate.boot.internal.MetadataBuildingContextRootImpl;
@@ -105,11 +107,13 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Properties;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.StringTokenizer;
 
+import static java.util.Optional.ofNullable;
 import static org.hibernate.boot.model.naming.Identifier.toIdentifier;
 
 ;
@@ -307,7 +311,9 @@ public class GrailsDomainBinder implements 
MetadataContributor {
             SimpleValue elt = new BasicValue(metadataBuildingContext, 
map.getCollectionTable());
             map.setElement(elt);
 
-            String typeName = 
getTypeName(property,getPropertyConfig(property), 
getMapping(property.getOwner()));
+            PropertyConfig config = getPropertyConfig(property);
+            Mapping mapping = getMapping(property.getOwner());
+            String typeName = new TypeNameProvider().getTypeName(property, 
mapping);
             if (typeName == null ) {
 
                 if(property instanceof Basic) {
@@ -763,7 +769,8 @@ public class GrailsDomainBinder implements 
MetadataContributor {
             }
             else {
 
-                String typeName = getTypeName(property, config, 
getMapping(property.getOwner()));
+                Mapping mapping = getMapping(property.getOwner());
+                String typeName = new TypeNameProvider().getTypeName(property, 
mapping);
                 if (typeName == null) {
                     Type type = 
mappings.getTypeConfiguration().getBasicTypeRegistry().getRegisteredType(className);
                     if (type != null) {
@@ -819,22 +826,6 @@ public class GrailsDomainBinder implements 
MetadataContributor {
         return element.getColumns().iterator().next();
     }
 
-    private String getTypeName(PersistentProperty property, PropertyConfig 
config, Mapping mapping) {
-        if (config != null && config.getType() != null) {
-            final Object typeObj = config.getType();
-            if (typeObj instanceof Class<?>) {
-                return ((Class<?>)typeObj).getName();
-            }
-            return typeObj.toString();
-        }
-
-        if (mapping != null) {
-            return mapping.getTypeName(property.getType());
-        }
-
-        return null;
-    }
-
     private void bindColumnConfigToColumn(PersistentProperty property, Column 
column, ColumnConfig columnConfig) {
         final PropertyConfig mappedForm = property != null ? (PropertyConfig) 
property.getMapping().getMappedForm() : null;
         boolean allowUnique = mappedForm != null && 
!mappedForm.isUniqueWithinGroup();
@@ -1324,7 +1315,7 @@ public class GrailsDomainBinder implements 
MetadataContributor {
         }
     }
 
-    private void evaluateMapping(PersistentEntity domainClass) {
+    public void evaluateMapping(PersistentEntity domainClass) {
         try {
             final Mapping m = (Mapping) 
domainClass.getMapping().getMappedForm();
             trackCustomCascadingSaves(m, 
domainClass.getPersistentProperties());
@@ -1376,7 +1367,7 @@ public class GrailsDomainBinder implements 
MetadataContributor {
      * @return A Mapping object or null
      */
     private static Mapping getMapping(Class<?> theClass) {
-        return AbstractGrailsDomainBinder.getMapping(theClass);
+        return 
Optional.ofNullable(AbstractGrailsDomainBinder.getMapping(theClass)).orElseThrow();
     }
 
     /**
@@ -1534,10 +1525,8 @@ public class GrailsDomainBinder implements 
MetadataContributor {
             DiscriminatorConfig discriminatorConfig = subMapping != null ? 
subMapping.getDiscriminator() : null;
 
             subClass.setDiscriminatorValue(discriminatorConfig != null && 
discriminatorConfig.getValue() != null ? discriminatorConfig.getValue() : 
fullName);
+            configureDerivedProperties(sub, subMapping);
 
-            if (subMapping != null) {
-                configureDerivedProperties(sub, subMapping);
-            }
         }
         Integer bs = (m == null) ? null : m.getBatchSize();
         if (bs != null) {
@@ -1743,12 +1732,7 @@ public class GrailsDomainBinder implements 
MetadataContributor {
     }
 
     private void configureDerivedProperties(PersistentEntity domainClass, 
Mapping m) {
-        for (PersistentProperty prop : domainClass.getPersistentProperties()) {
-            PropertyConfig propertyConfig = 
m.getPropertyConfig(prop.getName());
-            if (propertyConfig != null && propertyConfig.getFormula() != null) 
{
-                propertyConfig.setDerived(true);
-            }
-        }
+        domainClass.getPersistentProperties().forEach(new 
ConfigureDerivedPropertiesConsumer( m));
     }
 
     /*
@@ -1758,71 +1742,48 @@ public class GrailsDomainBinder implements 
MetadataContributor {
                                                        RootClass root, 
InFlightMetadataCollector mappings, String sessionFactoryBeanName) {
 
         // get the schema and catalog names from the configuration
-        Mapping m = getMapping(domainClass.getJavaClass());
+        Mapping m = 
ofNullable(getMapping(domainClass.getJavaClass())).orElseThrow();
 
-        String schema = getSchemaName(mappings);
-        String catalog = getCatalogName(mappings);
-
-        if (m != null) {
-            configureDerivedProperties(domainClass, m);
-            CacheConfig cc = m.getCache();
-            if (cc != null && cc.getEnabled()) {
-                root.setCacheConcurrencyStrategy(cc.getUsage());
-                root.setCached(true);
-                if ("read-only".equals(cc.getUsage())) {
-                    root.setMutable(false);
-                }
-                
root.setLazyPropertiesCacheable(!"non-lazy".equals(cc.getInclude()));
+        configureDerivedProperties(domainClass, m);
+        CacheConfig cc = m.getCache();
+        if (cc != null && cc.getEnabled()) {
+            root.setCacheConcurrencyStrategy(cc.getUsage());
+            root.setCached(true);
+            if ("read-only".equals(cc.getUsage())) {
+                root.setMutable(false);
             }
+            
root.setLazyPropertiesCacheable(!"non-lazy".equals(cc.getInclude()));
+        }
+        root.setBatchSize(ofNullable(m.getBatchSize()).orElse(0));
+        root.setDynamicUpdate(m.getDynamicUpdate());
+        root.setDynamicInsert(m.getDynamicInsert());
 
-            Integer bs = m.getBatchSize();
-            if (bs != null) {
-                root.setBatchSize(bs);
-            }
 
-            if (m.getDynamicUpdate()) {
-                root.setDynamicUpdate(true);
-            }
-            if (m.getDynamicInsert()) {
-                root.setDynamicInsert(true);
-            }
-        }
+        var schema = ofNullable(m.getTable())
+                .map(org.grails.orm.hibernate.cfg.Table::getSchema)
+                .orElse(getSchemaName(mappings));
 
-        final boolean hasTableDefinition = m != null && m.getTable() != null;
-        if (hasTableDefinition && m.getTable().getSchema() != null) {
-            schema =  m.getTable().getSchema();
-        }
-        if (hasTableDefinition && m.getTable().getCatalog() != null) {
-            catalog = m.getTable().getCatalog();
-        }
+        var catalog = ofNullable(m.getTable())
+                .map(org.grails.orm.hibernate.cfg.Table::getCatalog)
+                .orElse( getCatalogName(mappings));
 
-        final boolean isAbstract = m != null && !m.getTablePerHierarchy() && 
m.isTablePerConcreteClass() && root.isAbstract();
+
+        var isAbstract = !m.getTablePerHierarchy() && 
m.isTablePerConcreteClass() && root.isAbstract();
         // create the table
-        Table table = mappings.addTable(schema, catalog,
-                getTableName(domainClass, sessionFactoryBeanName),
-                null, isAbstract, metadataBuildingContext);
+        Table table = mappings.addTable(schema
+                , catalog
+                , getTableName(domainClass, sessionFactoryBeanName)
+                , null
+                , isAbstract
+                , metadataBuildingContext
+        );
         root.setTable(table);
-
         if (LOG.isDebugEnabled()) {
             LOG.debug("[GrailsDomainBinder] Mapping Grails domain class: " + 
domainClass.getName() + " -> " + root.getTable().getName());
         }
-
         bindIdentity(domainClass, root, mappings, m, sessionFactoryBeanName);
-
-        if (m == null) {
-            bindVersion(domainClass.getVersion(), root, mappings, 
sessionFactoryBeanName);
-        }
-        else {
-            if (m.getVersioned()) {
-                bindVersion(domainClass.getVersion(), root, mappings, 
sessionFactoryBeanName);
-            }
-            else {
-                root.setOptimisticLockStyle(OptimisticLockStyle.NONE);
-            }
-        }
-
+        bindVersion(domainClass.getVersion(), root, mappings, 
sessionFactoryBeanName);
         root.createPrimaryKey();
-
         createClassProperties(domainClass, root, mappings, 
sessionFactoryBeanName);
     }
 
@@ -1941,7 +1902,8 @@ public class GrailsDomainBinder implements 
MetadataContributor {
                 bindSimpleValue(currentGrailsProp, null, (SimpleValue) value, 
EMPTY_PATH, mappings, sessionFactoryBeanName);
             }
             else if (collectionType != null) {
-                String typeName = getTypeName(currentGrailsProp, 
getPropertyConfig(currentGrailsProp),gormMapping);
+                PropertyConfig config = getPropertyConfig(currentGrailsProp);
+                String typeName = new 
TypeNameProvider().getTypeName(currentGrailsProp, gormMapping);
                 if ("serializable".equals(typeName)) {
                     value = new BasicValue(metadataBuildingContext, table);
                     bindSimpleValue(typeName, (SimpleValue) value, 
currentGrailsProp.isNullable(),
@@ -2126,7 +2088,9 @@ public class GrailsDomainBinder implements 
MetadataContributor {
 
         PropertyConfig pc = getPropertyConfig(property);
         final PersistentEntity owner = property.getOwner();
-        String typeName = getTypeName(property, getPropertyConfig(property), 
getMapping(owner));
+        PropertyConfig config = getPropertyConfig(property);
+        Mapping mapping1 = getMapping(owner);
+        String typeName = new TypeNameProvider().getTypeName(property, 
mapping1);
         if (typeName == null) {
             Properties enumProperties = new Properties();
             enumProperties.put(ENUM_CLASS_PROP, propertyType.getName());
@@ -2952,7 +2916,8 @@ public class GrailsDomainBinder implements 
MetadataContributor {
     }
 
     private void setTypeForPropertyConfig(PersistentProperty grailsProp, 
SimpleValue simpleValue, PropertyConfig config) {
-        final String typeName = getTypeName(grailsProp, 
getPropertyConfig(grailsProp), getMapping(grailsProp.getOwner()));
+        Mapping mapping = getMapping(grailsProp.getOwner());
+        final String typeName = new TypeNameProvider().getTypeName(grailsProp, 
mapping);
         if (typeName == null) {
             simpleValue.setTypeName(grailsProp.getType().getName());
         }
@@ -3238,7 +3203,9 @@ public class GrailsDomainBinder implements 
MetadataContributor {
     private String getIndexColumnType(PersistentProperty property, String 
defaultType) {
         PropertyConfig pc = getPropertyConfig(property);
         if (pc != null && pc.getIndexColumn() != null && 
pc.getIndexColumn().getType() != null) {
-            return getTypeName(property, pc.getIndexColumn(), 
getMapping(property.getOwner()));
+            PropertyConfig config = pc.getIndexColumn();
+            Mapping mapping = getMapping(property.getOwner());
+            return new TypeNameProvider().getTypeName(property, mapping);
         }
         return defaultType;
     }
@@ -3603,7 +3570,9 @@ public class GrailsDomainBinder implements 
MetadataContributor {
         }
 
         public String getTypeName(ToMany property) {
-            return binder.getTypeName(property, 
binder.getPropertyConfig(property), getMapping(property.getOwner()));
+            PropertyConfig config = binder.getPropertyConfig(property);
+            Mapping mapping = getMapping(property.getOwner());
+            return new TypeNameProvider().getTypeName(property, mapping);
         }
 
     }
diff --git 
a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ConfigureDerivedPropertiesConsumer.java
 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ConfigureDerivedPropertiesConsumer.java
new file mode 100644
index 0000000000..1400c6d223
--- /dev/null
+++ 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ConfigureDerivedPropertiesConsumer.java
@@ -0,0 +1,25 @@
+package org.grails.orm.hibernate.cfg.domainbinding;
+
+import org.grails.datastore.mapping.model.PersistentProperty;
+import org.grails.orm.hibernate.cfg.Mapping;
+
+import java.util.Objects;
+import java.util.function.Consumer;
+import static java.util.Optional.ofNullable;
+
+
+public class ConfigureDerivedPropertiesConsumer implements 
Consumer<PersistentProperty> {
+
+    private final Mapping m;
+
+    public ConfigureDerivedPropertiesConsumer(Mapping m) {
+        this.m = m;
+    }
+    @Override
+    public void accept(PersistentProperty persistentProperty) {
+        ofNullable(m.getPropertyConfig(persistentProperty.getName()))
+            .ifPresent(propertyConfig ->
+                    
propertyConfig.setDerived(Objects.nonNull(propertyConfig.getFormula()))
+            );
+    }
+}
diff --git 
a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TypeNameProvider.java
 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TypeNameProvider.java
new file mode 100644
index 0000000000..6aa05e5dfd
--- /dev/null
+++ 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TypeNameProvider.java
@@ -0,0 +1,28 @@
+package org.grails.orm.hibernate.cfg.domainbinding;
+
+import jakarta.validation.constraints.NotNull;
+import org.grails.datastore.mapping.model.PersistentProperty;
+import org.grails.orm.hibernate.cfg.Mapping;
+import org.grails.orm.hibernate.cfg.PropertyConfig;
+
+import static java.util.Optional.ofNullable;
+
+public class TypeNameProvider {
+
+    public String getTypeName(@NotNull PersistentProperty property
+                                ,@NotNull Mapping mapping) {
+       return ofNullable(getPropertyConfig(property))
+                .map(PropertyConfig::getType)
+                .map(typeObj -> typeObj instanceof Class<?> clazz ?
+                        clazz.getName() : typeObj.toString()
+                )
+               .orElse(mapping.getTypeName(property.getType()));
+    }
+
+    private PropertyConfig getPropertyConfig(PersistentProperty property) {
+        return (PropertyConfig) property.getMapping().getMappedForm();
+    }
+}
+
+
+
diff --git 
a/grails-data-hibernate6/core/src/test/groovy/grails/gorm/specs/HibernateGormDatastoreSpec.groovy
 
b/grails-data-hibernate6/core/src/test/groovy/grails/gorm/specs/HibernateGormDatastoreSpec.groovy
index 11b5c31bb1..cb0697bf1f 100644
--- 
a/grails-data-hibernate6/core/src/test/groovy/grails/gorm/specs/HibernateGormDatastoreSpec.groovy
+++ 
b/grails-data-hibernate6/core/src/test/groovy/grails/gorm/specs/HibernateGormDatastoreSpec.groovy
@@ -40,7 +40,8 @@ class HibernateGormDatastoreSpec extends 
GrailsDataTckSpec<GrailsDataHibernate6T
         ]
     }
 
-    HibernatePersistentEntity createPersistentEntity(String className
+    HibernatePersistentEntity createPersistentEntity(GrailsDomainBinder binder
+                                                    , String className
                                                      , Map<String, Class> 
fieldProperties
                                                      , Map<String, String> 
staticMapping
 
@@ -62,7 +63,9 @@ class HibernateGormDatastoreSpec extends 
GrailsDataTckSpec<GrailsDataHibernate6T
     """
 
         def clazz = classLoader.parseClass(classText)
-        getMappingContext().addPersistentEntity(clazz) as 
HibernatePersistentEntity
+        def entity = getMappingContext().addPersistentEntity(clazz) as 
HibernatePersistentEntity
+        binder.evaluateMapping(entity)
+        entity
     }
 
     protected InFlightMetadataCollectorImpl getCollector() {
diff --git 
a/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinderSpec.groovy
 
b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinderSpec.groovy
index eb3b349bb6..0c07c13bed 100644
--- 
a/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinderSpec.groovy
+++ 
b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinderSpec.groovy
@@ -12,7 +12,8 @@ class GrailsDomainBinderSpec extends 
HibernateGormDatastoreSpec {
         def grailsDomainBinder = getGrailsDomainBinder()
         def simpleName = "Book"
         def fieldProperties = [title: String]
-        def persistentEntity = createPersistentEntity(simpleName, 
fieldProperties, [:])
+        def persistentEntity = 
createPersistentEntity(grailsDomainBinder,simpleName, fieldProperties, [:])
+
         grailsDomainBinder.bindRoot(persistentEntity, 
collector,"sessionFactoryName")
         println("when")
         then:
diff --git 
a/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ClassBinderSpec.groovy
 
b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ClassBinderSpec.groovy
index 478a048d13..04ab545c60 100644
--- 
a/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ClassBinderSpec.groovy
+++ 
b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ClassBinderSpec.groovy
@@ -14,7 +14,7 @@ class ClassBinderSpec extends HibernateGormDatastoreSpec {
 
         def simpleName = "Book"
         def persistentName = "foo.Book"
-        def persistentEntity = createPersistentEntity(simpleName, [:], [:])
+        def persistentEntity = 
createPersistentEntity(grailsDomainBinder,simpleName, [:], [:])
         def root = new RootClass(grailsDomainBinder.metadataBuildingContext);
         def binder = new ClassBinder()
 
@@ -39,7 +39,7 @@ class ClassBinderSpec extends HibernateGormDatastoreSpec {
 
         def simpleName = "Book"
         def persistentName = "foo.Book"
-        def persistentEntity = createPersistentEntity(simpleName, [:], 
[autoImport: "true"])
+        def persistentEntity = 
createPersistentEntity(grailsDomainBinder,simpleName, [:], [autoImport: "true"])
         def root = new RootClass(grailsDomainBinder.metadataBuildingContext);
         def binder = new ClassBinder()
 
@@ -64,7 +64,7 @@ class ClassBinderSpec extends HibernateGormDatastoreSpec {
 
         def simpleName = "Book"
         def persistentName = "foo.Book"
-        def persistentEntity = createPersistentEntity(simpleName, [:], 
[autoImport: "false"])
+        def persistentEntity = createPersistentEntity(grailsDomainBinder, 
simpleName, [:], [autoImport: "false"])
         def root = new RootClass(grailsDomainBinder.metadataBuildingContext);
         def binder = new ClassBinder()
 
diff --git 
a/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TypeNameProviderSpec.groovy
 
b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TypeNameProviderSpec.groovy
new file mode 100644
index 0000000000..14d276440c
--- /dev/null
+++ 
b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TypeNameProviderSpec.groovy
@@ -0,0 +1,79 @@
+package org.grails.orm.hibernate.cfg.domainbinding
+
+import grails.gorm.specs.HibernateGormDatastoreSpec
+import grails.persistence.Entity
+import org.grails.orm.hibernate.cfg.HibernatePersistentEntity
+import org.grails.orm.hibernate.cfg.Mapping
+import org.hibernate.type.descriptor.java.BasicJavaType
+import org.hibernate.type.descriptor.jdbc.JdbcType
+import org.hibernate.usertype.BaseUserTypeSupport
+
+import java.util.function.BiConsumer
+
+class TypeNameProviderSpec extends HibernateGormDatastoreSpec {
+
+    void "Test - type not a class"() {
+        when:
+        def grailsDomainBinder = getGrailsDomainBinder()
+        def simpleName = "Book"
+        def fieldProperties = ["name": String]
+        def mappingProperties = ["name": "type: 'text'"]
+        def persistentEntity = createPersistentEntity(grailsDomainBinder, 
simpleName, fieldProperties, mappingProperties)
+        def property = persistentEntity.getPersistentProperties()[0]
+        Mapping mapping = new Mapping()
+        mapping.setUserTypes(["foo.Bar": persistentEntity.getJavaClass()])
+        def name = new TypeNameProvider().getTypeName(property, mapping)
+
+        then:
+        name == "text"
+
+    }
+
+    void "Test - type is a class"() {
+        when:
+        def grailsDomainBinder = getGrailsDomainBinder()
+        def simpleName = "Book"
+        def fieldProperties = ["name": String]
+        def mappingProperties = ["name": "type: String"]
+        def persistentEntity = createPersistentEntity(grailsDomainBinder, 
simpleName, fieldProperties, mappingProperties)
+        def property = persistentEntity.getPersistentProperties()[0]
+        Mapping mapping = new Mapping()
+        def name = new TypeNameProvider().getTypeName(property, mapping)
+
+        then:
+        name == "java.lang.String"
+
+    }
+
+    void "Test - type not included but in general mapping"() {
+        when:
+        def grailsDomainBinder = getGrailsDomainBinder()
+        def persistentEntity = 
getMappingContext().addPersistentEntity(Employee) as HibernatePersistentEntity
+        grailsDomainBinder.evaluateMapping(persistentEntity)
+        def property = persistentEntity.getPersistentProperties()[0]
+        Mapping mapping = new Mapping()
+        mapping.setUserTypes([(Salary): SalaryType])
+        def name = new TypeNameProvider().getTypeName(property, mapping)
+
+        then:
+        name == SalaryType.name
+
+    }
+
+}
+
+class Salary {
+    BigDecimal amount
+}
+
+class SalaryType extends  BaseUserTypeSupport<Salary> {
+    @Override
+    protected void resolve(BiConsumer<BasicJavaType<Salary>, JdbcType> 
resolutionConsumer) {
+    }
+}
+@Entity
+class Employee {
+    Salary salary
+}
+
+
diff --git 
a/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/AttachMethodSpec.groovy
 
b/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/AttachMethodSpec.groovy
index 0530fc6537..742d65b802 100644
--- 
a/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/AttachMethodSpec.groovy
+++ 
b/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/AttachMethodSpec.groovy
@@ -26,7 +26,7 @@ import 
org.apache.grails.data.testing.tck.base.GrailsDataTckSpec
  */
 class AttachMethodSpec extends GrailsDataTckSpec {
     void setupSpec() {
-        manager.domainClasses.add(Person)
+        manager.addAllDomainClasses([Person])
     }
 
     void "Test attach method"() {
diff --git 
a/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/CircularOneToManySpec.groovy
 
b/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/CircularOneToManySpec.groovy
index fac928f18b..953e783ef3 100644
--- 
a/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/CircularOneToManySpec.groovy
+++ 
b/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/CircularOneToManySpec.groovy
@@ -27,7 +27,7 @@ import 
org.apache.grails.data.testing.tck.base.GrailsDataTckSpec
 class CircularOneToManySpec extends GrailsDataTckSpec {
 
     void setupSpec() {
-        manager.domainClasses.add(Task)
+        manager.addAllDomainClasses([Task])
     }
 
     void "Test circular one-to-many"() {
diff --git 
a/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/CommonTypesPersistenceSpec.groovy
 
b/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/CommonTypesPersistenceSpec.groovy
index 34dcf1f08b..dd8e15cbbc 100644
--- 
a/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/CommonTypesPersistenceSpec.groovy
+++ 
b/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/CommonTypesPersistenceSpec.groovy
@@ -26,7 +26,7 @@ import 
org.apache.grails.data.testing.tck.base.GrailsDataTckSpec
  */
 class CommonTypesPersistenceSpec extends GrailsDataTckSpec {
     void setupSpec() {
-        manager.domainClasses.add(CommonTypes)
+        manager.addAllDomainClasses([CommonTypes])
     }
 
     def testPersistBasicTypes() {

Reply via email to