From adeaa1c173077bcd98e09d951356e3aecd998c45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Fri, 25 Feb 2022 15:09:00 +0100 Subject: [PATCH] HSEARCH-4492 Remove PojoGenericTypeModel and move its methods to PojoTypeModel --- .../impl/JavaBeanBootstrapIntrospector.java | 10 ----- ...ateOrmBasicDynamicMapPropertyMetadata.java | 6 +-- ...HibernateOrmBasicTypeMetadataProvider.java | 22 ++++----- .../HibernateOrmBootstrapIntrospector.java | 10 ----- .../HibernateOrmDynamicMapPropertyModel.java | 8 ++-- .../HibernateOrmDynamicMapRawTypeModel.java | 11 +++++ ...java => HibernateOrmTypeModelFactory.java} | 28 ++++++------ .../impl/DefaultIdentifierBindingContext.java | 6 +-- .../binding/impl/ValueBindingContextImpl.java | 6 +-- .../bridge/mapping/impl/BridgeResolver.java | 10 ++--- .../impl/BoundContainerExtractorPath.java | 10 ++--- .../impl/ContainerExtractorBinder.java | 16 +++---- .../search/mapper/pojo/logging/impl/Log.java | 3 +- .../building/impl/PojoIndexModelBinder.java | 3 +- .../impl/PojoIndexModelBinderImpl.java | 7 ++- .../PojoMappingConfigurationContextImpl.java | 4 +- .../spi/PojoMappingConfigurationContext.java | 4 +- .../spi/AbstractPojoHCAnnPropertyModel.java | 10 ++--- .../spi/AbstractPojoHCAnnRawTypeModel.java | 11 +++++ .../model/impl/PojoModelValueElement.java | 6 +-- .../impl/BoundPojoModelPathValueNode.java | 3 +- .../spi/AbstractPojoGenericTypeModel.java | 16 ++----- ...nericContextAwarePojoGenericTypeModel.java | 45 ++++++++++++------- .../GenericContextAwarePojoPropertyModel.java | 2 +- .../model/spi/PojoBootstrapIntrospector.java | 7 --- .../pojo/model/spi/PojoGenericTypeModel.java | 40 ----------------- .../pojo/model/spi/PojoPropertyModel.java | 2 +- .../mapper/pojo/model/spi/PojoTypeModel.java | 19 +++++++- .../spi/SyntheticPojoGenericTypeModel.java | 27 +++++------ .../impl/AndTypePatternMatcher.java | 4 +- .../impl/ArrayElementTypeMatcher.java | 4 +- ...ntExtractingTypePatternMatcherAdapter.java | 8 ++-- .../typepattern/impl/ExactRawTypeMatcher.java | 4 +- .../impl/ExtractingTypePatternMatcher.java | 6 +-- .../impl/NegatingTypePatternMatcher.java | 4 +- .../ParameterizedTypeArgumentMatcher.java | 4 +- .../typepattern/impl/RawSuperTypeMatcher.java | 4 +- .../typepattern/impl/TypePatternMatcher.java | 4 +- .../impl/TypePatternMatcherFactory.java | 5 +-- .../impl/PojoAssociationPathInverterTest.java | 19 ++++---- .../impl/TypePatternMatcherFactoryTest.java | 34 +++++++------- orm6/mapper/orm/ant-src-changes.patch | 16 +++---- 42 files changed, 219 insertions(+), 249 deletions(-) rename mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/{HibernateOrmGenericTypeModelFactory.java => HibernateOrmTypeModelFactory.java} (57%) delete mode 100644 mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/PojoGenericTypeModel.java diff --git a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/model/impl/JavaBeanBootstrapIntrospector.java b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/model/impl/JavaBeanBootstrapIntrospector.java index 6e3e23a4acc..378c6f79d32 100644 --- a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/model/impl/JavaBeanBootstrapIntrospector.java +++ b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/model/impl/JavaBeanBootstrapIntrospector.java @@ -21,7 +21,6 @@ import org.hibernate.search.mapper.pojo.model.hcann.spi.PojoHCannOrmGenericContextHelper; import org.hibernate.search.mapper.pojo.model.spi.GenericContextAwarePojoGenericTypeModel.RawTypeDeclaringContext; import org.hibernate.search.mapper.pojo.model.spi.PojoBootstrapIntrospector; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoRawTypeIdentifier; import org.hibernate.search.mapper.pojo.model.spi.PojoRawTypeModel; import org.hibernate.search.util.common.AssertionFailure; @@ -47,7 +46,6 @@ public static JavaBeanBootstrapIntrospector create(MethodHandles.Lookup lookup) private final ValueReadHandleFactory valueReadHandleFactory; private final PojoHCannOrmGenericContextHelper genericContextHelper; - private final RawTypeDeclaringContext missingRawTypeDeclaringContext; private final Map, PojoRawTypeModel> typeModelCache = new HashMap<>(); @@ -55,9 +53,6 @@ private JavaBeanBootstrapIntrospector(ValueReadHandleFactory valueReadHandleFact super( new JavaReflectionManager() ); this.valueReadHandleFactory = valueReadHandleFactory; this.genericContextHelper = new PojoHCannOrmGenericContextHelper( this ); - this.missingRawTypeDeclaringContext = new RawTypeDeclaringContext<>( - genericContextHelper, Object.class - ); } @Override @@ -78,11 +73,6 @@ public PojoRawTypeModel typeModel(String name) { throw log.namedTypesNotSupported( name ); } - @Override - public PojoGenericTypeModel genericTypeModel(Class clazz) { - return missingRawTypeDeclaringContext.createGenericTypeModel( clazz ); - } - @Override public ValueReadHandleFactory annotationValueReadHandleFactory() { return valueReadHandleFactory; diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBasicDynamicMapPropertyMetadata.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBasicDynamicMapPropertyMetadata.java index bc503e0b9b6..9ee3d8ae6de 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBasicDynamicMapPropertyMetadata.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBasicDynamicMapPropertyMetadata.java @@ -7,16 +7,16 @@ package org.hibernate.search.mapper.orm.model.impl; class HibernateOrmBasicDynamicMapPropertyMetadata { - private final HibernateOrmGenericTypeModelFactory typeModelFactory; + private final HibernateOrmTypeModelFactory typeModelFactory; - HibernateOrmBasicDynamicMapPropertyMetadata(HibernateOrmGenericTypeModelFactory typeModelFactory) { + HibernateOrmBasicDynamicMapPropertyMetadata(HibernateOrmTypeModelFactory typeModelFactory) { this.typeModelFactory = typeModelFactory; } /** * @return A factory of generic type models */ - HibernateOrmGenericTypeModelFactory getTypeModelFactory() { + HibernateOrmTypeModelFactory getTypeModelFactory() { return typeModelFactory; } diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBasicTypeMetadataProvider.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBasicTypeMetadataProvider.java index 14dfc36c0fb..77d7b8f9821 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBasicTypeMetadataProvider.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBasicTypeMetadataProvider.java @@ -139,7 +139,7 @@ private static void collectDynamicMapProperty(Builder metadataProviderBuilder, Map collectedProperties, Property property) { // This also recurses and collects embedded types - HibernateOrmGenericTypeModelFactory typeModelFactory = + HibernateOrmTypeModelFactory typeModelFactory = collectValue( metadataProviderBuilder, property.getValue() ); collectedProperties.put( property.getName(), @@ -147,19 +147,19 @@ private static void collectDynamicMapProperty(Builder metadataProviderBuilder, ); } - private static HibernateOrmGenericTypeModelFactory collectValue(Builder metadataProviderBuilder, Value value) { + private static HibernateOrmTypeModelFactory collectValue(Builder metadataProviderBuilder, Value value) { if ( value instanceof Component ) { return collectEmbedded( metadataProviderBuilder, (Component) value ); } else if ( value instanceof org.hibernate.mapping.Array ) { org.hibernate.mapping.Array array = (org.hibernate.mapping.Array) value; - return HibernateOrmGenericTypeModelFactory.array( + return HibernateOrmTypeModelFactory.array( collectValue( metadataProviderBuilder, array.getElement() ) ); } else if ( value instanceof org.hibernate.mapping.Map ) { org.hibernate.mapping.Map map = (org.hibernate.mapping.Map) value; - return HibernateOrmGenericTypeModelFactory.map( + return HibernateOrmTypeModelFactory.map( map.getCollectionType().getReturnedClass(), /* * Do not let ORM confuse you: getKey() doesn't return the value of the map key, @@ -172,30 +172,30 @@ else if ( value instanceof org.hibernate.mapping.Map ) { } else if ( value instanceof org.hibernate.mapping.Collection ) { org.hibernate.mapping.Collection collection = (org.hibernate.mapping.Collection) value; - return HibernateOrmGenericTypeModelFactory.collection( + return HibernateOrmTypeModelFactory.collection( collection.getCollectionType().getReturnedClass(), collectValue( metadataProviderBuilder, collection.getElement() ) ); } else if ( value instanceof org.hibernate.mapping.ToOne ) { org.hibernate.mapping.ToOne toOne = (org.hibernate.mapping.ToOne) value; - return HibernateOrmGenericTypeModelFactory.entityReference( + return HibernateOrmTypeModelFactory.entityReference( toOne.getType().getReturnedClass(), toOne.getReferencedEntityName() ); } else if ( value instanceof org.hibernate.mapping.OneToMany ) { org.hibernate.mapping.OneToMany oneToMany = (org.hibernate.mapping.OneToMany) value; - return HibernateOrmGenericTypeModelFactory.entityReference( + return HibernateOrmTypeModelFactory.entityReference( oneToMany.getType().getReturnedClass(), oneToMany.getReferencedEntityName() ); } else { // Basic type (mapped to a database column) - return HibernateOrmGenericTypeModelFactory.rawType( value.getType().getReturnedClass() ); + return HibernateOrmTypeModelFactory.rawType( value.getType().getReturnedClass() ); } } - private static HibernateOrmGenericTypeModelFactory collectEmbedded(Builder metadataProviderBuilder, Component component) { + private static HibernateOrmTypeModelFactory collectEmbedded(Builder metadataProviderBuilder, Component component) { if ( component.isDynamic() ) { String name = component.getRoleName(); // We don't care about duplicates, we assume they are all the same regarding the information we need @@ -206,7 +206,7 @@ private static HibernateOrmGenericTypeModelFactory collectEmbedded(Builder me null /* No ID */, component.getPropertyIterator() ); } - return HibernateOrmGenericTypeModelFactory.dynamicMap( name ); + return HibernateOrmTypeModelFactory.dynamicMap( name ); } else { Class javaClass = component.getComponentClass(); @@ -217,7 +217,7 @@ private static HibernateOrmGenericTypeModelFactory collectEmbedded(Builder me null /* No ID */, component.getPropertyIterator() ); } - return HibernateOrmGenericTypeModelFactory.rawType( javaClass ); + return HibernateOrmTypeModelFactory.rawType( javaClass ); } } diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBootstrapIntrospector.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBootstrapIntrospector.java index 29976c0499f..354280e92e3 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBootstrapIntrospector.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBootstrapIntrospector.java @@ -27,7 +27,6 @@ import org.hibernate.search.mapper.pojo.model.spi.AbstractPojoRawTypeModel; import org.hibernate.search.mapper.pojo.model.spi.GenericContextAwarePojoGenericTypeModel.RawTypeDeclaringContext; import org.hibernate.search.mapper.pojo.model.spi.PojoBootstrapIntrospector; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoRawTypeIdentifier; import org.hibernate.search.util.common.impl.ReflectionHelper; import org.hibernate.search.util.common.logging.impl.LoggerFactory; @@ -51,7 +50,6 @@ public static HibernateOrmBootstrapIntrospector create( private final HibernateOrmBasicTypeMetadataProvider basicTypeMetadataProvider; private final ValueReadHandleFactory valueReadHandleFactory; private final PojoHCannOrmGenericContextHelper genericContextHelper; - private final RawTypeDeclaringContext missingRawTypeDeclaringContext; /* * Note: the main purpose of these caches is not to improve performance, @@ -73,9 +71,6 @@ private HibernateOrmBootstrapIntrospector( this.basicTypeMetadataProvider = basicTypeMetadataProvider; this.valueReadHandleFactory = valueReadHandleFactory; this.genericContextHelper = new PojoHCannOrmGenericContextHelper( this ); - this.missingRawTypeDeclaringContext = new RawTypeDeclaringContext<>( - genericContextHelper, Object.class - ); } @Override @@ -112,11 +107,6 @@ public HibernateOrmClassRawTypeModel typeModel(Class clazz) { return (HibernateOrmClassRawTypeModel) classTypeModelCache.computeIfAbsent( clazz, this::createClassTypeModel ); } - @Override - public PojoGenericTypeModel genericTypeModel(Class clazz) { - return missingRawTypeDeclaringContext.createGenericTypeModel( clazz ); - } - @Override public ValueReadHandleFactory annotationValueReadHandleFactory() { return valueReadHandleFactory; diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmDynamicMapPropertyModel.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmDynamicMapPropertyModel.java index 3d612821412..8a0df38facc 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmDynamicMapPropertyModel.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmDynamicMapPropertyModel.java @@ -11,8 +11,8 @@ import java.util.stream.Stream; import org.hibernate.search.mapper.orm.logging.impl.Log; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoPropertyModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; import org.hibernate.search.util.common.logging.impl.LoggerFactory; import org.hibernate.search.util.common.reflect.spi.ValueReadHandle; @@ -27,7 +27,7 @@ class HibernateOrmDynamicMapPropertyModel implements PojoPropertyModel { private final HibernateOrmBasicDynamicMapPropertyMetadata ormPropertyMetadata; private ValueReadHandle handle; - private PojoGenericTypeModel typeModel; + private PojoTypeModel typeModel; HibernateOrmDynamicMapPropertyModel(HibernateOrmBootstrapIntrospector introspector, HibernateOrmDynamicMapRawTypeModel holderTypeModel, @@ -51,10 +51,10 @@ public Stream annotations() { @Override @SuppressWarnings("unchecked") // We will just trust ORM metadata on this one. - public PojoGenericTypeModel typeModel() { + public PojoTypeModel typeModel() { if ( typeModel == null ) { try { - typeModel = (PojoGenericTypeModel) ormPropertyMetadata.getTypeModelFactory().create( introspector ); + typeModel = (PojoTypeModel) ormPropertyMetadata.getTypeModelFactory().create( introspector ); } catch (RuntimeException e) { throw log.errorRetrievingPropertyTypeModel( name(), holderTypeModel, e.getMessage(), e ); diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmDynamicMapRawTypeModel.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmDynamicMapRawTypeModel.java index 6850b23ef03..963a1cdb92f 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmDynamicMapRawTypeModel.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmDynamicMapRawTypeModel.java @@ -8,6 +8,7 @@ import java.lang.annotation.Annotation; import java.util.Map; +import java.util.Optional; import java.util.stream.Stream; import org.hibernate.search.engine.mapper.model.spi.MappableTypeModel; @@ -56,6 +57,16 @@ public Stream> descendingSuperTypes() { return Stream.concat( getSuperType().descendingSuperTypes(), Stream.of( this ) ); } + @Override + public Optional> typeArgument(Class rawSuperType, int typeParameterIndex) { + return Optional.empty(); + } + + @Override + public Optional> arrayElementType() { + return Optional.empty(); + } + @Override public Stream annotations() { return Stream.empty(); diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmGenericTypeModelFactory.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmTypeModelFactory.java similarity index 57% rename from mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmGenericTypeModelFactory.java rename to mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmTypeModelFactory.java index 94e657f52ff..19647711135 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmGenericTypeModelFactory.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmTypeModelFactory.java @@ -9,55 +9,55 @@ import java.util.Collection; import java.util.Map; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoRawTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; import org.hibernate.search.mapper.pojo.model.spi.SyntheticPojoGenericTypeModel; -public interface HibernateOrmGenericTypeModelFactory { +public interface HibernateOrmTypeModelFactory { - PojoGenericTypeModel create(HibernateOrmBootstrapIntrospector introspector); + PojoTypeModel create(HibernateOrmBootstrapIntrospector introspector); @SuppressWarnings("unchecked") - static HibernateOrmGenericTypeModelFactory entityReference(Class javaClass, String entityName) { + static HibernateOrmTypeModelFactory entityReference(Class javaClass, String entityName) { if ( Map.class.equals( javaClass ) ) { - return (HibernateOrmGenericTypeModelFactory) dynamicMap( entityName ); + return (HibernateOrmTypeModelFactory) dynamicMap( entityName ); } else { return rawType( javaClass ); } } - static HibernateOrmGenericTypeModelFactory rawType(Class javaClass) { - return introspector -> introspector.genericTypeModel( javaClass ); + static HibernateOrmTypeModelFactory rawType(Class javaClass) { + return introspector -> introspector.typeModel( javaClass ); } // This cast is safe if the caller made sure that this name really points to a dynamic-map type @SuppressWarnings({ "unchecked", "rawtypes" }) - static HibernateOrmGenericTypeModelFactory dynamicMap(String name) { + static HibernateOrmTypeModelFactory dynamicMap(String name) { return introspector -> SyntheticPojoGenericTypeModel.opaqueType( (PojoRawTypeModel) introspector.typeModel( name ) ); } - static HibernateOrmGenericTypeModelFactory array(HibernateOrmGenericTypeModelFactory elementType) { + static HibernateOrmTypeModelFactory array(HibernateOrmTypeModelFactory elementType) { return introspector -> SyntheticPojoGenericTypeModel.array( introspector.typeModel( Object[].class ), elementType.create( introspector ) ); } - static > HibernateOrmGenericTypeModelFactory collection( - Class collectionType, HibernateOrmGenericTypeModelFactory elementType) { + static > HibernateOrmTypeModelFactory collection( + Class collectionType, HibernateOrmTypeModelFactory elementType) { return introspector -> SyntheticPojoGenericTypeModel.genericType( introspector.typeModel( collectionType ), elementType.create( introspector ) ); } - static > HibernateOrmGenericTypeModelFactory map( + static > HibernateOrmTypeModelFactory map( Class mapType, - HibernateOrmGenericTypeModelFactory keyType, - HibernateOrmGenericTypeModelFactory valueType) { + HibernateOrmTypeModelFactory keyType, + HibernateOrmTypeModelFactory valueType) { return introspector -> SyntheticPojoGenericTypeModel.genericType( introspector.typeModel( mapType ), keyType.create( introspector ), diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/binding/impl/DefaultIdentifierBindingContext.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/binding/impl/DefaultIdentifierBindingContext.java index 703dd178ee1..02c9d42f288 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/binding/impl/DefaultIdentifierBindingContext.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/binding/impl/DefaultIdentifierBindingContext.java @@ -21,8 +21,8 @@ import org.hibernate.search.mapper.pojo.model.PojoModelValue; import org.hibernate.search.mapper.pojo.model.impl.PojoModelValueElement; import org.hibernate.search.mapper.pojo.model.spi.PojoBootstrapIntrospector; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoRawTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; import org.hibernate.search.util.common.impl.AbstractCloser; import org.hibernate.search.util.common.impl.SuppressingCloser; import org.hibernate.search.util.common.logging.impl.LoggerFactory; @@ -35,7 +35,7 @@ public class DefaultIdentifierBindingContext extends AbstractBindingContext private final PojoBootstrapIntrospector introspector; private final Optional indexedEntityBindingContext; - private final PojoGenericTypeModel identifierTypeModel; + private final PojoTypeModel identifierTypeModel; private final PojoModelValue bridgedElement; private PartialBinding partialBinding; @@ -43,7 +43,7 @@ public class DefaultIdentifierBindingContext extends AbstractBindingContext public DefaultIdentifierBindingContext(BeanResolver beanResolver, PojoBootstrapIntrospector introspector, Optional indexedEntityBindingContext, - PojoGenericTypeModel valueTypeModel, Map params) { + PojoTypeModel valueTypeModel, Map params) { super( beanResolver, params ); this.introspector = introspector; this.indexedEntityBindingContext = indexedEntityBindingContext; diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/binding/impl/ValueBindingContextImpl.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/binding/impl/ValueBindingContextImpl.java index d44d158b755..a62d1cd825c 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/binding/impl/ValueBindingContextImpl.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/binding/impl/ValueBindingContextImpl.java @@ -29,8 +29,8 @@ import org.hibernate.search.mapper.pojo.model.PojoModelValue; import org.hibernate.search.mapper.pojo.model.impl.PojoModelValueElement; import org.hibernate.search.mapper.pojo.model.spi.PojoBootstrapIntrospector; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoRawTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; import org.hibernate.search.util.common.AssertionFailure; import org.hibernate.search.util.common.impl.AbstractCloser; import org.hibernate.search.util.common.impl.Closer; @@ -45,7 +45,7 @@ public class ValueBindingContextImpl extends AbstractBindingContext private final PojoBootstrapIntrospector introspector; - private final PojoGenericTypeModel valueTypeModel; + private final PojoTypeModel valueTypeModel; private final boolean multiValued; private final PojoModelValue bridgedElement; @@ -59,7 +59,7 @@ public class ValueBindingContextImpl extends AbstractBindingContext public ValueBindingContextImpl(BeanResolver beanResolver, PojoBootstrapIntrospector introspector, - PojoGenericTypeModel valueTypeModel, boolean multiValued, + PojoTypeModel valueTypeModel, boolean multiValued, IndexBindingContext indexBindingContext, IndexFieldTypeDefaultsProvider defaultsProvider, String relativeFieldName, FieldModelContributor contributor, diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/mapping/impl/BridgeResolver.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/mapping/impl/BridgeResolver.java index b9ebd564004..5f9491959a3 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/mapping/impl/BridgeResolver.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/mapping/impl/BridgeResolver.java @@ -82,8 +82,8 @@ import org.hibernate.search.mapper.pojo.bridge.mapping.programmatic.ValueBinder; import org.hibernate.search.mapper.pojo.logging.impl.Log; import org.hibernate.search.mapper.pojo.model.spi.PojoBootstrapIntrospector; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoRawTypeIdentifier; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; import org.hibernate.search.mapper.pojo.model.typepattern.impl.TypePatternMatcher; import org.hibernate.search.mapper.pojo.model.typepattern.impl.TypePatternMatcherFactory; import org.hibernate.search.util.common.logging.impl.LoggerFactory; @@ -109,7 +109,7 @@ private BridgeResolver(Builder builder) { Collections.reverse( typePatternValueBridgeMappings ); } - public IdentifierBinder resolveIdentifierBinderForType(PojoGenericTypeModel sourceType) { + public IdentifierBinder resolveIdentifierBinderForType(PojoTypeModel sourceType) { IdentifierBinder result = getBinderOrNull( sourceType, exactRawTypeIdentifierBridgeMappings, @@ -121,7 +121,7 @@ public IdentifierBinder resolveIdentifierBinderForType(PojoGenericTypeModel s return result; } - public ValueBinder resolveValueBinderForType(PojoGenericTypeModel sourceType) { + public ValueBinder resolveValueBinderForType(PojoTypeModel sourceType) { ValueBinder result = getBinderOrNull( sourceType, exactRawTypeValueBridgeMappings, @@ -133,7 +133,7 @@ public ValueBinder resolveValueBinderForType(PojoGenericTypeModel sourceType) return result; } - private static B getBinderOrNull(PojoGenericTypeModel sourceType, + private static B getBinderOrNull(PojoTypeModel sourceType, Map, B> exactRawTypeBridgeMappings, List> typePatternBinderMappings) { PojoRawTypeIdentifier rawType = sourceType.rawType().typeIdentifier(); @@ -158,7 +158,7 @@ private static final class TypePatternBinderMapping { this.binder = binder; } - B getBinderIfMatching(PojoGenericTypeModel typeModel) { + B getBinderIfMatching(PojoTypeModel typeModel) { if ( matcher.matches( typeModel ) ) { return binder; } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/extractor/impl/BoundContainerExtractorPath.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/extractor/impl/BoundContainerExtractorPath.java index 561ce84daf9..b542256a554 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/extractor/impl/BoundContainerExtractorPath.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/extractor/impl/BoundContainerExtractorPath.java @@ -7,7 +7,7 @@ package org.hibernate.search.mapper.pojo.extractor.impl; import org.hibernate.search.mapper.pojo.extractor.mapping.programmatic.ContainerExtractorPath; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; /** * A {@link ContainerExtractorPath} bound to a given source type. @@ -24,16 +24,16 @@ * @param The extracted value type */ public class BoundContainerExtractorPath { - public static BoundContainerExtractorPath noExtractors(PojoGenericTypeModel sourceType) { + public static BoundContainerExtractorPath noExtractors(PojoTypeModel sourceType) { return new BoundContainerExtractorPath<>( ContainerExtractorPath.noExtractors(), sourceType ); } private final ContainerExtractorPath extractorPath; - private final PojoGenericTypeModel extractedType; + private final PojoTypeModel extractedType; - BoundContainerExtractorPath(ContainerExtractorPath extractorPath, PojoGenericTypeModel extractedType) { + BoundContainerExtractorPath(ContainerExtractorPath extractorPath, PojoTypeModel extractedType) { this.extractorPath = extractorPath; this.extractedType = extractedType; } @@ -42,7 +42,7 @@ public ContainerExtractorPath getExtractorPath() { return extractorPath; } - public PojoGenericTypeModel getExtractedType() { + public PojoTypeModel getExtractedType() { return extractedType; } } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/extractor/impl/ContainerExtractorBinder.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/extractor/impl/ContainerExtractorBinder.java index 43f181c7710..11ff3ac5050 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/extractor/impl/ContainerExtractorBinder.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/extractor/impl/ContainerExtractorBinder.java @@ -22,7 +22,7 @@ import org.hibernate.search.mapper.pojo.extractor.spi.ContainerExtractorDefinition; import org.hibernate.search.mapper.pojo.extractor.spi.ContainerExtractorRegistry; import org.hibernate.search.mapper.pojo.logging.impl.Log; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; import org.hibernate.search.mapper.pojo.model.typepattern.impl.ExtractingTypePatternMatcher; import org.hibernate.search.mapper.pojo.model.typepattern.impl.TypePatternMatcherFactory; import org.hibernate.search.util.common.reflect.impl.GenericTypeContext; @@ -90,7 +90,7 @@ public ContainerExtractorBinder(BeanResolver beanResolver, * @return The resolved extractor path, or an empty optional if * one of the extractors in the path cannot be applied. */ - public Optional> tryBindPath(PojoGenericTypeModel sourceType, + public Optional> tryBindPath(PojoTypeModel sourceType, ContainerExtractorPath extractorPath) { ExtractorResolutionState state = new ExtractorResolutionState<>( sourceType ); if ( extractorPath.isDefault() ) { @@ -124,7 +124,7 @@ public ContainerExtractorBinder(BeanResolver beanResolver, * @throws SearchException if * one of the extractors in the path cannot be applied. */ - public BoundContainerExtractorPath bindPath(PojoGenericTypeModel sourceType, + public BoundContainerExtractorPath bindPath(PojoTypeModel sourceType, ContainerExtractorPath extractorPath) { ExtractorResolutionState state = new ExtractorResolutionState<>( sourceType ); if ( extractorPath.isDefault() ) { @@ -189,7 +189,7 @@ public ContainerExtractorHolder create(BoundContainerExtractorPath< } } - public boolean isDefaultExtractorPath(PojoGenericTypeModel sourceType, ContainerExtractorPath extractorPath) { + public boolean isDefaultExtractorPath(PojoTypeModel sourceType, ContainerExtractorPath extractorPath) { Optional> boundDefaultExtractorPathOptional = tryBindPath( sourceType, @@ -254,7 +254,7 @@ private static class SingleExtractorContributor implements ExtractorContributor @Override public boolean tryAppend(ExtractorResolutionState state) { - Optional> resultTypeOptional = + Optional> resultTypeOptional = typePatternMatcher.extract( state.extractedType ); if ( resultTypeOptional.isPresent() ) { state.append( extractorName, resultTypeOptional.get() ); @@ -296,13 +296,13 @@ public boolean tryAppend(ExtractorResolutionState state) { private static class ExtractorResolutionState { private final List extractorNames = new ArrayList<>(); - private PojoGenericTypeModel extractedType; + private PojoTypeModel extractedType; - ExtractorResolutionState(PojoGenericTypeModel sourceType) { + ExtractorResolutionState(PojoTypeModel sourceType) { this.extractedType = sourceType; } - void append(String extractorName, PojoGenericTypeModel extractedType) { + void append(String extractorName, PojoTypeModel extractedType) { extractorNames.add( extractorName ); this.extractedType = extractedType; } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/logging/impl/Log.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/logging/impl/Log.java index 800a53b212c..1cf8a86a0f5 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/logging/impl/Log.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/logging/impl/Log.java @@ -23,7 +23,6 @@ import org.hibernate.search.mapper.pojo.mapping.impl.PojoContainedTypeManager; import org.hibernate.search.mapper.pojo.mapping.impl.PojoIndexedTypeManager; import org.hibernate.search.mapper.pojo.model.path.PojoModelPathValueNode; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoRawTypeIdentifier; import org.hibernate.search.mapper.pojo.model.spi.PojoRawTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; @@ -216,7 +215,7 @@ SearchException cannotInferContainerExtractorClassTypePattern( SearchException invalidContainerExtractorForType( String extractorName, @FormatWith(ClassFormatter.class) Class extractorClass, - @FormatWith(PojoTypeModelFormatter.class) PojoGenericTypeModel extractedType); + @FormatWith(PojoTypeModelFormatter.class) PojoTypeModel extractedType); @LogMessage(level = Logger.Level.DEBUG) @Message(id = ID_OFFSET + 17, diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/mapping/building/impl/PojoIndexModelBinder.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/mapping/building/impl/PojoIndexModelBinder.java index 42044af5653..0bdb54eb1f8 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/mapping/building/impl/PojoIndexModelBinder.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/mapping/building/impl/PojoIndexModelBinder.java @@ -30,7 +30,6 @@ import org.hibernate.search.mapper.pojo.model.path.impl.BoundPojoModelPathPropertyNode; import org.hibernate.search.mapper.pojo.model.path.impl.BoundPojoModelPathTypeNode; import org.hibernate.search.mapper.pojo.model.path.impl.BoundPojoModelPathValueNode; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; /** @@ -51,7 +50,7 @@ public interface PojoIndexModelBinder { Optional> createEntityIdPropertyPath(PojoTypeModel type); BoundContainerExtractorPath bindExtractorPath( - PojoGenericTypeModel pojoGenericTypeModel, ContainerExtractorPath extractorPath); + PojoTypeModel pojoGenericTypeModel, ContainerExtractorPath extractorPath); ContainerExtractorHolder createExtractors( BoundContainerExtractorPath boundExtractorPath); diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/mapping/building/impl/PojoIndexModelBinderImpl.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/mapping/building/impl/PojoIndexModelBinderImpl.java index 2ee2884c499..1dea4d2292f 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/mapping/building/impl/PojoIndexModelBinderImpl.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/mapping/building/impl/PojoIndexModelBinderImpl.java @@ -43,7 +43,6 @@ import org.hibernate.search.mapper.pojo.model.path.impl.BoundPojoModelPathTypeNode; import org.hibernate.search.mapper.pojo.model.path.impl.BoundPojoModelPathValueNode; import org.hibernate.search.mapper.pojo.model.spi.PojoBootstrapIntrospector; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; @@ -80,7 +79,7 @@ public class PojoIndexModelBinderImpl implements PojoIndexModelBinder { @Override public BoundContainerExtractorPath bindExtractorPath( - PojoGenericTypeModel pojoGenericTypeModel, ContainerExtractorPath extractorPath) { + PojoTypeModel pojoGenericTypeModel, ContainerExtractorPath extractorPath) { return extractorBinder.bindPath( pojoGenericTypeModel, extractorPath ); } @@ -95,7 +94,7 @@ public BoundIdentifierBridge bindIdentifier( Optional indexedEntityBindingContext, BoundPojoModelPathPropertyNode modelPath, IdentifierBinder binder, Map params) { - PojoGenericTypeModel identifierTypeModel = modelPath.valueWithoutExtractors().getTypeModel(); + PojoTypeModel identifierTypeModel = modelPath.valueWithoutExtractors().getTypeModel(); IdentifierBinder defaultedBinder = binder; if ( binder == null ) { @@ -177,7 +176,7 @@ public

Optional> bindProperty(IndexBindingContext ind Integer decimalScale = typeAdditionalMetadataProvider.get( modelPath ).getDecimalScale(); IndexFieldTypeDefaultsProvider defaultsProvider = new IndexFieldTypeDefaultsProvider( decimalScale ); - PojoGenericTypeModel valueTypeModel = modelPath.getTypeModel(); + PojoTypeModel valueTypeModel = modelPath.getTypeModel(); ValueBinder defaultedBinder = binder; if ( binder == null ) { diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/mapping/impl/PojoMappingConfigurationContextImpl.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/mapping/impl/PojoMappingConfigurationContextImpl.java index 7c43822e114..62981adcd29 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/mapping/impl/PojoMappingConfigurationContextImpl.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/mapping/impl/PojoMappingConfigurationContextImpl.java @@ -12,7 +12,7 @@ import org.hibernate.search.mapper.pojo.extractor.impl.ContainerExtractorBinder; import org.hibernate.search.mapper.pojo.extractor.mapping.programmatic.ContainerExtractorPath; import org.hibernate.search.mapper.pojo.mapping.spi.PojoMappingConfigurationContext; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; public final class PojoMappingConfigurationContextImpl implements PojoMappingConfigurationContext { @@ -23,7 +23,7 @@ public PojoMappingConfigurationContextImpl(ContainerExtractorBinder extractorBin } @Override - public Optional> extractedValueType(PojoGenericTypeModel sourceType, + public Optional> extractedValueType(PojoTypeModel sourceType, ContainerExtractorPath extractorPath) { return extractorBinder.tryBindPath( sourceType, extractorPath ) .map( BoundContainerExtractorPath::getExtractedType ); diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/mapping/spi/PojoMappingConfigurationContext.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/mapping/spi/PojoMappingConfigurationContext.java index 022117dd8d1..821fb82188a 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/mapping/spi/PojoMappingConfigurationContext.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/mapping/spi/PojoMappingConfigurationContext.java @@ -9,7 +9,7 @@ import java.util.Optional; import org.hibernate.search.mapper.pojo.extractor.mapping.programmatic.ContainerExtractorPath; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; public interface PojoMappingConfigurationContext { @@ -19,7 +19,7 @@ public interface PojoMappingConfigurationContext { * @return The type of values extracted from the given source type with the given container extractor path, * or {@link Optional#empty()} if the path cannot be applied. */ - Optional> extractedValueType(PojoGenericTypeModel sourceType, + Optional> extractedValueType(PojoTypeModel sourceType, ContainerExtractorPath extractorPath); } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/hcann/spi/AbstractPojoHCAnnPropertyModel.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/hcann/spi/AbstractPojoHCAnnPropertyModel.java index f921041f483..80ff0b3abeb 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/hcann/spi/AbstractPojoHCAnnPropertyModel.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/hcann/spi/AbstractPojoHCAnnPropertyModel.java @@ -17,8 +17,8 @@ import org.hibernate.annotations.common.reflection.XProperty; import org.hibernate.search.mapper.pojo.logging.impl.Log; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoPropertyModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; import org.hibernate.search.util.common.AssertionFailure; import org.hibernate.search.util.common.impl.Contracts; import org.hibernate.search.util.common.logging.impl.LoggerFactory; @@ -42,7 +42,7 @@ public abstract class AbstractPojoHCAnnPropertyModel members; private ValueReadHandle handleCache; - private PojoGenericTypeModel typeModelCache; + private PojoTypeModel typeModelCache; private Member memberCache; public AbstractPojoHCAnnPropertyModel(I introspector, AbstractPojoHCAnnRawTypeModel holderTypeModel, @@ -71,11 +71,11 @@ public final Stream annotations() { * match the actual type for this property. */ @SuppressWarnings( "unchecked" ) - public final PojoGenericTypeModel typeModel() { + public final PojoTypeModel typeModel() { if ( typeModelCache == null ) { try { - typeModelCache = (PojoGenericTypeModel) holderTypeModel.rawTypeDeclaringContext - .createGenericTypeModel( getterGenericReturnType() ); + typeModelCache = (PojoTypeModel) holderTypeModel.rawTypeDeclaringContext + .propertyType( getterGenericReturnType() ); } catch (RuntimeException e) { throw log.errorRetrievingPropertyTypeModel( name(), holderTypeModel, e ); diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/hcann/spi/AbstractPojoHCAnnRawTypeModel.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/hcann/spi/AbstractPojoHCAnnRawTypeModel.java index a7413f3c0fb..7d825063594 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/hcann/spi/AbstractPojoHCAnnRawTypeModel.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/hcann/spi/AbstractPojoHCAnnRawTypeModel.java @@ -10,6 +10,7 @@ import java.lang.reflect.Member; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -48,6 +49,16 @@ public final boolean isSubTypeOf(MappableTypeModel other) { && ( (AbstractPojoHCAnnRawTypeModel) other ).xClass.isAssignableFrom( xClass ); } + @Override + public Optional> typeArgument(Class rawSuperType, int typeParameterIndex) { + return rawTypeDeclaringContext.typeArgument( rawSuperType, typeParameterIndex ); + } + + @Override + public Optional> arrayElementType() { + return rawTypeDeclaringContext.arrayElementType(); + } + @Override public Stream annotations() { return introspector.annotations( xClass ); diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/impl/PojoModelValueElement.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/impl/PojoModelValueElement.java index 1365d3a917f..849b79ebabf 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/impl/PojoModelValueElement.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/impl/PojoModelValueElement.java @@ -8,7 +8,7 @@ import org.hibernate.search.mapper.pojo.model.PojoModelValue; import org.hibernate.search.mapper.pojo.model.spi.PojoBootstrapIntrospector; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; /** * @param The type used as a root element. @@ -16,10 +16,10 @@ public class PojoModelValueElement implements PojoModelValue { private final PojoBootstrapIntrospector introspector; - private final PojoGenericTypeModel typeModel; + private final PojoTypeModel typeModel; public PojoModelValueElement(PojoBootstrapIntrospector introspector, - PojoGenericTypeModel typeModel) { + PojoTypeModel typeModel) { this.introspector = introspector; this.typeModel = typeModel; } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/path/impl/BoundPojoModelPathValueNode.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/path/impl/BoundPojoModelPathValueNode.java index 60a2eabf44d..eb107977a75 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/path/impl/BoundPojoModelPathValueNode.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/path/impl/BoundPojoModelPathValueNode.java @@ -9,7 +9,6 @@ import org.hibernate.search.mapper.pojo.extractor.impl.BoundContainerExtractorPath; import org.hibernate.search.mapper.pojo.extractor.mapping.programmatic.ContainerExtractorPath; import org.hibernate.search.mapper.pojo.model.path.PojoModelPath; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.path.PojoModelPathValueNode; import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; @@ -62,7 +61,7 @@ public BoundPojoModelPathOriginalTypeNode type() { return elementTypePathNode; } - public PojoGenericTypeModel getTypeModel() { + public PojoTypeModel getTypeModel() { return boundExtractorPath.getExtractedType(); } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/AbstractPojoGenericTypeModel.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/AbstractPojoGenericTypeModel.java index 9047897b2da..ccec4d8619b 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/AbstractPojoGenericTypeModel.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/AbstractPojoGenericTypeModel.java @@ -6,12 +6,11 @@ */ package org.hibernate.search.mapper.pojo.model.spi; -import java.util.Optional; - /** - * An abstract base for implementations of {@link PojoGenericTypeModel}. + * An abstract base for implementations of a {@link PojoTypeModel} + * representing a type with generic type parameters. */ -public abstract class AbstractPojoGenericTypeModel implements PojoGenericTypeModel { +public abstract class AbstractPojoGenericTypeModel implements PojoTypeModel { private final PojoRawTypeModel rawTypeModel; @@ -34,13 +33,4 @@ public PojoPropertyModel property(String propertyName) { return rawTypeModel.property( propertyName ); } - @Override - public Optional> typeArgument(Class rawSuperType, int typeParameterIndex) { - return Optional.empty(); - } - - @Override - public Optional> arrayElementType() { - return Optional.empty(); - } } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/GenericContextAwarePojoGenericTypeModel.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/GenericContextAwarePojoGenericTypeModel.java index 575be67c999..87db502f417 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/GenericContextAwarePojoGenericTypeModel.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/GenericContextAwarePojoGenericTypeModel.java @@ -14,7 +14,7 @@ import org.hibernate.search.util.common.reflect.impl.GenericTypeContext; /** - * An implementation of {@link PojoGenericTypeModel} that takes advantage of the context + * An implementation of {@link PojoTypeModel} that takes advantage of the context * in which a given property appears to derive more precise type information. *

* Instances wrap a {@link PojoRawTypeModel}, and propagate generics information to properties @@ -45,7 +45,21 @@ */ public final class GenericContextAwarePojoGenericTypeModel extends AbstractPojoGenericTypeModel - implements PojoGenericTypeModel { + implements PojoTypeModel { + + private static Optional> typeArgument(Helper helper, + GenericTypeContext selfTypeContext, Class rawSuperType, int typeParameterIndex) { + return selfTypeContext.resolveTypeArgument( rawSuperType, typeParameterIndex ) + .map( type -> new GenericContextAwarePojoGenericTypeModel<>( helper, + new GenericTypeContext( selfTypeContext.declaringContext(), type ) ) ); + } + + private static Optional> arrayElementType(Helper helper, + GenericTypeContext selfTypeContext) { + return selfTypeContext.resolveArrayElementType() + .map( type -> new GenericContextAwarePojoGenericTypeModel<>( helper, + new GenericTypeContext( selfTypeContext.declaringContext(), type ) ) ); + } private final Helper helper; private final GenericTypeContext genericTypeContext; @@ -71,9 +85,14 @@ public RawTypeDeclaringContext(Helper helper, Class rawType) { this.genericTypeContext = new GenericTypeContext( rawType ); } - @SuppressWarnings( "unchecked" ) // The cast is safe by contract, see the called method - public PojoGenericTypeModel createGenericTypeModel(Class declaredType) { - return (PojoGenericTypeModel) createGenericTypeModel( (Type) declaredType ); + public Optional> typeArgument(Class rawSuperType, int typeParameterIndex) { + return GenericContextAwarePojoGenericTypeModel + .typeArgument( helper, genericTypeContext, rawSuperType, typeParameterIndex ); + } + + public Optional> arrayElementType() { + return GenericContextAwarePojoGenericTypeModel + .arrayElementType( helper, genericTypeContext ); } /** @@ -85,7 +104,7 @@ public PojoGenericTypeModel createGenericTypeModel(Class declaredType) * If {@code declaredType} is {@code List}, it will be {@code PojoGenericTypeModel>}, * and so on. */ - public PojoGenericTypeModel createGenericTypeModel(Type declaredType) { + public PojoTypeModel propertyType(Type declaredType) { /* * The declaring type, even raw, could extend parameterized types in which the given "type" was declared. * Thus we need the declaring context even for property types on raw types, @@ -121,19 +140,13 @@ public Optional> castTo(Class target) { } @Override - public Optional> typeArgument(Class rawSuperType, int typeParameterIndex) { - return genericTypeContext.resolveTypeArgument( rawSuperType, typeParameterIndex ) - .map( type -> new GenericContextAwarePojoGenericTypeModel<>( - helper, new GenericTypeContext( genericTypeContext.declaringContext(), type ) - ) ); + public Optional> typeArgument(Class rawSuperType, int typeParameterIndex) { + return typeArgument( helper, genericTypeContext, rawSuperType, typeParameterIndex ); } @Override - public Optional> arrayElementType() { - return genericTypeContext.resolveArrayElementType() - .map( type -> new GenericContextAwarePojoGenericTypeModel<>( - helper, new GenericTypeContext( genericTypeContext.declaringContext(), type ) - ) ); + public Optional> arrayElementType() { + return arrayElementType( helper, genericTypeContext ); } private PojoPropertyModel wrapProperty(PojoPropertyModel rawPropertyModel) { diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/GenericContextAwarePojoPropertyModel.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/GenericContextAwarePojoPropertyModel.java index e8b87ec09de..da1d406bb33 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/GenericContextAwarePojoPropertyModel.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/GenericContextAwarePojoPropertyModel.java @@ -34,7 +34,7 @@ public Stream annotations() { } @Override - public PojoGenericTypeModel typeModel() { + public PojoTypeModel typeModel() { return genericPropertyTypeModel; } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/PojoBootstrapIntrospector.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/PojoBootstrapIntrospector.java index c1841b28aee..c98ad5243c6 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/PojoBootstrapIntrospector.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/PojoBootstrapIntrospector.java @@ -26,13 +26,6 @@ public interface PojoBootstrapIntrospector { */ PojoRawTypeModel typeModel(String name); - /** - * @param clazz The Java class representing the raw version of the type - * @param The type - * @return A type model for the given type. - */ - PojoGenericTypeModel genericTypeModel(Class clazz); - /** * @return A {@link ValueReadHandleFactory} for reading annotation attributes. */ diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/PojoGenericTypeModel.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/PojoGenericTypeModel.java deleted file mode 100644 index a21492505ac..00000000000 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/PojoGenericTypeModel.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Hibernate Search, full-text search for your domain model - * - * License: GNU Lesser General Public License (LGPL), version 2.1 or later - * See the lgpl.txt file in the root directory or . - */ -package org.hibernate.search.mapper.pojo.model.spi; - -import java.util.Optional; - -/** - * A {@link PojoTypeModel} representing a parameterized type, - * where generic type arguments are known. - *

- * This type model offers additional reflection capabilities, - * such as the ability to retrieve the type argument for a given generic supertype. - * - * @see GenericContextAwarePojoGenericTypeModel the default implementation - * - * @param The type represented by this model - */ -public interface PojoGenericTypeModel extends PojoTypeModel { - - /** - * @param rawSuperType The supertype to resolve type parameters for - * @param typeParameterIndex The index of the type parameter to resolve - * @return The model for the type argument for the type parameter defined in {@code rawSuperType} - * at index {@code typeParameterIndex}, or an empty optional if the current type - * does not extend {@code rawSuperType}. - * Implementations may decide to return a model of the raw type argument, or to retain generics information. - */ - Optional> typeArgument(Class rawSuperType, int typeParameterIndex); - - /** - * @return The model for the array element type, or an empty optional if the current type - * is not an array type. - * Implementations may decide to return a model of the raw array element type, or to retain generics information. - */ - Optional> arrayElementType(); -} diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/PojoPropertyModel.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/PojoPropertyModel.java index daaef0dc015..37aa3f40bfc 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/PojoPropertyModel.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/PojoPropertyModel.java @@ -21,7 +21,7 @@ public interface PojoPropertyModel { * @return A model of this property's type. Implementations may decide to implement their own, * but could also simply use {@link GenericContextAwarePojoGenericTypeModel}. */ - PojoGenericTypeModel typeModel(); + PojoTypeModel typeModel(); ValueReadHandle handle(); diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/PojoTypeModel.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/PojoTypeModel.java index 6eabbc87e48..1db55cf6fbd 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/PojoTypeModel.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/PojoTypeModel.java @@ -13,7 +13,7 @@ * its name, ... *

* Most of the time, type models represent a Java class, - * either {@link PojoRawTypeModel raw} or {@link PojoGenericTypeModel parameterized}. + * either {@link PojoRawTypeModel raw} or {@link GenericContextAwarePojoGenericTypeModel parameterized}. * However, it is also possible that a given type model * represents a subset of all instances of a given Java class, * which all follow a common convention regarding their structure. @@ -48,4 +48,21 @@ public interface PojoTypeModel { */ Optional> castTo(Class target); + /** + * @param rawSuperType The supertype to resolve type parameters for + * @param typeParameterIndex The index of the type parameter to resolve + * @return The model for the type argument for the type parameter defined in {@code rawSuperType} + * at index {@code typeParameterIndex}, or an empty optional if the current type + * does not extend {@code rawSuperType}. + * Implementations may decide to return a model of the raw type argument, or to retain generics information. + */ + Optional> typeArgument(Class rawSuperType, int typeParameterIndex); + + /** + * @return The model for the array element type, or an empty optional if the current type + * is not an array type. + * Implementations may decide to return a model of the raw array element type, or to retain generics information. + */ + Optional> arrayElementType(); + } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/SyntheticPojoGenericTypeModel.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/SyntheticPojoGenericTypeModel.java index cb5f44ac120..6dbee7fa44e 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/SyntheticPojoGenericTypeModel.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/spi/SyntheticPojoGenericTypeModel.java @@ -13,33 +13,34 @@ import org.hibernate.search.util.common.impl.CollectionHelper; /** - * An abstract base for implementations of {@link PojoGenericTypeModel}. + * A synthetic implementation of {@link PojoTypeModel}, + * i.e. one that is not bound to an actual Java type, but simulates one. */ public final class SyntheticPojoGenericTypeModel extends AbstractPojoGenericTypeModel { - public static PojoGenericTypeModel array(PojoRawTypeModel rawTypeModel, - PojoGenericTypeModel elementType) { + public static PojoTypeModel array(PojoRawTypeModel rawTypeModel, + PojoTypeModel elementType) { return new SyntheticPojoGenericTypeModel<>( rawTypeModel, elementType, Collections.emptyList() ); } - public static PojoGenericTypeModel genericType(PojoRawTypeModel rawTypeModel, - PojoGenericTypeModel firstTypeArgument, PojoGenericTypeModel ... otherTypeArguments) { + public static PojoTypeModel genericType(PojoRawTypeModel rawTypeModel, + PojoTypeModel firstTypeArgument, PojoTypeModel ... otherTypeArguments) { return new SyntheticPojoGenericTypeModel<>( rawTypeModel, null, CollectionHelper.asList( firstTypeArgument, otherTypeArguments ) ); } // For types that should not report implementing an interface, even though they do // Example: dynamic Map types, that should not be treated as maps when it comes to container extractors. - public static PojoGenericTypeModel opaqueType(PojoRawTypeModel rawTypeModel) { + public static PojoTypeModel opaqueType(PojoRawTypeModel rawTypeModel) { return new SyntheticPojoGenericTypeModel<>( rawTypeModel, null, Collections.emptyList() ); } - private final PojoGenericTypeModel arrayElementType; - private final List> genericTypeArguments; + private final PojoTypeModel arrayElementType; + private final List> genericTypeArguments; private SyntheticPojoGenericTypeModel(PojoRawTypeModel rawTypeModel, - PojoGenericTypeModel arrayElementType, - List> genericTypeArguments) { + PojoTypeModel arrayElementType, + List> genericTypeArguments) { super( rawTypeModel ); this.arrayElementType = arrayElementType; this.genericTypeArguments = genericTypeArguments; @@ -59,7 +60,7 @@ public String name() { builder.append( rawType().name() ); builder.append( '<' ); boolean first = true; - for ( PojoGenericTypeModel genericTypeArgument : genericTypeArguments ) { + for ( PojoTypeModel genericTypeArgument : genericTypeArguments ) { if ( first ) { first = false; } @@ -79,12 +80,12 @@ public Optional> castTo(Class target) { } @Override - public Optional> arrayElementType() { + public Optional> arrayElementType() { return Optional.ofNullable( arrayElementType ); } @Override - public Optional> typeArgument(Class rawSuperType, + public Optional> typeArgument(Class rawSuperType, int typeParameterIndex) { if ( genericTypeArguments.isEmpty() ) { // Raw type diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/AndTypePatternMatcher.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/AndTypePatternMatcher.java index 160eeb98651..364bfec606a 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/AndTypePatternMatcher.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/AndTypePatternMatcher.java @@ -6,7 +6,7 @@ */ package org.hibernate.search.mapper.pojo.model.typepattern.impl; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; class AndTypePatternMatcher implements TypePatternMatcher { private final TypePatternMatcher left; @@ -23,7 +23,7 @@ public String toString() { } @Override - public boolean matches(PojoGenericTypeModel typeToInspect) { + public boolean matches(PojoTypeModel typeToInspect) { return left.matches( typeToInspect ) && right.matches( typeToInspect ); } } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ArrayElementTypeMatcher.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ArrayElementTypeMatcher.java index c442a29bc87..23b4c66021c 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ArrayElementTypeMatcher.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ArrayElementTypeMatcher.java @@ -8,7 +8,7 @@ import java.util.Optional; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; class ArrayElementTypeMatcher implements ExtractingTypePatternMatcher { @Override @@ -17,7 +17,7 @@ public String toString() { } @Override - public Optional> extract(PojoGenericTypeModel typeToInspect) { + public Optional> extract(PojoTypeModel typeToInspect) { return typeToInspect.arrayElementType(); } } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ConstantExtractingTypePatternMatcherAdapter.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ConstantExtractingTypePatternMatcherAdapter.java index f46c92c1720..8371abd69d9 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ConstantExtractingTypePatternMatcherAdapter.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ConstantExtractingTypePatternMatcherAdapter.java @@ -8,13 +8,13 @@ import java.util.Optional; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; class ConstantExtractingTypePatternMatcherAdapter implements ExtractingTypePatternMatcher { private final TypePatternMatcher delegate; - private final PojoGenericTypeModel resultType; + private final PojoTypeModel resultType; - ConstantExtractingTypePatternMatcherAdapter(TypePatternMatcher delegate, PojoGenericTypeModel resultType) { + ConstantExtractingTypePatternMatcherAdapter(TypePatternMatcher delegate, PojoTypeModel resultType) { this.delegate = delegate; this.resultType = resultType; } @@ -25,7 +25,7 @@ public String toString() { } @Override - public Optional> extract(PojoGenericTypeModel typeToInspect) { + public Optional> extract(PojoTypeModel typeToInspect) { if ( delegate.matches( typeToInspect ) ) { return Optional.of( resultType ); } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ExactRawTypeMatcher.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ExactRawTypeMatcher.java index 662915fc559..41f3a56ba9d 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ExactRawTypeMatcher.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ExactRawTypeMatcher.java @@ -6,8 +6,8 @@ */ package org.hibernate.search.mapper.pojo.model.typepattern.impl; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoRawTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; class ExactRawTypeMatcher implements TypePatternMatcher { private final PojoRawTypeModel exactTypeToMatch; @@ -22,7 +22,7 @@ public String toString() { } @Override - public boolean matches(PojoGenericTypeModel typeToInspect) { + public boolean matches(PojoTypeModel typeToInspect) { PojoRawTypeModel typeToMatchRawType = typeToInspect.rawType(); return typeToInspect.rawType().isSubTypeOf( exactTypeToMatch ) && exactTypeToMatch.isSubTypeOf( typeToMatchRawType ); diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ExtractingTypePatternMatcher.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ExtractingTypePatternMatcher.java index ffcc6fa5f48..5e21b576299 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ExtractingTypePatternMatcher.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ExtractingTypePatternMatcher.java @@ -8,7 +8,7 @@ import java.util.Optional; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; /** * A pattern-matching implementation for generic types that also extracts a type from matching types. @@ -20,7 +20,7 @@ public interface ExtractingTypePatternMatcher extends TypePatternMatcher { @Override - default boolean matches(PojoGenericTypeModel typeToInspect) { + default boolean matches(PojoTypeModel typeToInspect) { return extract( typeToInspect ).isPresent(); } @@ -31,6 +31,6 @@ default boolean matches(PojoGenericTypeModel typeToInspect) { * @param typeToInspect A type that may, or may not, match the pattern. * @return The extracted type if there was a match, or an empty {@link Optional} otherwise. */ - Optional> extract(PojoGenericTypeModel typeToInspect); + Optional> extract(PojoTypeModel typeToInspect); } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/NegatingTypePatternMatcher.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/NegatingTypePatternMatcher.java index 1cfc0237f4a..f9adbb912d9 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/NegatingTypePatternMatcher.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/NegatingTypePatternMatcher.java @@ -6,7 +6,7 @@ */ package org.hibernate.search.mapper.pojo.model.typepattern.impl; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; class NegatingTypePatternMatcher implements TypePatternMatcher { private final TypePatternMatcher delegate; @@ -21,7 +21,7 @@ public String toString() { } @Override - public boolean matches(PojoGenericTypeModel typeToInspect) { + public boolean matches(PojoTypeModel typeToInspect) { return !delegate.matches( typeToInspect ); } } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ParameterizedTypeArgumentMatcher.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ParameterizedTypeArgumentMatcher.java index 5301984ac0f..51ec059194c 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ParameterizedTypeArgumentMatcher.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/ParameterizedTypeArgumentMatcher.java @@ -9,7 +9,7 @@ import java.lang.reflect.TypeVariable; import java.util.Optional; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; class ParameterizedTypeArgumentMatcher implements ExtractingTypePatternMatcher { private final Class matchedRawType; @@ -42,7 +42,7 @@ public String toString() { @Override - public Optional> extract(PojoGenericTypeModel typeToInspect) { + public Optional> extract(PojoTypeModel typeToInspect) { return typeToInspect.typeArgument( matchedRawType, resultTypeParameterIndex ); } } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/RawSuperTypeMatcher.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/RawSuperTypeMatcher.java index b4ba3111888..022e30a21d7 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/RawSuperTypeMatcher.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/RawSuperTypeMatcher.java @@ -6,8 +6,8 @@ */ package org.hibernate.search.mapper.pojo.model.typepattern.impl; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoRawTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; class RawSuperTypeMatcher implements TypePatternMatcher { private final PojoRawTypeModel matchedRawType; @@ -22,7 +22,7 @@ public String toString() { } @Override - public boolean matches(PojoGenericTypeModel typeToInspect) { + public boolean matches(PojoTypeModel typeToInspect) { return typeToInspect.rawType().isSubTypeOf( matchedRawType ); } } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/TypePatternMatcher.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/TypePatternMatcher.java index c7495e60565..ebfa177658a 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/TypePatternMatcher.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/TypePatternMatcher.java @@ -6,7 +6,7 @@ */ package org.hibernate.search.mapper.pojo.model.typepattern.impl; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; /** * A pattern-matching implementation for generic types. @@ -23,7 +23,7 @@ public interface TypePatternMatcher { * @param typeToInspect A type that may, or may not, match the pattern. * @return {@code true} in the event of a match, {@code false} otherwise. */ - boolean matches(PojoGenericTypeModel typeToInspect); + boolean matches(PojoTypeModel typeToInspect); default TypePatternMatcher negate() { return new NegatingTypePatternMatcher( this ); diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/TypePatternMatcherFactory.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/TypePatternMatcherFactory.java index be728f50b1c..748c7f4991a 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/TypePatternMatcherFactory.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/TypePatternMatcherFactory.java @@ -13,7 +13,6 @@ import java.lang.reflect.WildcardType; import org.hibernate.search.mapper.pojo.model.spi.PojoBootstrapIntrospector; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoRawTypeModel; import org.hibernate.search.util.common.AssertionFailure; @@ -23,7 +22,7 @@ public class TypePatternMatcherFactory { /** * @param introspector An introspector to use for reflection, - * mainly for {@link PojoBootstrapIntrospector#genericTypeModel(Class)} + * mainly for {@link PojoBootstrapIntrospector#typeModel(Class)}. */ public TypePatternMatcherFactory(PojoBootstrapIntrospector introspector) { this.introspector = introspector; @@ -99,7 +98,7 @@ private ExtractingTypePatternMatcher createExtractingClassTypeMatcher(Class t ); } PojoRawTypeModel typePatternModel = introspector.typeModel( typePattern ); - PojoGenericTypeModel typeToExtractModel = introspector.genericTypeModel( (Class) typeToExtract ); + PojoRawTypeModel typeToExtractModel = introspector.typeModel( (Class) typeToExtract ); return new ConstantExtractingTypePatternMatcherAdapter( new RawSuperTypeMatcher( typePatternModel ), typeToExtractModel diff --git a/mapper/pojo-base/src/test/java/org/hibernate/search/mapper/pojo/automaticindexing/building/impl/PojoAssociationPathInverterTest.java b/mapper/pojo-base/src/test/java/org/hibernate/search/mapper/pojo/automaticindexing/building/impl/PojoAssociationPathInverterTest.java index 53853f9df79..94dc5f0b17d 100644 --- a/mapper/pojo-base/src/test/java/org/hibernate/search/mapper/pojo/automaticindexing/building/impl/PojoAssociationPathInverterTest.java +++ b/mapper/pojo-base/src/test/java/org/hibernate/search/mapper/pojo/automaticindexing/building/impl/PojoAssociationPathInverterTest.java @@ -24,7 +24,6 @@ import org.hibernate.search.mapper.pojo.model.additionalmetadata.impl.PojoValueAdditionalMetadata; import org.hibernate.search.mapper.pojo.model.path.PojoModelPath; import org.hibernate.search.mapper.pojo.model.path.impl.BoundPojoModelPathValueNode; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoPropertyModel; import org.hibernate.search.mapper.pojo.model.spi.PojoRawTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; @@ -71,8 +70,8 @@ public void detectInfiniteRecursion() { when( originalSideEntityTypeMock.rawType() ) .thenReturn( (PojoRawTypeModel) originalSideEntityTypeMock ); - PojoGenericTypeModel originalSidePropertyTypeMock = - mock( PojoGenericTypeModel.class, "originalSidePropertyTypeMock" ); + PojoTypeModel originalSidePropertyTypeMock = + mock( PojoTypeModel.class, "originalSidePropertyTypeMock" ); setupPropertyStub( originalSideEntityTypeMock, originalSidePropertyName, originalSidePropertyTypeMock ); @@ -111,16 +110,16 @@ public void detectInfiniteRecursion() { when( inverseSideEntityTypeMock.name() ) .thenReturn( "inverseSideEntityTypeMock" ); - PojoGenericTypeModel inverseSideProperty1TypeMock = - mock( PojoGenericTypeModel.class, "inverseSideProperty1TypeMock" ); + PojoTypeModel inverseSideProperty1TypeMock = + mock( PojoTypeModel.class, "inverseSideProperty1TypeMock" ); setupPropertyStub( inverseSideEntityTypeMock, inverseSideProperty1Name, inverseSideProperty1TypeMock ); when( inverseSideProperty1TypeMock.rawType() ) .thenReturn( (PojoRawTypeModel) inverseSideEmbeddableType1Mock ); - PojoGenericTypeModel inverseSideProperty2TypeMock = - mock( PojoGenericTypeModel.class, "inverseSideProperty2TypeMock" ); + PojoTypeModel inverseSideProperty2TypeMock = + mock( PojoTypeModel.class, "inverseSideProperty2TypeMock" ); setupPropertyStub( inverseSideProperty1TypeMock, inverseSideProperty2Name, inverseSideProperty2TypeMock ); @@ -155,7 +154,7 @@ public void detectInfiniteRecursion() { // Let's not complicate things any further: assume that all extractor paths are noExtractors() paths when( extractorBinderMock.bindPath( any(), Mockito.eq( ContainerExtractorPath.noExtractors() ) ) ) .thenAnswer( invocationOnMock -> { - PojoGenericTypeModel sourceType = invocationOnMock.getArgument( 0 ); + PojoTypeModel sourceType = invocationOnMock.getArgument( 0 ); return BoundContainerExtractorPath.noExtractors( sourceType ); } ); @@ -180,13 +179,13 @@ public void detectInfiniteRecursion() { } private void setupPropertyStub(PojoTypeModel holdingTypeMock, String propertyName, - PojoGenericTypeModel propertyTypeMock) { + PojoTypeModel propertyTypeMock) { PojoPropertyModel propertyModelMock = mock( PojoPropertyModel.class, propertyName + "ModelMock" ); when( holdingTypeMock.property( propertyName ) ) .thenReturn( (PojoPropertyModel) propertyModelMock ); when( propertyModelMock.name() ).thenReturn( propertyName ); when( propertyModelMock.typeModel() ) - .thenReturn( (PojoGenericTypeModel) propertyTypeMock ); + .thenReturn( (PojoTypeModel) propertyTypeMock ); } private void setupSingletonEmbeddedPropertiesAdditionalMetadataStub(PojoTypeAdditionalMetadata typeAdditionalMetadata, String propertyName) { diff --git a/mapper/pojo-base/src/test/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/TypePatternMatcherFactoryTest.java b/mapper/pojo-base/src/test/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/TypePatternMatcherFactoryTest.java index 8f733b20442..614335c92a5 100644 --- a/mapper/pojo-base/src/test/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/TypePatternMatcherFactoryTest.java +++ b/mapper/pojo-base/src/test/java/org/hibernate/search/mapper/pojo/model/typepattern/impl/TypePatternMatcherFactoryTest.java @@ -18,8 +18,8 @@ import java.util.Optional; import org.hibernate.search.mapper.pojo.model.spi.PojoBootstrapIntrospector; -import org.hibernate.search.mapper.pojo.model.spi.PojoGenericTypeModel; import org.hibernate.search.mapper.pojo.model.spi.PojoRawTypeModel; +import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; import org.hibernate.search.util.impl.test.reflect.TypeCapture; import org.hibernate.search.util.impl.test.reflect.WildcardTypeCapture; import org.hibernate.search.util.impl.test.reflect.WildcardTypeCapture.Of; @@ -36,7 +36,7 @@ public class TypePatternMatcherFactoryTest { @Test public void exactType() { PojoRawTypeModel typeToMatchMock = mock( PojoRawTypeModel.class ); - PojoGenericTypeModel typeToInspectMock = mock( PojoGenericTypeModel.class ); + PojoTypeModel typeToInspectMock = mock( PojoTypeModel.class ); PojoRawTypeModel typeToInspectRawTypeMock = mock( PojoRawTypeModel.class ); when( introspectorMock.typeModel( String.class ) ) @@ -83,7 +83,7 @@ public void exactType() { @Test public void concreteEnumType() { PojoRawTypeModel enumTypeMock = mock( PojoRawTypeModel.class ); - PojoGenericTypeModel typeToInspectMock = mock( PojoGenericTypeModel.class ); + PojoTypeModel typeToInspectMock = mock( PojoTypeModel.class ); PojoRawTypeModel typeToInspectRawTypeMock = mock( PojoRawTypeModel.class ); when( introspectorMock.typeModel( Enum.class ) ) @@ -146,13 +146,13 @@ public void typeVariable() { @Test public void rawSuperType() { PojoRawTypeModel typeToMatchMock = mock( PojoRawTypeModel.class ); - PojoGenericTypeModel resultTypeMock = mock( PojoGenericTypeModel.class ); - PojoGenericTypeModel typeToInspectMock = mock( PojoGenericTypeModel.class ); + PojoRawTypeModel resultTypeMock = mock( PojoRawTypeModel.class ); + PojoTypeModel typeToInspectMock = mock( PojoTypeModel.class ); PojoRawTypeModel typeToInspectRawTypeMock = mock( PojoRawTypeModel.class ); when( introspectorMock.typeModel( String.class ) ) .thenReturn( typeToMatchMock ); - when( introspectorMock.genericTypeModel( Integer.class ) ) + when( introspectorMock.typeModel( Integer.class ) ) .thenReturn( resultTypeMock ); ExtractingTypePatternMatcher matcher = factory.createExtractingMatcher( String.class, Integer.class ); assertThat( matcher ).isNotNull(); @@ -164,7 +164,7 @@ public void rawSuperType() { assertThat( matcher.toString() ) .isEqualTo( "hasRawSuperType(THE_TYPE_TO_MATCH) => THE_RESULT_TYPE" ); - Optional> actualReturn; + Optional> actualReturn; when( typeToInspectMock.rawType() ) .thenReturn( typeToInspectRawTypeMock ); @@ -212,13 +212,13 @@ public void rawSuperType_resultIsParameterized() { @Test public void nonGenericArrayElement() { PojoRawTypeModel typeToMatchMock = mock( PojoRawTypeModel.class ); - PojoGenericTypeModel resultTypeMock = mock( PojoGenericTypeModel.class ); - PojoGenericTypeModel typeToInspectMock = mock( PojoGenericTypeModel.class ); + PojoRawTypeModel resultTypeMock = mock( PojoRawTypeModel.class ); + PojoTypeModel typeToInspectMock = mock( PojoTypeModel.class ); PojoRawTypeModel typeToInspectRawTypeMock = mock( PojoRawTypeModel.class ); when( introspectorMock.typeModel( String[].class ) ) .thenReturn( typeToMatchMock ); - when( introspectorMock.genericTypeModel( Integer.class ) ) + when( introspectorMock.typeModel( Integer.class ) ) .thenReturn( resultTypeMock ); ExtractingTypePatternMatcher matcher = factory.createExtractingMatcher( String[].class, Integer.class ); assertThat( matcher ).isNotNull(); @@ -230,7 +230,7 @@ public void nonGenericArrayElement() { assertThat( matcher.toString() ) .isEqualTo( "hasRawSuperType(THE_TYPE_TO_MATCH) => THE_RESULT_TYPE" ); - Optional> actualReturn; + Optional> actualReturn; when( typeToInspectMock.rawType() ) .thenReturn( typeToInspectRawTypeMock ); @@ -244,8 +244,8 @@ public void nonGenericArrayElement() { @Test public void genericArrayElement() { - PojoGenericTypeModel typeToInspectMock = mock( PojoGenericTypeModel.class ); - PojoGenericTypeModel resultTypeMock = mock( PojoGenericTypeModel.class ); + PojoTypeModel typeToInspectMock = mock( PojoTypeModel.class ); + PojoTypeModel resultTypeMock = mock( PojoTypeModel.class ); ExtractingTypePatternMatcher matcher = factory.createExtractingMatcher( new TypeCapture() { }.getType(), @@ -255,7 +255,7 @@ public void genericArrayElement() { assertThat( matcher.toString() ) .isEqualTo( "T[] => T" ); - Optional> actualReturn; + Optional> actualReturn; when( typeToInspectMock.arrayElementType() ) .thenReturn( (Optional) Optional.of( resultTypeMock ) ); @@ -309,8 +309,8 @@ public void genericArrayElement_resultIsDifferentTypeArgument() { @Test public void parameterizedType() { - PojoGenericTypeModel typeToInspectMock = mock( PojoGenericTypeModel.class ); - PojoGenericTypeModel resultTypeMock = mock( PojoGenericTypeModel.class ); + PojoTypeModel typeToInspectMock = mock( PojoTypeModel.class ); + PojoTypeModel resultTypeMock = mock( PojoTypeModel.class ); ExtractingTypePatternMatcher matcher = factory.createExtractingMatcher( new TypeCapture>() { }.getType(), @@ -320,7 +320,7 @@ public void parameterizedType() { assertThat( matcher.toString() ) .isEqualTo( "java.util.Map => T" ); - Optional> actualReturn; + Optional> actualReturn; when( typeToInspectMock.typeArgument( Map.class, 1 ) ) .thenReturn( (Optional) Optional.of( resultTypeMock ) ); diff --git a/orm6/mapper/orm/ant-src-changes.patch b/orm6/mapper/orm/ant-src-changes.patch index d114ed2a9e2..ea8fe42880c 100644 --- a/orm6/mapper/orm/ant-src-changes.patch +++ b/orm6/mapper/orm/ant-src-changes.patch @@ -386,7 +386,7 @@ index c4fd693171..c2f2d35e35 100644 } diff --git a/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBasicTypeMetadataProvider.java b/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBasicTypeMetadataProvider.java -index 14dfc36c0f..e73416a06f 100644 +index 77d7b8f982..d03fcba6e2 100644 --- a/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBasicTypeMetadataProvider.java +++ b/main/java/org/hibernate/search/mapper/orm/model/impl/HibernateOrmBasicTypeMetadataProvider.java @@ -16,13 +16,14 @@ @@ -435,7 +435,7 @@ index 14dfc36c0f..e73416a06f 100644 @@ -160,7 +161,7 @@ else if ( value instanceof org.hibernate.mapping.Array ) { else if ( value instanceof org.hibernate.mapping.Map ) { org.hibernate.mapping.Map map = (org.hibernate.mapping.Map) value; - return HibernateOrmGenericTypeModelFactory.map( + return HibernateOrmTypeModelFactory.map( - map.getCollectionType().getReturnedClass(), + (Class>) map.getCollectionType().getReturnedClass(), /* @@ -444,13 +444,13 @@ index 14dfc36c0f..e73416a06f 100644 @@ -173,7 +174,7 @@ else if ( value instanceof org.hibernate.mapping.Map ) { else if ( value instanceof org.hibernate.mapping.Collection ) { org.hibernate.mapping.Collection collection = (org.hibernate.mapping.Collection) value; - return HibernateOrmGenericTypeModelFactory.collection( + return HibernateOrmTypeModelFactory.collection( - collection.getCollectionType().getReturnedClass(), + (Class>) collection.getCollectionType().getReturnedClass(), collectValue( metadataProviderBuilder, collection.getElement() ) ); } -@@ -203,7 +204,7 @@ private static HibernateOrmGenericTypeModelFactory collectEmbedded(Builder me +@@ -203,7 +204,7 @@ private static HibernateOrmTypeModelFactory collectEmbedded(Builder metadataP collectDynamicMapType( metadataProviderBuilder, name, null, /* No supertype */ @@ -458,8 +458,8 @@ index 14dfc36c0f..e73416a06f 100644 + null /* No ID */, component.getProperties().iterator() ); } - return HibernateOrmGenericTypeModelFactory.dynamicMap( name ); -@@ -214,13 +215,15 @@ private static HibernateOrmGenericTypeModelFactory collectEmbedded(Builder me + return HibernateOrmTypeModelFactory.dynamicMap( name ); +@@ -214,13 +215,15 @@ private static HibernateOrmTypeModelFactory collectEmbedded(Builder metadataP if ( !metadataProviderBuilder.classTypeMetadata.containsKey( javaClass ) ) { collectClassType( metadataProviderBuilder, javaClass, @@ -467,7 +467,7 @@ index 14dfc36c0f..e73416a06f 100644 + null /* No ID */, component.getProperties().iterator() ); } - return HibernateOrmGenericTypeModelFactory.rawType( javaClass ); + return HibernateOrmTypeModelFactory.rawType( javaClass ); } } @@ -476,7 +476,7 @@ index 14dfc36c0f..e73416a06f 100644 private final Map persistentClasses; private final Map, HibernateOrmBasicClassTypeMetadata> classTypeMetadata; private final Map dynamicMapTypeMetadata; -@@ -229,6 +232,7 @@ private static HibernateOrmGenericTypeModelFactory collectEmbedded(Builder me +@@ -229,6 +232,7 @@ private static HibernateOrmTypeModelFactory collectEmbedded(Builder metadataP private final HibernateOrmRawTypeIdentifierResolver typeIdentifierResolver; private HibernateOrmBasicTypeMetadataProvider(Builder builder) {