[hibernate/hibernate-orm] 7d3531: HHH-18976 Forbid any future new uses of Array.newI...
by Yoann Rodière
Branch: refs/heads/main
Home: https://github.com/hibernate/hibernate-orm
Commit: 7d3531de0b26792c2ddb4ea18f6c20cd9d4e15c3
https://github.com/hibernate/hibernate-orm/commit/7d3531de0b26792c2ddb4ea...
Author: Yoann Rodière <yoann(a)hibernate.org>
Date: 2025-01-14 (Tue, 14 Jan 2025)
Changed paths:
M hibernate-core/src/main/java/org/hibernate/collection/spi/PersistentArrayHolder.java
M hibernate-core/src/main/java/org/hibernate/dialect/JsonHelper.java
M hibernate-core/src/main/java/org/hibernate/dialect/function/array/DdlTypeHelper.java
M hibernate-core/src/main/java/org/hibernate/dialect/function/array/JsonArrayViaElementArgumentReturnTypeResolver.java
M hibernate-core/src/main/java/org/hibernate/event/service/internal/EventListenerGroupImpl.java
M hibernate-core/src/main/java/org/hibernate/event/service/internal/EventListenerRegistryImpl.java
A hibernate-core/src/main/java/org/hibernate/internal/build/AllowReflection.java
M hibernate-core/src/main/java/org/hibernate/internal/util/collections/ArrayHelper.java
M hibernate-core/src/main/java/org/hibernate/jpa/event/internal/CallbackRegistryImpl.java
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractCollectionBatchLoader.java
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractMultiIdEntityLoader.java
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/CollectionBatchLoaderArrayParam.java
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/EntityBatchLoaderArrayParam.java
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/LoaderHelper.java
M hibernate-core/src/main/java/org/hibernate/sql/results/internal/StandardRowReader.java
M hibernate-core/src/main/java/org/hibernate/type/ArrayType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/converter/internal/ArrayConverter.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/converter/internal/CollectionConverter.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/AbstractArrayJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/ArrayJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/ArrayMutabilityPlan.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/BooleanPrimitiveArrayJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/DoublePrimitiveArrayJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/FloatPrimitiveArrayJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/IntegerPrimitiveArrayJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/LongPrimitiveArrayJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/ShortPrimitiveArrayJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/BasicCollectionJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/ArrayJdbcType.java
M hibernate-core/src/main/java/org/hibernate/type/format/jaxb/JaxbXmlFormatMapper.java
M local-build-plugins/src/main/groovy/local.code-quality.gradle
A rules/forbidden-apis.txt
Log Message:
-----------
HHH-18976 Forbid any future new uses of Array.newInstance
Commit: 0d69bf86857975c7f8269face63cc8662962135d
https://github.com/hibernate/hibernate-orm/commit/0d69bf86857975c7f8269fa...
Author: Yoann Rodière <yoann(a)hibernate.org>
Date: 2025-01-14 (Tue, 14 Jan 2025)
Changed paths:
M hibernate-core/src/main/java/org/hibernate/internal/util/collections/ArrayHelper.java
Log Message:
-----------
HHH-18976 Deprecate ArrayHelper#newInstance in favor of the standard Array#newInstance
Commit: 7ba3e8d1f85c2055b8f6872ab0f779797c6aec7c
https://github.com/hibernate/hibernate-orm/commit/7ba3e8d1f85c2055b8f6872...
Author: Yoann Rodière <yoann(a)hibernate.org>
Date: 2025-01-14 (Tue, 14 Jan 2025)
Changed paths:
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/ArrayMutabilityPlan.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/BooleanPrimitiveArrayJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/ByteArrayJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/CharacterArrayJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/DoublePrimitiveArrayJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/FloatPrimitiveArrayJavaType.java
A hibernate-core/src/main/java/org/hibernate/type/descriptor/java/ImmutableObjectArrayMutabilityPlan.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/IntegerPrimitiveArrayJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/LongPrimitiveArrayJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/PrimitiveByteArrayJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/PrimitiveCharacterArrayJavaType.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/ShortPrimitiveArrayJavaType.java
Log Message:
-----------
HHH-18976 Use a clone-based implementation for all array mutability plans
It's more consistent, and happens to get rid of ArrayMutabilityPlan,
which involved an unnecessary use of Array.newInstance.
I've also seen claims that clone() performs better than
Array.newInstance() due to not having to zero-out the allocated memory,
but I doubt that's relevant here.
Commit: 5a32bcb12860a94565a6c77c9447358be622e9ca
https://github.com/hibernate/hibernate-orm/commit/5a32bcb12860a94565a6c77...
Author: Yoann Rodière <yoann(a)hibernate.org>
Date: 2025-01-14 (Tue, 14 Jan 2025)
Changed paths:
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/CollectionBatchLoaderArrayParam.java
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/EntityBatchLoaderArrayParam.java
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/MultiIdEntityLoaderArrayParam.java
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/MultiKeyLoadHelper.java
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/MultiNaturalIdLoaderArrayParam.java
Log Message:
-----------
HHH-18976 Simplify MultiKeyLoadHelper#resolveArrayJdbcMapping
No functional impact, it's just less redundant.
Commit: 62199d028c4f841f18c918aa86af0561357c4fd3
https://github.com/hibernate/hibernate-orm/commit/62199d028c4f841f18c918a...
Author: Yoann Rodière <yoann(a)hibernate.org>
Date: 2025-01-14 (Tue, 14 Jan 2025)
Changed paths:
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/CollectionBatchLoaderArrayParam.java
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/EntityBatchLoaderArrayParam.java
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/MultiIdEntityLoaderArrayParam.java
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/MultiKeyLoadHelper.java
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/MultiNaturalIdLoaderArrayParam.java
M hibernate-core/src/main/java/org/hibernate/type/BasicTypeRegistry.java
M hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/JavaTypeRegistry.java
Log Message:
-----------
HHH-18976 Get rid of dynamic array instantiations used only to resolve type descriptors
Commit: 5ffff1b5b9882ebf98c492d5ecb1bc2347c04e6e
https://github.com/hibernate/hibernate-orm/commit/5ffff1b5b9882ebf98c492d...
Author: Yoann Rodière <yoann(a)hibernate.org>
Date: 2025-01-14 (Tue, 14 Jan 2025)
Changed paths:
M hibernate-core/src/main/java/org/hibernate/internal/MultiIdentifierLoadAccessImpl.java
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/AbstractMultiIdEntityLoader.java
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/MultiIdEntityLoaderArrayParam.java
M hibernate-core/src/main/java/org/hibernate/loader/ast/internal/MultiIdEntityLoaderStandard.java
Log Message:
-----------
HHH-18976 Get rid of dynamic array instantiation in MultiEntityLoaderStandard
MultiEntityLoaderStandard is used for arbitrary ID types, including IdClass,
making it very problematic to instantiate T[] where T is the ID type:
in native images, it requires registering T[] for reflection for every T
that can possibly be used as an ID type.
Fortunately, MultiEntityLoaderStandard does not, in fact, need
concrete-type arrays: Object[] works perfectly well with this
implementation, and only the other implementation,
MultiIdEntityLoaderArrayParam, actually needs concrete-type arrays.
We're truly in a lucky streak, because MultiIdEntityLoaderArrayParam is
only used for well-known, basic types such as Integer, which can easily
be registered for reflection in native images, and likely will be for
other reasons anyway.
Some of the dynamic instantiations were originally introduced to fix
the following issue:
* HHH-17201 -- tested in MultiIdEntityLoadTests
The corresponding tests still pass after removing these dynamic array
instantiations.
Compare: https://github.com/hibernate/hibernate-orm/compare/ac37839419b6...5ffff1b...
To unsubscribe from these emails, change your notification settings at https://github.com/hibernate/hibernate-orm/settings/notifications
1 year, 3 months