Skip to content

Commit 778f204

Browse files
committed
New API, within new metadata package.
1 parent 4dc8dbd commit 778f204

23 files changed

+961
-542
lines changed

sdk/src/org.graalvm.nativeimage/snapshot.sigtest

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,10 +1004,10 @@ meth public abstract java.nio.file.Path getImagePath()
10041004
CLSS public abstract interface static org.graalvm.nativeimage.hosted.Feature$AfterRegistrationAccess
10051005
outer org.graalvm.nativeimage.hosted.Feature
10061006
intf org.graalvm.nativeimage.hosted.Feature$FeatureAccess
1007-
meth public abstract org.graalvm.nativeimage.hosted.RuntimeJNIAccess getRuntimeJNIAccess()
1008-
meth public abstract org.graalvm.nativeimage.hosted.RuntimeReflection getRuntimeReflection()
1009-
meth public abstract org.graalvm.nativeimage.hosted.RuntimeResourceAccess getRuntimeResourceAccess()
1010-
meth public abstract org.graalvm.nativeimage.hosted.RuntimeForeignAccess getRuntimeForeignAccess()
1007+
meth public abstract org.graalvm.nativeimage.metadata.JNIAccess getJNIAccess()
1008+
meth public abstract org.graalvm.nativeimage.metadata.ReflectionAccess getReflectionAccess()
1009+
meth public abstract org.graalvm.nativeimage.metadata.ResourceAccess getResourceAccess()
1010+
meth public abstract org.graalvm.nativeimage.metadata.ForeignAccess getForeignAccess()
10111011

10121012
CLSS public abstract interface static org.graalvm.nativeimage.hosted.Feature$BeforeAnalysisAccess
10131013
outer org.graalvm.nativeimage.hosted.Feature
@@ -1097,34 +1097,23 @@ meth public !varargs static void initializeAtRunTime(java.lang.Class<?>[])
10971097
meth public !varargs static void initializeAtRunTime(java.lang.String[])
10981098
supr java.lang.Object
10991099

1100-
CLSS public abstract interface org.graalvm.nativeimage.hosted.RuntimeForeignAccess
1100+
CLSS public final org.graalvm.nativeimage.hosted.RuntimeForeignAccess
11011101
meth public !varargs static void registerForDirectUpcall(java.lang.invoke.MethodHandle,java.lang.Object,java.lang.Object[])
11021102
meth public !varargs static void registerForDowncall(java.lang.Object,java.lang.Object[])
11031103
meth public !varargs static void registerForUpcall(java.lang.Object,java.lang.Object[])
1104-
meth public !varargs abstract void registerForDirectUpcall(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.invoke.MethodHandle,java.lang.Object,java.lang.Object[])
1105-
meth public !varargs abstract void registerForDowncall(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Object,java.lang.Object[])
1106-
meth public !varargs abstract void registerForUpcall(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Object,java.lang.Object[])
1104+
supr java.lang.Object
11071105

1108-
CLSS public abstract interface org.graalvm.nativeimage.hosted.RuntimeJNIAccess
1109-
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Class<?>[])
1110-
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.reflect.Executable[])
1111-
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.reflect.Field[])
1106+
CLSS public final org.graalvm.nativeimage.hosted.RuntimeJNIAccess
11121107
meth public !varargs static void register(java.lang.Class<?>[])
11131108
meth public !varargs static void register(java.lang.reflect.Executable[])
11141109
meth public !varargs static void register(java.lang.reflect.Field[])
1110+
supr java.lang.Object
11151111

11161112
CLSS public final org.graalvm.nativeimage.hosted.RuntimeProxyCreation
11171113
meth public !varargs static void register(java.lang.Class<?>[])
11181114
supr java.lang.Object
11191115

1120-
CLSS public abstract interface org.graalvm.nativeimage.hosted.RuntimeReflection
1121-
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Class<?>[])
1122-
meth public abstract void registerClassLookup(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.String)
1123-
meth public !varargs abstract void registerUnsafeAllocation(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Class<?>[])
1124-
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.reflect.Executable[])
1125-
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.reflect.Field[])
1126-
meth public !varargs abstract void registerForSerialization(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Class<?>[])
1127-
meth public !varargs abstract java.lang.Class<?> registerProxy(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Class<?>[])
1116+
CLSS public final org.graalvm.nativeimage.hosted.RuntimeReflection
11281117
meth public !varargs static void register(boolean,boolean,java.lang.reflect.Field[])
11291118
anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="21.1")
11301119
meth public !varargs static void register(boolean,java.lang.reflect.Field[])
@@ -1150,16 +1139,40 @@ meth public static void registerAllRecordComponents(java.lang.Class<?>)
11501139
meth public static void registerAllSigners(java.lang.Class<?>)
11511140
meth public static void registerClassLookup(java.lang.String)
11521141
meth public static void registerFieldLookup(java.lang.Class<?>,java.lang.String)
1142+
supr java.lang.Object
11531143

1154-
CLSS public abstract interface org.graalvm.nativeimage.hosted.RuntimeResourceAccess
1155-
meth public abstract void register(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Module,java.lang.String)
1156-
meth public void register(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.String)
1157-
meth public abstract void registerResourceBundle(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Module,java.lang.String)
1158-
meth public void registerResourceBundle(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.String)
1144+
CLSS public final org.graalvm.nativeimage.hosted.RuntimeResourceAccess
11591145
meth public static void addResource(java.lang.Module,java.lang.String)
11601146
meth public static void addResource(java.lang.Module,java.lang.String,byte[])
11611147
meth public static void addResourceBundle(java.lang.Module,java.lang.String)
11621148
meth public static void addResourceBundle(java.lang.Module,java.lang.String,java.util.Locale[])
1149+
supr java.lang.Object
1150+
1151+
CLSS public abstract interface org.graalvm.nativeimage.metadata.ReflectionAccess
1152+
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Class<?>[])
1153+
meth public abstract void registerClassLookup(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.String)
1154+
meth public !varargs abstract void registerUnsafeAllocation(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Class<?>[])
1155+
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.reflect.Executable[])
1156+
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.reflect.Field[])
1157+
meth public !varargs abstract void registerForSerialization(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Class<?>[])
1158+
meth public !varargs abstract java.lang.Class<?> registerProxy(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Class<?>[])
1159+
1160+
CLSS public abstract interface org.graalvm.nativeimage.metadata.ResourceAccess
1161+
meth public abstract void register(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Module,java.lang.String)
1162+
meth public void register(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.String)
1163+
meth public abstract void registerResourceBundle(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Module,java.lang.String)
1164+
meth public void registerResourceBundle(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.String)
1165+
1166+
CLSS public abstract interface org.graalvm.nativeimage.metadata.JNIAccess
1167+
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Class<?>[])
1168+
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.reflect.Executable[])
1169+
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.reflect.Field[])
1170+
1171+
CLSS public abstract interface org.graalvm.nativeimage.metadata.ForeignAccess
1172+
meth public !varargs abstract void registerForDirectUpcall(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.invoke.MethodHandle,java.lang.Object,java.lang.Object[])
1173+
meth public !varargs abstract void registerForDowncall(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Object,java.lang.Object[])
1174+
meth public !varargs abstract void registerForUpcall(org.graalvm.nativeimage.hosted.RegistrationCondition,java.lang.Object,java.lang.Object[])
1175+
11631176

11641177
CLSS public final org.graalvm.nativeimage.hosted.RuntimeSerialization
11651178
meth public !varargs static void register(java.lang.Class<?>[])

sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/Feature.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@
5454
import org.graalvm.nativeimage.ImageSingletons;
5555
import org.graalvm.nativeimage.Platform;
5656
import org.graalvm.nativeimage.Platforms;
57+
import org.graalvm.nativeimage.metadata.ResourceAccess;
58+
import org.graalvm.nativeimage.metadata.ReflectionAccess;
59+
import org.graalvm.nativeimage.metadata.JNIAccess;
60+
import org.graalvm.nativeimage.metadata.ForeignAccess;
5761

5862
/**
5963
* Features allow clients to intercept the native image generation and run custom initialization
@@ -177,26 +181,26 @@ interface AfterRegistrationAccess extends FeatureAccess {
177181
* reflection at runtime. All registrations should happen in
178182
* {@link Feature#afterRegistration}.
179183
*/
180-
RuntimeReflection getRuntimeReflection();
184+
ReflectionAccess getReflectionAccess();
181185

182186
/**
183187
* Returns the instance of {@link RuntimeResourceAccess} used to register resources for
184188
* runtime access. All registrations should happen in {@link Feature#afterRegistration}.
185189
*/
186-
RuntimeResourceAccess getRuntimeResourceAccess();
190+
ResourceAccess getResourceAccess();
187191

188192
/**
189193
* Returns the instance of {@link RuntimeJNIAccess} used to register elements for JNI access
190194
* at runtime. All registrations should happen in {@link Feature#afterRegistration}.
191195
*/
192-
RuntimeJNIAccess getRuntimeJNIAccess();
196+
JNIAccess getJNIAccess();
193197

194198
/**
195199
* Returns the instance of {@link RuntimeForeignAccess} used to register elements for
196200
* foreign access at runtime. All registrations should happen in
197201
* {@link Feature#afterRegistration}.
198202
*/
199-
RuntimeForeignAccess getRuntimeForeignAccess();
203+
ForeignAccess getForeignAccess();
200204
}
201205

202206
/**

sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RegistrationCondition.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,19 +41,22 @@
4141
package org.graalvm.nativeimage.hosted;
4242

4343
import org.graalvm.nativeimage.impl.TypeReachabilityCondition;
44+
import org.graalvm.nativeimage.metadata.ForeignAccess;
45+
import org.graalvm.nativeimage.metadata.JNIAccess;
46+
import org.graalvm.nativeimage.metadata.ReflectionAccess;
47+
import org.graalvm.nativeimage.metadata.ResourceAccess;
4448

4549
/**
46-
* A condition that must be satisfied to include elements for dynamic access (e.g., reflection,
50+
* A condition that must be satisfied to register elements for dynamic access (e.g., reflection,
4751
* serialization, JNI access, resource access, and foreign access at runtime).
48-
* {@link RegistrationCondition} is used in conjunction with:
52+
* {@link RegistrationCondition} is used for programmatic metadata registration in conjunction with:
4953
* <ul>
50-
* <li>{@link RuntimeReflection}</li>
51-
* <li>{@link RuntimeResourceAccess}</li>
52-
* <li>{@link RuntimeJNIAccess}</li>
53-
* <li>{@link RuntimeForeignAccess}</li>
54+
* <li>{@link ReflectionAccess}</li>
55+
* <li>{@link ResourceAccess}</li>
56+
* <li>{@link JNIAccess}</li>
57+
* <li>{@link ForeignAccess}</li>
5458
* </ul>
55-
* to programmatically register metadata. Conditions prevent unnecessary growth of the native binary
56-
* size.
59+
* Conditions prevent unnecessary growth of the native binary size.
5760
* <p>
5861
* There are currently two types of conditions:
5962
* <ul>

sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeForeignAccess.java

Lines changed: 13 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -49,74 +49,7 @@
4949
import org.graalvm.nativeimage.impl.RuntimeForeignAccessSupport;
5050

5151
@Platforms(Platform.HOSTED_ONLY.class)
52-
public interface RuntimeForeignAccess {
53-
54-
/**
55-
* Registers the provided function descriptor and options pair at image build time for downcalls
56-
* into foreign code, if the {@code condition} is satisfied. Required to get a downcall method
57-
* handle using {@link java.lang.foreign.Linker#downcallHandle} for the same descriptor and
58-
* options at runtime.
59-
* <p>
60-
* Even though this method is weakly typed for compatibility reasons, runtime checks will be
61-
* performed to ensure that the arguments have the expected type. It will be deprecated in favor
62-
* of strongly typed variant as soon as possible.
63-
*
64-
* @param condition represents the condition that needs to be satisfied in order to register
65-
* target resources.
66-
* @param desc A {@link java.lang.foreign.FunctionDescriptor} to register for downcalls.
67-
* @param options An array of {@link java.lang.foreign.Linker.Option} used for the downcalls.
68-
*
69-
* @since 23.1
70-
*/
71-
void registerForDowncall(RegistrationCondition condition, Object desc, Object... options);
72-
73-
/**
74-
* Registers the provided function descriptor and options pair at image build time for upcalls
75-
* from foreign code, if the {@code condition} is satisfied. Required to get an upcall stub
76-
* function pointer using {@link java.lang.foreign.Linker#upcallStub} for the same descriptor
77-
* and options at runtime.
78-
* <p>
79-
* Even though this method is weakly typed for compatibility reasons, runtime checks will be
80-
* performed to ensure that the arguments have the expected type. It will be deprecated in favor
81-
* of strongly typed variant as soon as possible.
82-
*
83-
* @param condition represents the condition that needs to be satisfied in order to register
84-
* target resources.
85-
* @param desc A {@link java.lang.foreign.FunctionDescriptor} to register for upcalls.
86-
* @param options An array of {@link java.lang.foreign.Linker.Option} used for the upcalls.
87-
*
88-
* @since 24.1
89-
*/
90-
void registerForUpcall(RegistrationCondition condition, Object desc, Object... options);
91-
92-
/**
93-
* Registers a specific static method (denoted by a method handle) as a fast upcall target, if
94-
* the {@code condition} is satisfied. This will create a specialized upcall stub that will
95-
* invoke only the specified method, which is much faster than using
96-
* {@link #registerForUpcall(Object, Object...)}).
97-
* <p>
98-
* The provided method handle must be a direct method handle. Those are most commonly created
99-
* using {@link java.lang.invoke.MethodHandles.Lookup#findStatic(Class, String, MethodType)}.
100-
* However, a strict requirement is that it must be possible to create a non-empty descriptor
101-
* for the method handle using {@link MethodHandle#describeConstable()}. The denoted static
102-
* method will also be registered for reflective access since run-time code will also create a
103-
* method handle to denoted static method.
104-
* </p>
105-
* <p>
106-
* Even though this method is weakly typed for compatibility reasons, runtime checks will be
107-
* performed to ensure that the arguments have the expected type. It will be deprecated in favor
108-
* of strongly typed variant as soon as possible.
109-
* </p>
110-
*
111-
* @param condition represents the condition that needs to be satisfied in order to register
112-
* target resources.
113-
* @param target A direct method handle denoting a static method.
114-
* @param desc A {@link java.lang.foreign.FunctionDescriptor} to register for upcalls.
115-
* @param options An array of {@link java.lang.foreign.Linker.Option} used for the upcalls.
116-
*
117-
* @since 24.2
118-
*/
119-
void registerForDirectUpcall(RegistrationCondition condition, MethodHandle target, Object desc, Object... options);
52+
public final class RuntimeForeignAccess {
12053

12154
/**
12255
* Registers the provided function descriptor and options pair at image build time for downcalls
@@ -127,13 +60,15 @@ public interface RuntimeForeignAccess {
12760
* Even though this method is weakly typed for compatibility reasons, runtime checks will be
12861
* performed to ensure that the arguments have the expected type. It will be deprecated in favor
12962
* of strongly typed variant as soon as possible.
63+
* <p>
64+
* This API is deprecated; use {@link org.graalvm.nativeimage.metadata.ForeignAccess} instead.
13065
*
13166
* @param desc A {@link java.lang.foreign.FunctionDescriptor} to register for downcalls.
13267
* @param options An array of {@link java.lang.foreign.Linker.Option} used for the downcalls.
13368
*
13469
* @since 23.1
13570
*/
136-
static void registerForDowncall(Object desc, Object... options) {
71+
public static void registerForDowncall(Object desc, Object... options) {
13772
ImageSingletons.lookup(RuntimeForeignAccessSupport.class).registerForDowncall(RegistrationCondition.always(), desc, options);
13873
}
13974

@@ -145,13 +80,15 @@ static void registerForDowncall(Object desc, Object... options) {
14580
* Even though this method is weakly typed for compatibility reasons, runtime checks will be
14681
* performed to ensure that the arguments have the expected type. It will be deprecated in favor
14782
* of strongly typed variant as soon as possible.
83+
* <p>
84+
* This API is deprecated; use {@link org.graalvm.nativeimage.metadata.ForeignAccess} instead.
14885
*
14986
* @param desc A {@link java.lang.foreign.FunctionDescriptor} to register for upcalls.
15087
* @param options An array of {@link java.lang.foreign.Linker.Option} used for the upcalls.
15188
*
15289
* @since 24.1
15390
*/
154-
static void registerForUpcall(Object desc, Object... options) {
91+
public static void registerForUpcall(Object desc, Object... options) {
15592
ImageSingletons.lookup(RuntimeForeignAccessSupport.class).registerForUpcall(RegistrationCondition.always(), desc, options);
15693
}
15794

@@ -172,14 +109,19 @@ static void registerForUpcall(Object desc, Object... options) {
172109
* performed to ensure that the arguments have the expected type. It will be deprecated in favor
173110
* of strongly typed variant as soon as possible.
174111
* </p>
112+
* <p>
113+
* This API is deprecated; use {@link org.graalvm.nativeimage.metadata.ForeignAccess} instead.
175114
*
176115
* @param target A direct method handle denoting a static method.
177116
* @param desc A {@link java.lang.foreign.FunctionDescriptor} to register for upcalls.
178117
* @param options An array of {@link java.lang.foreign.Linker.Option} used for the upcalls.
179118
*
180119
* @since 24.2
181120
*/
182-
static void registerForDirectUpcall(MethodHandle target, Object desc, Object... options) {
121+
public static void registerForDirectUpcall(MethodHandle target, Object desc, Object... options) {
183122
ImageSingletons.lookup(RuntimeForeignAccessSupport.class).registerForDirectUpcall(RegistrationCondition.always(), target, desc, options);
184123
}
124+
125+
private RuntimeForeignAccess() {
126+
}
185127
}

0 commit comments

Comments
 (0)