Skip to content

Commit 8bd671a

Browse files
committed
HHH-18976 Register types requiring Arrays#copyOf in org.hibernate.graalvm.internal.StaticClassLists
1 parent 0af4a21 commit 8bd671a

File tree

4 files changed

+20
-2
lines changed

4 files changed

+20
-2
lines changed

hibernate-core/src/main/java/org/hibernate/bytecode/enhance/internal/tracker/CompositeOwnerTracker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void callOwner(String fieldName) {
4747
}
4848
}
4949

50-
@AllowReflection
50+
@AllowReflection // Possible array types are registered in org.hibernate.graalvm.internal.StaticClassLists.typesNeedingArrayCopy
5151
public void removeOwner(String name) {
5252
for ( int i = 0; i < names.length; i++ ) {
5353
if ( name.equals( names[i] ) ) {

hibernate-core/src/main/java/org/hibernate/engine/internal/SessionEventListenerManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public SessionEventListenerManagerImpl(List<SessionEventListener> initialListene
3131
}
3232

3333
@Override
34-
@AllowReflection
34+
@AllowReflection // Possible array types are registered in org.hibernate.graalvm.internal.StaticClassLists.typesNeedingArrayCopy
3535
public void addListener(final SessionEventListener... additionalListeners) {
3636
Objects.requireNonNull( additionalListeners );
3737
final SessionEventListener[] existing = this.listeners;

hibernate-graalvm/src/main/java/org/hibernate/graalvm/internal/StaticClassLists.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
package org.hibernate.graalvm.internal;
66

77

8+
import org.hibernate.SessionEventListener;
9+
import org.hibernate.engine.spi.CompositeTracker;
810
import org.hibernate.tool.schema.internal.script.MultiLineSqlScriptExtractor;
911

1012
/**
@@ -41,6 +43,10 @@ public static Class[] typesNeedingDefaultConstructorAccessible() {
4143

4244
public static Class[] typesNeedingArrayCopy() {
4345
return new Class[] {
46+
// See CompositeOwnerTracker
47+
CompositeTracker[].class,
48+
// See SessionEventListenerManagerImpl
49+
SessionEventListener[].class,
4450
//Eventlisteners need to be registered for reflection to allow creation via Array#newInstance ;
4551
// types need to be in synch with those declared in org.hibernate.event.spi.EventType
4652
org.hibernate.event.spi.LoadEventListener[].class,

hibernate-graalvm/src/test/java/org/hibernate/graalvm/internal/StaticClassListsTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import java.util.stream.Stream;
1616

1717
import org.hibernate.Session;
18+
import org.hibernate.SessionEventListener;
19+
import org.hibernate.engine.spi.CompositeOwner;
1820
import org.hibernate.event.spi.EventType;
1921
import org.hibernate.internal.util.ReflectHelper;
2022
import org.hibernate.persister.collection.CollectionPersister;
@@ -56,6 +58,16 @@ void meta_noMissingTestCategory() {
5658

5759
// TODO ORM 7: Move this inside TypesNeedingAllConstructorsAccessible (requires JDK 17) and rename to simple Category
5860
enum TypesNeedingAllConstructorsAccessible_Category {
61+
// These are needed simply because we use Arrays#copyOf with arrays of this type
62+
ARRAYS_COPY_OF {
63+
@Override
64+
Stream<Class<?>> classes() {
65+
return Stream.of(
66+
CompositeOwner.class, // See org.hibernate.bytecode.enhance.internal.tracker.CompositeOwnerTracker
67+
SessionEventListener.class // See org.hibernate.engine.internal.SessionEventListenerManagerImpl
68+
);
69+
}
70+
},
5971
PERSISTERS {
6072
@Override
6173
Stream<Class<?>> classes() {

0 commit comments

Comments
 (0)