diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/PreserveOptionsSupport.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/PreserveOptionsSupport.java index e84dab52ebf1..420c4364bc67 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/PreserveOptionsSupport.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/PreserveOptionsSupport.java @@ -158,18 +158,12 @@ public static void registerPreservedClasses(NativeImageClassLoaderSupport classL * registration. */ classesToPreserve.forEach(c -> { - reflection.register(always, false, c); - - reflection.registerAllDeclaredFields(always, c); - reflection.registerAllDeclaredMethodsQuery(always, false, c); - reflection.registerAllDeclaredConstructorsQuery(always, false, c); - reflection.registerAllConstructorsQuery(always, false, c); - reflection.registerAllClassesQuery(always, c); - reflection.registerAllDeclaredClassesQuery(always, c); - reflection.registerAllNestMembersQuery(always, c); - reflection.registerAllPermittedSubclassesQuery(always, c); - reflection.registerAllRecordComponentsQuery(always, c); - reflection.registerAllSignersQuery(always, c); + registerType(reflection, c); + + /* Register array types for each type up to dimension 2 */ + Class arrayType = c.arrayType(); + registerType(reflection, arrayType); + registerType(reflection, arrayType.arrayType()); /* Register every single-interface proxy */ // GR-62293 can't register proxies from jdk modules. @@ -222,4 +216,20 @@ public static void registerPreservedClasses(NativeImageClassLoaderSupport classL reflection.registerClassLookup(always, className); } } + + private static void registerType(RuntimeReflectionSupport reflection, Class c) { + ConfigurationCondition always = ConfigurationCondition.alwaysTrue(); + reflection.register(always, false, c); + + reflection.registerAllDeclaredFields(always, c); + reflection.registerAllDeclaredMethodsQuery(always, false, c); + reflection.registerAllDeclaredConstructorsQuery(always, false, c); + reflection.registerAllConstructorsQuery(always, false, c); + reflection.registerAllClassesQuery(always, c); + reflection.registerAllDeclaredClassesQuery(always, c); + reflection.registerAllNestMembersQuery(always, c); + reflection.registerAllPermittedSubclassesQuery(always, c); + reflection.registerAllRecordComponentsQuery(always, c); + reflection.registerAllSignersQuery(always, c); + } }