Skip to content

Commit 718f96f

Browse files
committed
New API, within new metadata package.
1 parent d832895 commit 718f96f

25 files changed

+1097
-616
lines changed

sdk/mx.sdk/suite.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -976,6 +976,7 @@ class UniversalDetector {
976976
"exports" : [
977977
"com.oracle.svm.core.annotate",
978978
"org.graalvm.nativeimage.hosted",
979+
"org.graalvm.nativeimage.dynamicaccess",
979980
"org.graalvm.nativeimage.c.function",
980981
"org.graalvm.nativeimage.c.struct",
981982
"org.graalvm.nativeimage.c.type",

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

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,10 +1020,10 @@ meth public abstract java.nio.file.Path getImagePath()
10201020
CLSS public abstract interface static org.graalvm.nativeimage.hosted.Feature$AfterRegistrationAccess
10211021
outer org.graalvm.nativeimage.hosted.Feature
10221022
intf org.graalvm.nativeimage.hosted.Feature$FeatureAccess
1023-
meth public abstract org.graalvm.nativeimage.hosted.RuntimeJNIAccess getRuntimeJNIAccess()
1024-
meth public abstract org.graalvm.nativeimage.hosted.RuntimeReflection getRuntimeReflection()
1025-
meth public abstract org.graalvm.nativeimage.hosted.RuntimeResourceAccess getRuntimeResourceAccess()
1026-
meth public abstract org.graalvm.nativeimage.hosted.RuntimeForeignAccess getRuntimeForeignAccess()
1023+
meth public abstract org.graalvm.nativeimage.dynamicaccess.JNIAccess getJNIAccess()
1024+
meth public abstract org.graalvm.nativeimage.dynamicaccess.ReflectiveAccess getReflectiveAccess()
1025+
meth public abstract org.graalvm.nativeimage.dynamicaccess.ResourceAccess getResourceAccess()
1026+
meth public abstract org.graalvm.nativeimage.dynamicaccess.ForeignAccess getForeignAccess()
10271027

10281028
CLSS public abstract interface static org.graalvm.nativeimage.hosted.Feature$BeforeAnalysisAccess
10291029
outer org.graalvm.nativeimage.hosted.Feature
@@ -1113,34 +1113,23 @@ meth public !varargs static void initializeAtRunTime(java.lang.Class<?>[])
11131113
meth public !varargs static void initializeAtRunTime(java.lang.String[])
11141114
supr java.lang.Object
11151115

1116-
CLSS public abstract interface org.graalvm.nativeimage.hosted.RuntimeForeignAccess
1116+
CLSS public final org.graalvm.nativeimage.hosted.RuntimeForeignAccess
11171117
meth public !varargs static void registerForDirectUpcall(java.lang.invoke.MethodHandle,java.lang.Object,java.lang.Object[])
11181118
meth public !varargs static void registerForDowncall(java.lang.Object,java.lang.Object[])
11191119
meth public !varargs static void registerForUpcall(java.lang.Object,java.lang.Object[])
1120-
meth public !varargs abstract void registerForDirectUpcall(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.invoke.MethodHandle,java.lang.Object,java.lang.Object[])
1121-
meth public !varargs abstract void registerForDowncall(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.Object,java.lang.Object[])
1122-
meth public !varargs abstract void registerForUpcall(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.Object,java.lang.Object[])
1123-
1124-
CLSS public abstract interface org.graalvm.nativeimage.hosted.RuntimeJNIAccess
1125-
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.Class<?>[])
1126-
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.reflect.Executable[])
1127-
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.reflect.Field[])
1120+
supr java.lang.Object
1121+
1122+
CLSS public final org.graalvm.nativeimage.hosted.RuntimeJNIAccess
11281123
meth public !varargs static void register(java.lang.Class<?>[])
11291124
meth public !varargs static void register(java.lang.reflect.Executable[])
11301125
meth public !varargs static void register(java.lang.reflect.Field[])
1126+
supr java.lang.Object
11311127

11321128
CLSS public final org.graalvm.nativeimage.hosted.RuntimeProxyCreation
11331129
meth public !varargs static void register(java.lang.Class<?>[])
11341130
supr java.lang.Object
11351131

1136-
CLSS public abstract interface org.graalvm.nativeimage.hosted.RuntimeReflection
1137-
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.Class<?>[])
1138-
meth public abstract void registerClassLookup(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.String)
1139-
meth public !varargs abstract void registerUnsafeAllocation(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.Class<?>[])
1140-
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.reflect.Executable[])
1141-
meth public !varargs abstract void register(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.reflect.Field[])
1142-
meth public !varargs abstract void registerForSerialization(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.Class<?>[])
1143-
meth public !varargs abstract java.lang.Class<?> registerProxy(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.Class<?>[])
1132+
CLSS public final org.graalvm.nativeimage.hosted.RuntimeReflection
11441133
meth public !varargs static void register(boolean,boolean,java.lang.reflect.Field[])
11451134
anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="21.1")
11461135
meth public !varargs static void register(boolean,java.lang.reflect.Field[])
@@ -1166,16 +1155,41 @@ meth public static void registerAllRecordComponents(java.lang.Class<?>)
11661155
meth public static void registerAllSigners(java.lang.Class<?>)
11671156
meth public static void registerClassLookup(java.lang.String)
11681157
meth public static void registerFieldLookup(java.lang.Class<?>,java.lang.String)
1158+
supr java.lang.Object
11691159

1170-
CLSS public abstract interface org.graalvm.nativeimage.hosted.RuntimeResourceAccess
1171-
meth public abstract void register(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.Module,java.lang.String)
1172-
meth public void register(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.String)
1173-
meth public abstract void registerResourceBundle(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.Module,java.lang.String)
1174-
meth public void registerResourceBundle(org.graalvm.nativeimage.hosted.AccessCondition,java.lang.String)
1160+
CLSS public final org.graalvm.nativeimage.hosted.RuntimeResourceAccess
11751161
meth public static void addResource(java.lang.Module,java.lang.String)
11761162
meth public static void addResource(java.lang.Module,java.lang.String,byte[])
11771163
meth public static void addResourceBundle(java.lang.Module,java.lang.String)
11781164
meth public static void addResourceBundle(java.lang.Module,java.lang.String,java.util.Locale[])
1165+
supr java.lang.Object
1166+
1167+
CLSS public abstract interface org.graalvm.nativeimage.dynamicaccess.ReflectiveAccess
1168+
meth public !varargs abstract void register(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.Class<?>[])
1169+
meth public abstract void registerClassLookup(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.String)
1170+
meth public !varargs abstract void registerUnsafeAllocation(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.Class<?>[])
1171+
meth public !varargs abstract void register(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.reflect.Executable[])
1172+
meth public !varargs abstract void register(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.reflect.Field[])
1173+
meth public !varargs abstract void registerForSerialization(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.Class<?>[])
1174+
meth public !varargs abstract java.lang.Class<?> registerProxy(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.Class<?>[])
1175+
1176+
CLSS public abstract interface org.graalvm.nativeimage.dynamicaccess.ResourceAccess
1177+
meth public abstract void register(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.Module,java.lang.String)
1178+
meth public void register(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.String)
1179+
meth public abstract void registerResourceBundle(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.util.ResourceBundle)
1180+
meth public abstract void registerResourceBundle(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.Module,java.lang.String)
1181+
meth public void registerResourceBundle(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.String)
1182+
1183+
CLSS public abstract interface org.graalvm.nativeimage.dynamicaccess.JNIAccess
1184+
meth public !varargs abstract void register(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.Class<?>[])
1185+
meth public !varargs abstract void register(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.reflect.Executable[])
1186+
meth public !varargs abstract void register(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.reflect.Field[])
1187+
1188+
CLSS public abstract interface org.graalvm.nativeimage.dynamicaccess.ForeignAccess
1189+
meth public !varargs abstract void registerForDirectUpcall(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.invoke.MethodHandle,java.lang.Object,java.lang.Object[])
1190+
meth public !varargs abstract void registerForDowncall(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.Object,java.lang.Object[])
1191+
meth public !varargs abstract void registerForUpcall(org.graalvm.nativeimage.dynamicaccess.AccessCondition,java.lang.Object,java.lang.Object[])
1192+
11791193

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

sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/dynamicaccess/AccessCondition.java

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,10 @@
4141
package org.graalvm.nativeimage.dynamicaccess;
4242

4343
import org.graalvm.nativeimage.impl.TypeReachabilityCondition;
44-
import org.graalvm.nativeimage.dynamicaccess.ForeignAccess;
45-
import org.graalvm.nativeimage.dynamicaccess.JNIAccess;
46-
import org.graalvm.nativeimage.dynamicaccess.ReflectiveAccess;
47-
import org.graalvm.nativeimage.dynamicaccess.ResourceAccess;
4844

4945
/**
5046
* A condition that must be satisfied to register elements for dynamic access (i.e., reflection,
51-
* serialization, JNI access, resource access, and foreign access at runtime).
47+
* serialization, JNI access, resource access, and foreign access at run time).
5248
* {@link AccessCondition} is used for programmatic metadata registration in conjunction with:
5349
* <ul>
5450
* <li>{@link ReflectiveAccess}</li>
@@ -67,7 +63,12 @@
6763
* </ul>
6864
* <p>
6965
* Conditions can only be created via the {@link #unconditional} and {@link #typeReached} factory
70-
* methods.
66+
* methods. These methods are best used with static import methods. For example:
67+
*
68+
* <pre>{@code
69+
* reflection.register(unconditional(), ReflectivelyAccessed.class);
70+
* reflection.register(typeReached(ConditionType.class), ConditionallyAccessed.class)
71+
* }</pre>
7172
*
7273
* @since 25.0
7374
*/
@@ -86,46 +87,47 @@ static AccessCondition unconditional() {
8687
}
8788

8889
/**
89-
* Creates the {@code typeReached} condition that is satisfied when the type is reached at
90-
* runtime. A type is reached at runtime, right before the class-initialization routine starts
91-
* for that type, or any of the type's subtypes are reached. Metadata predicated with this
92-
* condition is only included if the condition is satisfied.
90+
* Creates the {@code typeReached} condition that is satisfied when the type is reached at run
91+
* time. A type is reached at run time, right before the class-initialization routine starts for
92+
* that type, or any of the type's subtypes are reached. Elements predicated with this condition
93+
* will be included in the image only if the type is <em>reachable</em> at build time, but will
94+
* be accessible when the type is <em>reached</em> at run time.
9395
* <p>
9496
* <strong>Example:</strong>
9597
*
9698
* <pre>{@code
9799
* class SuperType {
98100
* static {
99-
* // ConditionType reached (subtype reached) => metadata is available
101+
* // ConditionType reached (subtype reached) => element access allowed
100102
* }
101103
* }
102104
*
103105
* class ConditionType extends SuperType {
104106
* static {
105-
* // ConditionType reached (before static initializer) => metadata is available
107+
* // ConditionType reached (before static initializer) => element access allowed
106108
* }
107109
*
108110
* static ConditionType singleton() {
109-
* // ConditionType reached (already initialized) => metadata is available
111+
* // ConditionType reached (already initialized) => element access allowed
110112
* }
111113
* }
112114
*
113115
* public class App {
114116
* public static void main(String[] args) {
115-
* // ConditionType not reached => metadata is not available
117+
* // ConditionType not reached => element access not allowed
116118
* Class<?> clazz = ConditionType.class;
117119
* // ConditionType not reached (ConditionType.class doesn't start class initialization)
118-
* // => metadata is not available
120+
* // => element access not allowed
119121
* ConditionType.singleton();
120-
* // ConditionType reached (already initialized) => metadata is available
122+
* // ConditionType reached (already initialized) => element access allowed
121123
* }
122124
* }
123125
* }</pre>
124126
* <p>
125127
* Type is also reached, if it is marked as {@code --initialize-at-build-time} or any of its
126128
* subtypes are marked as {@code --initialize-at-build-time} and they exist on the classpath.
127-
* Array types are never marked as reached and therefore cannot be used as the type in a
128-
* condition.
129+
* Array types (e.g., <code>int[]</code>) are never marked as reached and therefore cannot be
130+
* used as the <code>type</code> in a condition.
129131
*
130132
* @param type the type that has to be reached for this condition to be satisfied, must not be
131133
* {@code null}

0 commit comments

Comments
 (0)