diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIAccessCondition.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIAccessCondition.java new file mode 100644 index 000000000000..a9d89d06d3e0 --- /dev/null +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIAccessCondition.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2025, 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.svm.hosted.dynamicaccess; + +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; + +import com.oracle.svm.util.OriginalClassProvider; + +import jdk.vm.ci.meta.ResolvedJavaType; + +/** + * Mirror of {@link org.graalvm.nativeimage.dynamicaccess.AccessCondition} using JVMCI types. + */ +public class JVMCIAccessCondition { + + /** + * @see AccessCondition#typeReached(Class) + */ + public static AccessCondition typeReached(ResolvedJavaType type) { + return AccessCondition.typeReached(OriginalClassProvider.getJavaClass(type)); + } +} diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIJNIAccess.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIJNIAccess.java new file mode 100644 index 000000000000..8e1a19a8fbb0 --- /dev/null +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIJNIAccess.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2025, 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.svm.hosted.dynamicaccess; + +import java.lang.reflect.Executable; +import java.lang.reflect.Field; + +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; + +import com.oracle.svm.hosted.JNIAccessImpl; +import com.oracle.svm.util.OriginalClassProvider; +import com.oracle.svm.util.OriginalFieldProvider; +import com.oracle.svm.util.OriginalMethodProvider; + +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; + +/** + * Mirror of {@link org.graalvm.nativeimage.dynamicaccess.JNIAccess} using JVMCI types. + */ +public final class JVMCIJNIAccess { + + private final JNIAccessImpl jniInstance; + private static JVMCIJNIAccess instance; + + private JVMCIJNIAccess() { + jniInstance = JNIAccessImpl.singleton(); + } + + public static JVMCIJNIAccess singleton() { + if (instance == null) { + instance = new JVMCIJNIAccess(); + } + return instance; + } + + /** + * @see org.graalvm.nativeimage.dynamicaccess.JNIAccess#register(AccessCondition, Class...) + */ + public void register(AccessCondition condition, ResolvedJavaType... types) { + for (ResolvedJavaType type : types) { + jniInstance.register(condition, OriginalClassProvider.getJavaClass(type)); + } + } + + /** + * @see org.graalvm.nativeimage.dynamicaccess.JNIAccess#register(AccessCondition, Executable...) + */ + public void register(AccessCondition condition, ResolvedJavaMethod... methods) { + for (ResolvedJavaMethod method : methods) { + jniInstance.register(condition, OriginalMethodProvider.getJavaMethod(method)); + } + } + + /** + * @see org.graalvm.nativeimage.dynamicaccess.JNIAccess#register(AccessCondition, Field...) + */ + public void register(AccessCondition condition, ResolvedJavaField... fields) { + for (ResolvedJavaField field : fields) { + jniInstance.register(condition, OriginalFieldProvider.getJavaField(field)); + } + } +} diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIReflectiveAccess.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIReflectiveAccess.java new file mode 100644 index 000000000000..84534dd8a3f8 --- /dev/null +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIReflectiveAccess.java @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2025, 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.svm.hosted.dynamicaccess; + +import java.lang.reflect.Executable; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; + +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; +import org.graalvm.nativeimage.dynamicaccess.ReflectiveAccess; + +import com.oracle.svm.hosted.ReflectiveAccessImpl; +import com.oracle.svm.util.OriginalClassProvider; +import com.oracle.svm.util.OriginalFieldProvider; +import com.oracle.svm.util.OriginalMethodProvider; + +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; + +/** + * Mirror of {@link ReflectiveAccess} using JVMCI types. + */ +public final class JVMCIReflectiveAccess { + private final ReflectiveAccessImpl rdaInstance; + private static JVMCIReflectiveAccess instance; + + private JVMCIReflectiveAccess() { + rdaInstance = ReflectiveAccessImpl.singleton(); + } + + public static JVMCIReflectiveAccess singleton() { + if (instance == null) { + instance = new JVMCIReflectiveAccess(); + } + return instance; + } + + /** + * @see ReflectiveAccess#register(AccessCondition, Class...) + */ + public void register(AccessCondition condition, ResolvedJavaType... types) { + for (ResolvedJavaType type : types) { + rdaInstance.register(condition, OriginalClassProvider.getJavaClass(type)); + } + } + + /** + * @see ReflectiveAccess#register(AccessCondition, Executable...) + */ + public void register(AccessCondition condition, ResolvedJavaMethod... methods) { + for (ResolvedJavaMethod method : methods) { + rdaInstance.register(condition, OriginalMethodProvider.getJavaMethod(method)); + } + } + + /** + * @see ReflectiveAccess#register(AccessCondition, Field...) + */ + public void register(AccessCondition condition, ResolvedJavaField... fields) { + for (ResolvedJavaField field : fields) { + rdaInstance.register(condition, OriginalFieldProvider.getJavaField(field)); + } + } + + /** + * @see ReflectiveAccess#registerForSerialization(AccessCondition, Class...) + */ + public void registerForSerialization(AccessCondition condition, ResolvedJavaType... types) { + for (ResolvedJavaType type : types) { + rdaInstance.registerForSerialization(condition, OriginalClassProvider.getJavaClass(type)); + } + } + + /** + * @see ReflectiveAccess#registerProxy(AccessCondition, Class...) + */ + public Class registerProxy(AccessCondition condition, ResolvedJavaType... interfaces) { + List> reflectionInterfaces = new ArrayList<>(); + for (ResolvedJavaType intf : interfaces) { + reflectionInterfaces.add(OriginalClassProvider.getJavaClass(intf)); + } + return rdaInstance.registerProxy(condition, reflectionInterfaces.toArray(Class[]::new)); + } + + /** + * @see ReflectiveAccess#registerForUnsafeAllocation(AccessCondition, Class...) + */ + public void registerForUnsafeAllocation(AccessCondition condition, ResolvedJavaType... types) { + for (ResolvedJavaType type : types) { + rdaInstance.registerForUnsafeAllocation(condition, OriginalClassProvider.getJavaClass(type)); + } + } +} diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIRuntimeJNIAccess.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIRuntimeJNIAccess.java new file mode 100644 index 000000000000..470ebfcc2ed0 --- /dev/null +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIRuntimeJNIAccess.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2025, 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.svm.hosted.dynamicaccess; + +import java.lang.reflect.Executable; +import java.lang.reflect.Field; + +import org.graalvm.nativeimage.hosted.RuntimeJNIAccess; + +import com.oracle.svm.util.OriginalClassProvider; +import com.oracle.svm.util.OriginalFieldProvider; +import com.oracle.svm.util.OriginalMethodProvider; + +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; + +/** + * Mirror of {@link RuntimeJNIAccess} using JVMCI types. + *

+ * This API is deprecated; use {@link JVMCIJNIAccess} instead. + */ +public final class JVMCIRuntimeJNIAccess { + /** + * @see RuntimeJNIAccess#register(Class...) + */ + public static void register(ResolvedJavaType... types) { + for (ResolvedJavaType type : types) { + RuntimeJNIAccess.register(OriginalClassProvider.getJavaClass(type)); + } + } + + /** + * @see RuntimeJNIAccess#register(Executable...) + */ + public static void register(ResolvedJavaMethod... methods) { + for (ResolvedJavaMethod method : methods) { + RuntimeJNIAccess.register(OriginalMethodProvider.getJavaMethod(method)); + } + } + + /** + * @see RuntimeJNIAccess#register(Field...) + */ + public static void register(ResolvedJavaField... fields) { + for (ResolvedJavaField field : fields) { + RuntimeJNIAccess.register(OriginalFieldProvider.getJavaField(field)); + } + } + + private JVMCIRuntimeJNIAccess() { + } +} diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIRuntimeProxyCreation.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIRuntimeProxyCreation.java new file mode 100644 index 000000000000..0a43290f7eb1 --- /dev/null +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIRuntimeProxyCreation.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2025, 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.svm.hosted.dynamicaccess; + +import java.util.Arrays; + +import org.graalvm.nativeimage.hosted.RuntimeProxyCreation; + +import com.oracle.svm.util.OriginalClassProvider; + +import jdk.vm.ci.meta.ResolvedJavaType; + +/** + * Mirror of {@link RuntimeProxyCreation} using JVMCI types. + *

+ * This API is deprecated; use {@link JVMCIReflectiveAccess} instead. + */ +public final class JVMCIRuntimeProxyCreation { + /** + * @see RuntimeProxyCreation#register(Class...) + */ + public static void register(ResolvedJavaType... interfaces) { + Class[] reflectionInterfaces = Arrays.stream(interfaces).map(OriginalClassProvider::getJavaClass).toArray(Class[]::new); + RuntimeProxyCreation.register(reflectionInterfaces); + } + + private JVMCIRuntimeProxyCreation() { + } +} diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIRuntimeReflection.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIRuntimeReflection.java new file mode 100644 index 000000000000..ae0ff8c9c3d8 --- /dev/null +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIRuntimeReflection.java @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2025, 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.svm.hosted.dynamicaccess; + +import java.lang.reflect.Executable; +import java.lang.reflect.Field; +import java.util.Arrays; + +import org.graalvm.nativeimage.hosted.RuntimeReflection; + +import com.oracle.svm.util.OriginalClassProvider; +import com.oracle.svm.util.OriginalFieldProvider; +import com.oracle.svm.util.OriginalMethodProvider; + +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; + +/** + * Mirror of {@link RuntimeReflection} using JVMCI types. + *

+ * This API is deprecated; use {@link JVMCIReflectiveAccess} instead. + */ +public final class JVMCIRuntimeReflection { + /** + * @see RuntimeReflection#register(Class...) + */ + public static void register(ResolvedJavaType... types) { + for (ResolvedJavaType type : types) { + RuntimeReflection.register(OriginalClassProvider.getJavaClass(type)); + } + } + + /** + * @see RuntimeReflection#register(Executable...) + */ + public static void register(ResolvedJavaMethod... methods) { + for (ResolvedJavaMethod method : methods) { + RuntimeReflection.register(OriginalMethodProvider.getJavaMethod(method)); + } + } + + /** + * @see RuntimeReflection#registerAsQueried(Executable...) + */ + public static void registerAsQueried(ResolvedJavaMethod... methods) { + for (ResolvedJavaMethod method : methods) { + RuntimeReflection.registerAsQueried(OriginalMethodProvider.getJavaMethod(method)); + } + } + + /** + * @see RuntimeReflection#registerMethodLookup(Class, String, Class...) + */ + public static void registerMethodLookup(ResolvedJavaType declaringType, String methodName, ResolvedJavaType... parameterTypes) { + Class[] reflectionParameterTypes = Arrays.stream(parameterTypes).map(OriginalClassProvider::getJavaClass).toArray(Class[]::new); + RuntimeReflection.registerMethodLookup(OriginalClassProvider.getJavaClass(declaringType), methodName, reflectionParameterTypes); + } + + /** + * @see RuntimeReflection#registerConstructorLookup(Class, Class...) + */ + public static void registerConstructorLookup(ResolvedJavaType declaringType, ResolvedJavaType... parameterTypes) { + Class[] reflectionParameterTypes = Arrays.stream(parameterTypes).map(OriginalClassProvider::getJavaClass).toArray(Class[]::new); + RuntimeReflection.registerConstructorLookup(OriginalClassProvider.getJavaClass(declaringType), reflectionParameterTypes); + } + + /** + * @see RuntimeReflection#register(Field...) + */ + public static void register(ResolvedJavaField... fields) { + for (ResolvedJavaField field : fields) { + RuntimeReflection.register(OriginalFieldProvider.getJavaField(field)); + } + } + + /** + * @see RuntimeReflection#registerFieldLookup(Class, String) + */ + public static void registerFieldLookup(ResolvedJavaType declaringType, String fieldName) { + RuntimeReflection.registerFieldLookup(OriginalClassProvider.getJavaClass(declaringType), fieldName); + } + + /** + * @see RuntimeReflection#registerAllClasses(Class) + */ + public static void registerAllClasses(ResolvedJavaType declaringType) { + RuntimeReflection.registerAllClasses(OriginalClassProvider.getJavaClass(declaringType)); + } + + /** + * @see RuntimeReflection#registerAllDeclaredClasses(Class) + */ + public static void registerAllDeclaredClasses(ResolvedJavaType declaringType) { + RuntimeReflection.registerAllDeclaredClasses(OriginalClassProvider.getJavaClass(declaringType)); + } + + /** + * @see RuntimeReflection#registerAllMethods(Class) + */ + public static void registerAllMethods(ResolvedJavaType declaringType) { + RuntimeReflection.registerAllMethods(OriginalClassProvider.getJavaClass(declaringType)); + } + + /** + * @see RuntimeReflection#registerAllDeclaredMethods(Class) + */ + public static void registerAllDeclaredMethods(ResolvedJavaType declaringType) { + RuntimeReflection.registerAllDeclaredMethods(OriginalClassProvider.getJavaClass(declaringType)); + } + + /** + * @see RuntimeReflection#registerAllConstructors(Class) + */ + public static void registerAllConstructors(ResolvedJavaType declaringType) { + RuntimeReflection.registerAllConstructors(OriginalClassProvider.getJavaClass(declaringType)); + } + + /** + * @see RuntimeReflection#registerAllDeclaredConstructors(Class) + */ + public static void registerAllDeclaredConstructors(ResolvedJavaType declaringType) { + RuntimeReflection.registerAllDeclaredConstructors(OriginalClassProvider.getJavaClass(declaringType)); + } + + /** + * @see RuntimeReflection#registerAllFields(Class) + */ + public static void registerAllFields(ResolvedJavaType declaringType) { + RuntimeReflection.registerAllFields(OriginalClassProvider.getJavaClass(declaringType)); + } + + /** + * @see RuntimeReflection#registerAllDeclaredFields(Class) + */ + public static void registerAllDeclaredFields(ResolvedJavaType declaringType) { + RuntimeReflection.registerAllDeclaredFields(OriginalClassProvider.getJavaClass(declaringType)); + } + + /** + * @see RuntimeReflection#registerAllNestMembers(Class) + */ + public static void registerAllNestMembers(ResolvedJavaType declaringType) { + RuntimeReflection.registerAllNestMembers(OriginalClassProvider.getJavaClass(declaringType)); + } + + /** + * @see RuntimeReflection#registerAllPermittedSubclasses(Class) + */ + public static void registerAllPermittedSubclasses(ResolvedJavaType declaringType) { + RuntimeReflection.registerAllPermittedSubclasses(OriginalClassProvider.getJavaClass(declaringType)); + } + + /** + * @see RuntimeReflection#registerAllRecordComponents(Class) + */ + public static void registerAllRecordComponents(ResolvedJavaType declaringType) { + RuntimeReflection.registerAllRecordComponents(OriginalClassProvider.getJavaClass(declaringType)); + } + + /** + * @see RuntimeReflection#registerAllSigners(Class) + */ + public static void registerAllSigners(ResolvedJavaType declaringType) { + RuntimeReflection.registerAllSigners(OriginalClassProvider.getJavaClass(declaringType)); + } + + /** + * @see RuntimeReflection#registerForReflectiveInstantiation(Class...) + */ + public static void registerForReflectiveInstantiation(ResolvedJavaType... types) { + for (ResolvedJavaType type : types) { + RuntimeReflection.registerForReflectiveInstantiation(OriginalClassProvider.getJavaClass(type)); + } + } + + private JVMCIRuntimeReflection() { + } +} diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIRuntimeSerialization.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIRuntimeSerialization.java new file mode 100644 index 000000000000..affbff207239 --- /dev/null +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccess/JVMCIRuntimeSerialization.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2025, 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.svm.hosted.dynamicaccess; + +import java.util.Arrays; + +import org.graalvm.nativeimage.hosted.RuntimeSerialization; + +import com.oracle.svm.util.OriginalClassProvider; + +import jdk.vm.ci.meta.ResolvedJavaType; + +/** + * Mirror of {@link RuntimeSerialization} using JVMCI types. + *

+ * This API is deprecated; use {@link JVMCIReflectiveAccess} instead. + */ +public final class JVMCIRuntimeSerialization { + /** + * @see RuntimeSerialization#registerIncludingAssociatedClasses(Class) + */ + public static void registerIncludingAssociatedClasses(ResolvedJavaType type) { + RuntimeSerialization.registerIncludingAssociatedClasses(OriginalClassProvider.getJavaClass(type)); + } + + /** + * @see RuntimeSerialization#register(Class...) + */ + public static void register(ResolvedJavaType... types) { + for (ResolvedJavaType type : types) { + RuntimeSerialization.register(OriginalClassProvider.getJavaClass(type)); + } + } + + /** + * @see RuntimeSerialization#registerLambdaCapturingClass(Class) + */ + public static void registerLambdaCapturingClass(ResolvedJavaType lambdaCapturingType) { + RuntimeSerialization.registerLambdaCapturingClass(OriginalClassProvider.getJavaClass(lambdaCapturingType)); + } + + /** + * @see RuntimeSerialization#registerProxyClass(Class...) + */ + public static void registerProxyClass(ResolvedJavaType... implementedInterfaces) { + Class[] reflectionImplementedInterfaces = Arrays.stream(implementedInterfaces).map(OriginalClassProvider::getJavaClass).toArray(Class[]::new); + RuntimeSerialization.registerProxyClass(reflectionImplementedInterfaces); + } + + private JVMCIRuntimeSerialization() { + } +}