Skip to content

Commit

Permalink
HHH-17515 Fix constructor selection for integral types
Browse files Browse the repository at this point in the history
  • Loading branch information
mbladel authored and beikov committed Dec 15, 2023
1 parent b8255af commit 081b597
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -75,14 +75,6 @@ else if ( isWrapper( from ) ) {
return areAssignmentCompatiblePrimitive( to, primitiveEquivalent( from ) );
}
}
else if ( isWrapper( to ) ) {
if ( from.isPrimitive() ) {
return areAssignmentCompatiblePrimitive( primitiveEquivalent( to ), from );
}
else if ( isWrapper( from ) ) {
return areAssignmentCompatiblePrimitive( primitiveEquivalent( to ), primitiveEquivalent( from ) );
}
}

return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,20 +148,34 @@ else if ( nature == DynamicInstantiationNature.MAP ) {
final Type[] genericParameterTypes = constructor.getGenericParameterTypes();
if ( genericParameterTypes.length == argumentReaders.size() ) {
for ( int i = 0; i < argumentReaders.size(); i++ ) {
final Type parameterType = genericParameterTypes[i];
final ArgumentReader<?> argumentReader = argumentReaders.get( i );
final JavaType<?> argumentTypeDescriptor = creationState.getSqlAstCreationContext()
.getMappingMetamodel()
.getTypeConfiguration()
.getJavaTypeRegistry()
.resolveDescriptor( genericParameterTypes[i] );
final boolean assignmentCompatible;
if ( parameterType instanceof Class<?> ) {
assignmentCompatible = areAssignmentCompatible(
(Class<?>) parameterType,
argumentReader.getAssembledJavaType().getJavaTypeClass()
);
}
else {
final JavaType<?> argumentTypeDescriptor = creationState.getSqlAstCreationContext()
.getMappingMetamodel()
.getTypeConfiguration()
.getJavaTypeRegistry()
.resolveDescriptor( parameterType );
assignmentCompatible = areAssignmentCompatible(
argumentTypeDescriptor,
argumentReader.getAssembledJavaType()
);
}

if ( !areAssignmentCompatible( argumentTypeDescriptor, argumentReader.getAssembledJavaType() ) ) {
if ( !assignmentCompatible ) {
if ( log.isDebugEnabled() ) {
log.debugf(
"Skipping constructor for dynamic-instantiation match due to argument mismatch [%s] : %s -> %s",
i,
constructor.getParameterTypes()[i].getName(),
argumentTypeDescriptor.getJavaType().getTypeName()
argumentReader.getAssembledJavaType().getTypeName(),
parameterType.getTypeName()
);
}
continue constructor_loop;
Expand Down

0 comments on commit 081b597

Please sign in to comment.