Skip to content

Commit eeacfac

Browse files
committed
fix up some typing issues surrounding Class objects for generic types
including the wring signature of methods for AttributeConverter class registration
1 parent dd94c9c commit eeacfac

File tree

59 files changed

+475
-434
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+475
-434
lines changed

hibernate-core/src/main/java/org/hibernate/boot/MetadataBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ public interface MetadataBuilder {
377377
* @return {@code this} for method chaining
378378
*
379379
*/
380-
MetadataBuilder applyAttributeConverter(ConverterDescriptor descriptor);
380+
MetadataBuilder applyAttributeConverter(ConverterDescriptor<?,?> descriptor);
381381

382382
/**
383383
* Adds an AttributeConverter by its Class.

hibernate-core/src/main/java/org/hibernate/boot/internal/BootstrapContextImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public class BootstrapContextImpl implements BootstrapContext {
7575

7676
private HashMap<String,SqmFunctionDescriptor> sqlFunctionMap;
7777
private ArrayList<AuxiliaryDatabaseObject> auxiliaryDatabaseObjectList;
78-
private HashMap<Class<?>, ConverterDescriptor> attributeConverterDescriptorMap;
78+
private HashMap<Class<?>, ConverterDescriptor<?,?>> attributeConverterDescriptorMap;
7979
private ArrayList<CacheRegionDefinition> cacheRegionDefinitions;
8080
private final ManagedTypeRepresentationResolver representationStrategySelector;
8181
private final ConfigurationService configurationService;
@@ -231,7 +231,7 @@ public Collection<AuxiliaryDatabaseObject> getAuxiliaryDatabaseObjectList() {
231231
}
232232

233233
@Override
234-
public Collection<ConverterDescriptor> getAttributeConverters() {
234+
public Collection<ConverterDescriptor<?, ?>> getAttributeConverters() {
235235
return attributeConverterDescriptorMap != null
236236
? attributeConverterDescriptorMap.values()
237237
: emptyList();
@@ -291,7 +291,7 @@ public ManagedTypeRepresentationResolver getRepresentationStrategySelector() {
291291
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
292292
// Mutations
293293

294-
public void addAttributeConverterDescriptor(ConverterDescriptor descriptor) {
294+
public void addAttributeConverterDescriptor(ConverterDescriptor<?,?> descriptor) {
295295
if ( attributeConverterDescriptorMap == null ) {
296296
attributeConverterDescriptorMap = new HashMap<>();
297297
}

hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import org.hibernate.boot.query.NamedProcedureCallDefinition;
5757
import org.hibernate.boot.query.NamedResultSetMappingDescriptor;
5858
import org.hibernate.boot.spi.BootstrapContext;
59+
import org.hibernate.boot.spi.ClassmateContext;
5960
import org.hibernate.boot.spi.InFlightMetadataCollector;
6061
import org.hibernate.boot.spi.MetadataBuildingContext;
6162
import org.hibernate.boot.spi.MetadataBuildingOptions;
@@ -561,17 +562,21 @@ public AttributeConverterManager getAttributeConverterManager() {
561562
return attributeConverterManager;
562563
}
563564

565+
private ClassmateContext getClassmateContext() {
566+
return getBootstrapContext().getClassmateContext();
567+
}
568+
564569
@Override
565-
public void addAttributeConverter(Class<? extends AttributeConverter<?,?>> converterClass) {
570+
public void addAttributeConverter(Class<? extends AttributeConverter<?, ?>> converterClass) {
566571
attributeConverterManager.addConverter(
567-
new ClassBasedConverterDescriptor( converterClass, getBootstrapContext().getClassmateContext() )
572+
new ClassBasedConverterDescriptor<>( converterClass, getClassmateContext() )
568573
);
569574
}
570575

571576
@Override
572-
public void addOverridableConverter(Class<? extends AttributeConverter<?,?>> converterClass) {
577+
public void addOverridableConverter(Class<? extends AttributeConverter<?, ?>> converterClass) {
573578
attributeConverterManager.addConverter(
574-
new ClassBasedConverterDescriptor( converterClass, getBootstrapContext().getClassmateContext() ) {
579+
new ClassBasedConverterDescriptor<>( converterClass, getClassmateContext() ) {
575580
@Override
576581
public boolean overrideable() {
577582
return true;
@@ -581,7 +586,7 @@ public boolean overrideable() {
581586
}
582587

583588
@Override
584-
public void addAttributeConverter(ConverterDescriptor descriptor) {
589+
public void addAttributeConverter(ConverterDescriptor<?,?> descriptor) {
585590
attributeConverterManager.addConverter( descriptor );
586591
}
587592

hibernate-core/src/main/java/org/hibernate/boot/internal/MetadataBuilderImpl.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -324,9 +324,9 @@ public TypeConfiguration getTypeConfiguration() {
324324
}
325325

326326
@Override
327-
public void contributeAttributeConverter(Class<? extends AttributeConverter<?, ?>> converterClass) {
327+
public void contributeAttributeConverter(Class<? extends AttributeConverter<?,?>> converterClass) {
328328
bootstrapContext.addAttributeConverterDescriptor(
329-
new ClassBasedConverterDescriptor( converterClass, bootstrapContext.getClassmateContext() )
329+
new ClassBasedConverterDescriptor<>( converterClass, bootstrapContext.getClassmateContext() )
330330
);
331331
}
332332

@@ -381,23 +381,23 @@ public MetadataBuilder applyAuxiliaryDatabaseObject(AuxiliaryDatabaseObject auxi
381381
}
382382

383383
@Override
384-
public MetadataBuilder applyAttributeConverter(ConverterDescriptor descriptor) {
384+
public MetadataBuilder applyAttributeConverter(ConverterDescriptor<?,?> descriptor) {
385385
bootstrapContext.addAttributeConverterDescriptor( descriptor );
386386
return this;
387387
}
388388

389389
@Override
390390
public <O,R> MetadataBuilder applyAttributeConverter(Class<? extends AttributeConverter<O,R>> attributeConverterClass) {
391391
bootstrapContext.addAttributeConverterDescriptor(
392-
new ClassBasedConverterDescriptor( attributeConverterClass, bootstrapContext.getClassmateContext() )
392+
new ClassBasedConverterDescriptor<>( attributeConverterClass, bootstrapContext.getClassmateContext() )
393393
);
394394
return this;
395395
}
396396

397397
@Override
398398
public <O,R> MetadataBuilder applyAttributeConverter(Class<? extends AttributeConverter<O,R>> attributeConverterClass, boolean autoApply) {
399399
bootstrapContext.addAttributeConverterDescriptor(
400-
new ClassBasedConverterDescriptor(
400+
new ClassBasedConverterDescriptor<>(
401401
attributeConverterClass,
402402
autoApply,
403403
bootstrapContext.getClassmateContext()

hibernate-core/src/main/java/org/hibernate/boot/model/TypeContributions.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ default void contributeType(UserType<?> type) {
6767
*/
6868
@Incubating
6969
default void contributeType(CompositeUserType<?> type) {
70+
// default implementation for backward compatibility
7071
throw new UnsupportedOperationException();
7172
}
7273

@@ -76,7 +77,7 @@ default void contributeType(CompositeUserType<?> type) {
7677
* @since 6.2
7778
*/
7879
@Incubating
79-
default void contributeAttributeConverter(Class<? extends AttributeConverter<?, ?>> converterClass) {
80+
default void contributeAttributeConverter(Class<? extends AttributeConverter<?, ?>> converterClass) {
8081
// default implementation for backward compatibility
8182
throw new UnsupportedOperationException();
8283
}

hibernate-core/src/main/java/org/hibernate/boot/model/convert/internal/AbstractConverterDescriptor.java

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import org.hibernate.type.descriptor.converter.internal.JpaAttributeConverterImpl;
1414
import org.hibernate.type.descriptor.converter.spi.JpaAttributeConverter;
1515
import org.hibernate.resource.beans.spi.ManagedBean;
16-
import org.hibernate.type.descriptor.java.JavaType;
1716

1817
import com.fasterxml.classmate.ResolvedType;
1918
import jakarta.persistence.AttributeConverter;
@@ -24,49 +23,50 @@
2423
/**
2524
* @author Steve Ebersole
2625
*/
27-
public abstract class AbstractConverterDescriptor implements ConverterDescriptor {
28-
private final Class<? extends AttributeConverter<?,?>> converterClass;
26+
public abstract class AbstractConverterDescriptor<X,Y> implements ConverterDescriptor<X,Y> {
27+
private final Class<? extends AttributeConverter<? extends X,? extends Y>> converterClass;
2928

3029
private final ResolvedType domainType;
3130
private final ResolvedType jdbcType;
3231

3332
private final AutoApplicableConverterDescriptor autoApplicableDescriptor;
3433

3534
public AbstractConverterDescriptor(
36-
Class<? extends AttributeConverter<?,?>> converterClass,
35+
Class<? extends AttributeConverter<? extends X, ? extends Y>> converterClass,
3736
Boolean forceAutoApply,
3837
ClassmateContext classmateContext) {
3938
this.converterClass = converterClass;
4039

41-
final List<ResolvedType> converterParamTypes = resolveConverterClassParamTypes( converterClass, classmateContext );
42-
43-
this.domainType = converterParamTypes.get( 0 );
44-
this.jdbcType = converterParamTypes.get( 1 );
40+
final List<ResolvedType> converterParamTypes =
41+
resolveConverterClassParamTypes( converterClass, classmateContext );
42+
domainType = converterParamTypes.get( 0 );
43+
jdbcType = converterParamTypes.get( 1 );
4544

46-
this.autoApplicableDescriptor = resolveAutoApplicableDescriptor( converterClass, forceAutoApply );
45+
autoApplicableDescriptor = resolveAutoApplicableDescriptor( converterClass, forceAutoApply );
4746
}
4847

4948
private AutoApplicableConverterDescriptor resolveAutoApplicableDescriptor(
5049
Class<? extends AttributeConverter<?,?>> converterClass,
5150
Boolean forceAutoApply) {
52-
final boolean autoApply;
51+
return isAutoApply( converterClass, forceAutoApply )
52+
? new AutoApplicableConverterDescriptorStandardImpl( this )
53+
: AutoApplicableConverterDescriptorBypassedImpl.INSTANCE;
54+
}
55+
56+
private static boolean isAutoApply(Class<? extends AttributeConverter<?, ?>> converterClass, Boolean forceAutoApply) {
5357
if ( forceAutoApply != null ) {
5458
// if the caller explicitly specified whether to auto-apply, honor that
55-
autoApply = forceAutoApply;
59+
return forceAutoApply;
5660
}
5761
else {
5862
// otherwise, look at the converter's @Converter annotation
5963
final Converter annotation = converterClass.getAnnotation( Converter.class );
60-
autoApply = annotation != null && annotation.autoApply();
64+
return annotation != null && annotation.autoApply();
6165
}
62-
63-
return autoApply
64-
? new AutoApplicableConverterDescriptorStandardImpl( this )
65-
: AutoApplicableConverterDescriptorBypassedImpl.INSTANCE;
6666
}
6767

6868
@Override
69-
public Class<? extends AttributeConverter<?,?>> getAttributeConverterClass() {
69+
public Class<? extends AttributeConverter<? extends X,? extends Y>> getAttributeConverterClass() {
7070
return converterClass;
7171
}
7272

@@ -86,22 +86,27 @@ public AutoApplicableConverterDescriptor getAutoApplyDescriptor() {
8686
}
8787

8888
@Override
89-
public JpaAttributeConverter<?,?> createJpaAttributeConverter(JpaAttributeConverterCreationContext context) {
90-
final JavaType<?> converterJtd = context
91-
.getJavaTypeRegistry()
92-
.getDescriptor( getAttributeConverterClass() );
93-
94-
final Class<?> domainJavaType = getDomainValueResolvedType().getErasedType();
95-
final Class<?> jdbcJavaType = getRelationalValueResolvedType().getErasedType();
96-
97-
return new JpaAttributeConverterImpl(
98-
createManagedBean( context ),
99-
converterJtd,
100-
domainJavaType,
101-
jdbcJavaType,
89+
public JpaAttributeConverter<X,Y> createJpaAttributeConverter(JpaAttributeConverterCreationContext context) {
90+
return new JpaAttributeConverterImpl<>(
91+
(ManagedBean<? extends AttributeConverter<X,Y>>)
92+
createManagedBean( context ),
93+
context.getJavaTypeRegistry().getDescriptor( converterClass ),
94+
getDomainClass(),
95+
getRelationalClass(),
10296
context
10397
);
10498
}
10599

106-
protected abstract ManagedBean<? extends AttributeConverter<?, ?>> createManagedBean(JpaAttributeConverterCreationContext context);
100+
@SuppressWarnings("unchecked")
101+
private Class<Y> getRelationalClass() {
102+
return (Class<Y>) getRelationalValueResolvedType().getErasedType();
103+
}
104+
105+
@SuppressWarnings("unchecked")
106+
private Class<X> getDomainClass() {
107+
return (Class<X>) getDomainValueResolvedType().getErasedType();
108+
}
109+
110+
protected abstract ManagedBean<? extends AttributeConverter<? extends X,? extends Y>>
111+
createManagedBean(JpaAttributeConverterCreationContext context);
107112
}

0 commit comments

Comments
 (0)