diff --git a/sdk/mx.sdk/suite.py b/sdk/mx.sdk/suite.py
index cc30ee75be41..406b656fef24 100644
--- a/sdk/mx.sdk/suite.py
+++ b/sdk/mx.sdk/suite.py
@@ -904,6 +904,7 @@ class UniversalDetector {
"exports" : [
"com.oracle.svm.core.annotate",
"org.graalvm.nativeimage.hosted",
+ "org.graalvm.nativeimage.dynamicaccess",
"org.graalvm.nativeimage.c.function",
"org.graalvm.nativeimage.c.struct",
"org.graalvm.nativeimage.c.type",
diff --git a/sdk/src/org.graalvm.nativeimage/snapshot.sigtest b/sdk/src/org.graalvm.nativeimage/snapshot.sigtest
index 24cb6cb5bc57..d426d97b3548 100644
--- a/sdk/src/org.graalvm.nativeimage/snapshot.sigtest
+++ b/sdk/src/org.graalvm.nativeimage/snapshot.sigtest
@@ -1089,6 +1089,10 @@ CLSS public abstract interface org.graalvm.nativeimage.hosted.FieldValueTransfor
meth public abstract java.lang.Object transform(java.lang.Object,java.lang.Object)
meth public boolean isAvailable()
+CLSS public abstract interface org.graalvm.nativeimage.dynamicaccess.AccessCondition
+meth public static org.graalvm.nativeimage.dynamicaccess.AccessCondition alwaysTrue()
+meth public static org.graalvm.nativeimage.dynamicaccess.AccessCondition typeReached(java.lang.Class>)
+
CLSS public final org.graalvm.nativeimage.hosted.RuntimeClassInitialization
meth public !varargs static void initializeAtBuildTime(java.lang.Class>[])
meth public !varargs static void initializeAtBuildTime(java.lang.String[])
diff --git a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/dynamicaccess/AccessCondition.java b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/dynamicaccess/AccessCondition.java
new file mode 100644
index 000000000000..56d12c68c2bc
--- /dev/null
+++ b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/dynamicaccess/AccessCondition.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * The Universal Permissive License (UPL), Version 1.0
+ *
+ * Subject to the condition set forth below, permission is hereby granted to any
+ * person obtaining a copy of this software, associated documentation and/or
+ * data (collectively the "Software"), free of charge and under any and all
+ * copyright rights in the Software, and any and all patent rights owned or
+ * freely licensable by each licensor hereunder covering either (i) the
+ * unmodified Software as contributed to or provided by such licensor, or (ii)
+ * the Larger Works (as defined below), to deal in both
+ *
+ * (a) the Software, and
+ *
+ * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if
+ * one is included with the Software each a "Larger Work" to which the Software
+ * is contributed by such licensors),
+ *
+ * without restriction, including without limitation the rights to copy, create
+ * derivative works of, display, perform, and distribute the Software and make,
+ * use, sell, offer for sale, import, export, have made, and have sold the
+ * Software and the Larger Work(s), and to sublicense the foregoing rights on
+ * either these or other terms.
+ *
+ * This license is subject to the following condition:
+ *
+ * The above copyright notice and either this complete permission notice or at a
+ * minimum a reference to the UPL must be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+package org.graalvm.nativeimage.dynamicaccess;
+
+import org.graalvm.nativeimage.impl.TypeReachabilityCondition;
+
+/**
+ * A condition that must be satisfied to register elements for dynamic access (e.g., reflection,
+ * serialization, JNI access, resource access, and foreign access at runtime). Conditions prevent
+ * unnecessary growth of the native binary size.
+ *
+ * There are currently two types of conditions:
+ *
+ *
{@link #typeReached} - satisfied when the type is both reachable by static analysis at build
+ * time, and reached at run time.
+ *
{@link #alwaysTrue} - a condition that is always satisfied.
+ *
+ *
+ * Conditions can be created via the {@link #alwaysTrue} and {@link #typeReached} factory methods.
+ *
+ * @since 25.0
+ */
+public interface AccessCondition {
+
+ /**
+ * Creates the condition that is always satisfied. Any metadata that is predicated with this
+ * condition will always be included.
+ *
+ * @return instance of the condition
+ *
+ * @since 25.0
+ */
+ static AccessCondition alwaysTrue() {
+ return TypeReachabilityCondition.JAVA_LANG_OBJECT_REACHED;
+ }
+
+ /**
+ * Creates the {@code typeReached} condition that is satisfied when the type is reached at
+ * runtime. A type is reached at runtime, if the class-initialization is triggered for that type
+ * (right before the first step of initialization described in
+ * Java Spec
+ * - Initialization), or any of the type's subtypes are reached. Metadata predicated with
+ * this condition is only included if the condition is satisfied.
+ *
+ * Example:
+ *
+ *
{@code
+ * public class App {
+ * public static void main(String[] args) {
+ * // ConditionType not reached => metadata is not available
+ * Class> clazz = ConditionType.class;
+ * // ConditionType not reached (ConditionType.class doesn't start class initialization)
+ * // => metadata is not available
+ * ConditionType.singleton();
+ * // ConditionType reached (already initialized) => metadata is available
+ * }
+ * }
+ *
+ * class SuperType {
+ * static {
+ * // ConditionType reached (subtype reached) => metadata is available
+ * }
+ * }
+ *
+ * class ConditionType extends SuperType {
+ * static {
+ * // ConditionType reached (before static initializer) => metadata is available
+ * }
+ *
+ * static ConditionType singleton() {
+ * // ConditionType reached (already initialized) => metadata is available
+ * }
+ * }
+ * }
+ *
+ * Type is also reached, if it is marked as {@code --initialize-at-build-time} or any of its
+ * subtypes on the classpath are marked as {@code --initialize-at-build-time}. Array types are
+ * never marked as reached and therefore cannot be used as the type in a condition.
+ *
+ * @param type the type that has to be reached for this condition to be satisfied, must not be
+ * {@code null}
+ *
+ * @return instance of the condition
+ *
+ * @since 25.0
+ */
+ static AccessCondition typeReached(Class> type) {
+ return TypeReachabilityCondition.create(type, true);
+ }
+}
diff --git a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeForeignAccess.java b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeForeignAccess.java
index 2b5aa887f6ce..c49bf2bc8951 100644
--- a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeForeignAccess.java
+++ b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeForeignAccess.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* The Universal Permissive License (UPL), Version 1.0
@@ -46,7 +46,7 @@
import org.graalvm.nativeimage.ImageSingletons;
import org.graalvm.nativeimage.Platform;
import org.graalvm.nativeimage.Platforms;
-import org.graalvm.nativeimage.impl.ConfigurationCondition;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
import org.graalvm.nativeimage.impl.RuntimeForeignAccessSupport;
@Platforms(Platform.HOSTED_ONLY.class)
@@ -68,7 +68,7 @@ public final class RuntimeForeignAccess {
* @since 23.1
*/
public static void registerForDowncall(Object desc, Object... options) {
- ImageSingletons.lookup(RuntimeForeignAccessSupport.class).registerForDowncall(ConfigurationCondition.alwaysTrue(), desc, options);
+ ImageSingletons.lookup(RuntimeForeignAccessSupport.class).registerForDowncall(AccessCondition.alwaysTrue(), desc, options);
}
/**
@@ -86,7 +86,7 @@ public static void registerForDowncall(Object desc, Object... options) {
* @since 24.1
*/
public static void registerForUpcall(Object desc, Object... options) {
- ImageSingletons.lookup(RuntimeForeignAccessSupport.class).registerForUpcall(ConfigurationCondition.alwaysTrue(), desc, options);
+ ImageSingletons.lookup(RuntimeForeignAccessSupport.class).registerForUpcall(AccessCondition.alwaysTrue(), desc, options);
}
/**
@@ -114,7 +114,7 @@ public static void registerForUpcall(Object desc, Object... options) {
* @since 24.2
*/
public static void registerForDirectUpcall(MethodHandle target, Object desc, Object... options) {
- ImageSingletons.lookup(RuntimeForeignAccessSupport.class).registerForDirectUpcall(ConfigurationCondition.alwaysTrue(), target, desc, options);
+ ImageSingletons.lookup(RuntimeForeignAccessSupport.class).registerForDirectUpcall(AccessCondition.alwaysTrue(), target, desc, options);
}
private RuntimeForeignAccess() {
diff --git a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeJNIAccess.java b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeJNIAccess.java
index e5c044517406..6b7b383f0182 100644
--- a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeJNIAccess.java
+++ b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeJNIAccess.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* The Universal Permissive License (UPL), Version 1.0
@@ -46,7 +46,7 @@
import org.graalvm.nativeimage.ImageSingletons;
import org.graalvm.nativeimage.Platform;
import org.graalvm.nativeimage.Platforms;
-import org.graalvm.nativeimage.impl.ConfigurationCondition;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
import org.graalvm.nativeimage.impl.RuntimeJNIAccessSupport;
/**
@@ -66,7 +66,7 @@ public final class RuntimeJNIAccess {
* @since 22.3
*/
public static void register(Class>... classes) {
- ImageSingletons.lookup(RuntimeJNIAccessSupport.class).register(ConfigurationCondition.alwaysTrue(), classes);
+ ImageSingletons.lookup(RuntimeJNIAccessSupport.class).register(AccessCondition.alwaysTrue(), classes);
}
/**
@@ -79,7 +79,7 @@ public static void register(Class>... classes) {
* @since 22.3
*/
public static void register(Executable... methods) {
- ImageSingletons.lookup(RuntimeJNIAccessSupport.class).register(ConfigurationCondition.alwaysTrue(), false, methods);
+ ImageSingletons.lookup(RuntimeJNIAccessSupport.class).register(AccessCondition.alwaysTrue(), false, methods);
}
/**
@@ -92,7 +92,7 @@ public static void register(Executable... methods) {
* @since 22.3
*/
public static void register(Field... fields) {
- ImageSingletons.lookup(RuntimeJNIAccessSupport.class).register(ConfigurationCondition.alwaysTrue(), false, fields);
+ ImageSingletons.lookup(RuntimeJNIAccessSupport.class).register(AccessCondition.alwaysTrue(), false, fields);
}
private RuntimeJNIAccess() {
diff --git a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeProxyCreation.java b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeProxyCreation.java
index a2f4f7bb781e..59165d92485c 100644
--- a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeProxyCreation.java
+++ b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeProxyCreation.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* The Universal Permissive License (UPL), Version 1.0
@@ -43,7 +43,7 @@
import org.graalvm.nativeimage.ImageSingletons;
import org.graalvm.nativeimage.Platform;
import org.graalvm.nativeimage.Platforms;
-import org.graalvm.nativeimage.impl.ConfigurationCondition;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
import org.graalvm.nativeimage.impl.RuntimeProxyCreationSupport;
/**
@@ -62,7 +62,7 @@ public final class RuntimeProxyCreation {
* @since 22.3
*/
public static void register(Class>... interfaces) {
- ImageSingletons.lookup(RuntimeProxyCreationSupport.class).addProxyClass(ConfigurationCondition.alwaysTrue(), interfaces);
+ ImageSingletons.lookup(RuntimeProxyCreationSupport.class).addProxyClass(AccessCondition.alwaysTrue(), interfaces);
}
private RuntimeProxyCreation() {
diff --git a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeReflection.java b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeReflection.java
index a4b5adb949f3..890581a458bd 100644
--- a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeReflection.java
+++ b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeReflection.java
@@ -48,7 +48,7 @@
import org.graalvm.nativeimage.ImageSingletons;
import org.graalvm.nativeimage.Platform;
import org.graalvm.nativeimage.Platforms;
-import org.graalvm.nativeimage.impl.ConfigurationCondition;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
import org.graalvm.nativeimage.impl.RuntimeReflectionSupport;
//Checkstyle: allow reflection
@@ -69,7 +69,7 @@ public final class RuntimeReflection {
* @since 19.0
*/
public static void register(Class>... classes) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).register(ConfigurationCondition.alwaysTrue(), classes);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).register(AccessCondition.alwaysTrue(), classes);
}
/**
@@ -80,7 +80,7 @@ public static void register(Class>... classes) {
* @since 23.0
*/
public static void registerClassLookup(String className) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).registerClassLookup(ConfigurationCondition.alwaysTrue(), className);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).registerClassLookup(AccessCondition.alwaysTrue(), className);
}
/**
@@ -91,7 +91,7 @@ public static void registerClassLookup(String className) {
* @since 19.0
*/
public static void register(Executable... methods) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).register(ConfigurationCondition.alwaysTrue(), false, methods);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).register(AccessCondition.alwaysTrue(), false, methods);
}
/**
@@ -103,7 +103,7 @@ public static void register(Executable... methods) {
* @since 21.3
*/
public static void registerAsQueried(Executable... methods) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).register(ConfigurationCondition.alwaysTrue(), true, methods);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).register(AccessCondition.alwaysTrue(), true, methods);
}
/**
@@ -116,7 +116,7 @@ public static void registerAsQueried(Executable... methods) {
* @since 23.0
*/
public static void registerMethodLookup(Class> declaringClass, String methodName, Class>... parameterTypes) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).registerMethodLookup(ConfigurationCondition.alwaysTrue(), declaringClass, methodName, parameterTypes);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).registerMethodLookup(AccessCondition.alwaysTrue(), declaringClass, methodName, parameterTypes);
}
/**
@@ -130,7 +130,7 @@ public static void registerMethodLookup(Class> declaringClass, String methodNa
* @since 23.0
*/
public static void registerConstructorLookup(Class> declaringClass, Class>... parameterTypes) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).registerConstructorLookup(ConfigurationCondition.alwaysTrue(), declaringClass, parameterTypes);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).registerConstructorLookup(AccessCondition.alwaysTrue(), declaringClass, parameterTypes);
}
/**
@@ -141,7 +141,7 @@ public static void registerConstructorLookup(Class> declaringClass, Class>..
* @since 19.0
*/
public static void register(Field... fields) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).register(ConfigurationCondition.alwaysTrue(), false, fields);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).register(AccessCondition.alwaysTrue(), false, fields);
}
/**
@@ -153,7 +153,7 @@ public static void register(Field... fields) {
* @since 19.0
*/
public static void registerFieldLookup(Class> declaringClass, String fieldName) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).registerFieldLookup(ConfigurationCondition.alwaysTrue(), declaringClass, fieldName);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).registerFieldLookup(AccessCondition.alwaysTrue(), declaringClass, fieldName);
}
/**
@@ -162,7 +162,7 @@ public static void registerFieldLookup(Class> declaringClass, String fieldName
* @since 23.0
*/
public static void registerAllClasses(Class> declaringClass) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllClassesQuery(ConfigurationCondition.alwaysTrue(), declaringClass);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllClassesQuery(AccessCondition.alwaysTrue(), declaringClass);
}
/**
@@ -171,7 +171,7 @@ public static void registerAllClasses(Class> declaringClass) {
* @since 23.0
*/
public static void registerAllDeclaredClasses(Class> declaringClass) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllDeclaredClassesQuery(ConfigurationCondition.alwaysTrue(), declaringClass);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllDeclaredClassesQuery(AccessCondition.alwaysTrue(), declaringClass);
}
/**
@@ -181,7 +181,7 @@ public static void registerAllDeclaredClasses(Class> declaringClass) {
* @since 23.0
*/
public static void registerAllMethods(Class> declaringClass) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllMethodsQuery(ConfigurationCondition.alwaysTrue(), true, declaringClass);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllMethodsQuery(AccessCondition.alwaysTrue(), true, declaringClass);
}
/**
@@ -191,7 +191,7 @@ public static void registerAllMethods(Class> declaringClass) {
* @since 23.0
*/
public static void registerAllDeclaredMethods(Class> declaringClass) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllDeclaredMethodsQuery(ConfigurationCondition.alwaysTrue(), true, declaringClass);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllDeclaredMethodsQuery(AccessCondition.alwaysTrue(), true, declaringClass);
}
/**
@@ -201,7 +201,7 @@ public static void registerAllDeclaredMethods(Class> declaringClass) {
* @since 23.0
*/
public static void registerAllConstructors(Class> declaringClass) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllConstructorsQuery(ConfigurationCondition.alwaysTrue(), true, declaringClass);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllConstructorsQuery(AccessCondition.alwaysTrue(), true, declaringClass);
}
/**
@@ -211,7 +211,7 @@ public static void registerAllConstructors(Class> declaringClass) {
* @since 23.0
*/
public static void registerAllDeclaredConstructors(Class> declaringClass) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllDeclaredConstructorsQuery(ConfigurationCondition.alwaysTrue(), true, declaringClass);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllDeclaredConstructorsQuery(AccessCondition.alwaysTrue(), true, declaringClass);
}
/**
@@ -221,7 +221,7 @@ public static void registerAllDeclaredConstructors(Class> declaringClass) {
* @since 23.0
*/
public static void registerAllFields(Class> declaringClass) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllFields(ConfigurationCondition.alwaysTrue(), declaringClass);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllFields(AccessCondition.alwaysTrue(), declaringClass);
}
/**
@@ -231,7 +231,7 @@ public static void registerAllFields(Class> declaringClass) {
* @since 23.0
*/
public static void registerAllDeclaredFields(Class> declaringClass) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllDeclaredFields(ConfigurationCondition.alwaysTrue(), declaringClass);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllDeclaredFields(AccessCondition.alwaysTrue(), declaringClass);
}
/**
@@ -240,7 +240,7 @@ public static void registerAllDeclaredFields(Class> declaringClass) {
* @since 23.0
*/
public static void registerAllNestMembers(Class> declaringClass) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllNestMembersQuery(ConfigurationCondition.alwaysTrue(), declaringClass);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllNestMembersQuery(AccessCondition.alwaysTrue(), declaringClass);
}
/**
@@ -249,7 +249,7 @@ public static void registerAllNestMembers(Class> declaringClass) {
* @since 23.0
*/
public static void registerAllPermittedSubclasses(Class> declaringClass) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllPermittedSubclassesQuery(ConfigurationCondition.alwaysTrue(), declaringClass);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllPermittedSubclassesQuery(AccessCondition.alwaysTrue(), declaringClass);
}
/**
@@ -258,7 +258,7 @@ public static void registerAllPermittedSubclasses(Class> declaringClass) {
* @since 23.0
*/
public static void registerAllRecordComponents(Class> declaringClass) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllRecordComponentsQuery(ConfigurationCondition.alwaysTrue(), declaringClass);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllRecordComponentsQuery(AccessCondition.alwaysTrue(), declaringClass);
}
/**
@@ -267,7 +267,7 @@ public static void registerAllRecordComponents(Class> declaringClass) {
* @since 23.0
*/
public static void registerAllSigners(Class> declaringClass) {
- ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllSignersQuery(ConfigurationCondition.alwaysTrue(), declaringClass);
+ ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllSignersQuery(AccessCondition.alwaysTrue(), declaringClass);
}
/**
diff --git a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeResourceAccess.java b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeResourceAccess.java
index 6d7b6cd60398..ff91ee86e66f 100644
--- a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeResourceAccess.java
+++ b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeResourceAccess.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* The Universal Permissive License (UPL), Version 1.0
@@ -47,7 +47,7 @@
import org.graalvm.nativeimage.ImageSingletons;
import org.graalvm.nativeimage.Platform;
import org.graalvm.nativeimage.Platforms;
-import org.graalvm.nativeimage.impl.ConfigurationCondition;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
import org.graalvm.nativeimage.impl.RuntimeResourceSupport;
/**
@@ -84,7 +84,7 @@ public static void addResource(Module module, String resourcePath, byte[] resour
Objects.requireNonNull(resourcePath);
Objects.requireNonNull(resourceContent);
ImageSingletons.lookup(RuntimeResourceSupport.class).injectResource(module, resourcePath, resourceContent, "Manually added via RuntimeResourceAccess");
- ImageSingletons.lookup(RuntimeResourceSupport.class).addCondition(ConfigurationCondition.alwaysTrue(), module, resourcePath);
+ ImageSingletons.lookup(RuntimeResourceSupport.class).addCondition(AccessCondition.alwaysTrue(), module, resourcePath);
}
/**
@@ -96,7 +96,7 @@ public static void addResource(Module module, String resourcePath, byte[] resour
*/
public static void addResourceBundle(Module module, String baseBundleName, Locale[] locales) {
Objects.requireNonNull(locales);
- RuntimeResourceSupport.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(),
+ RuntimeResourceSupport.singleton().addResourceBundles(AccessCondition.alwaysTrue(),
withModuleName(module, baseBundleName), Arrays.asList(locales));
}
@@ -108,7 +108,7 @@ public static void addResourceBundle(Module module, String baseBundleName, Local
* @since 22.3
*/
public static void addResourceBundle(Module module, String bundleName) {
- RuntimeResourceSupport.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(),
+ RuntimeResourceSupport.singleton().addResourceBundles(AccessCondition.alwaysTrue(),
withModuleName(module, bundleName));
}
diff --git a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeSerialization.java b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeSerialization.java
index 8de8de2ea716..0d26cbf84cc9 100644
--- a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeSerialization.java
+++ b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/hosted/RuntimeSerialization.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* The Universal Permissive License (UPL), Version 1.0
@@ -42,7 +42,7 @@
import org.graalvm.nativeimage.Platform;
import org.graalvm.nativeimage.Platforms;
-import org.graalvm.nativeimage.impl.ConfigurationCondition;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
import org.graalvm.nativeimage.impl.RuntimeSerializationSupport;
/**
@@ -72,7 +72,7 @@ public final class RuntimeSerialization {
* @since 21.3
*/
public static void registerIncludingAssociatedClasses(Class> clazz) {
- RuntimeSerializationSupport.singleton().registerIncludingAssociatedClasses(ConfigurationCondition.alwaysTrue(), clazz);
+ RuntimeSerializationSupport.singleton().registerIncludingAssociatedClasses(AccessCondition.alwaysTrue(), clazz);
}
/**
@@ -82,7 +82,7 @@ public static void registerIncludingAssociatedClasses(Class> clazz) {
*/
public static void register(Class>... classes) {
for (Class> clazz : classes) {
- RuntimeSerializationSupport.singleton().register(ConfigurationCondition.alwaysTrue(), clazz);
+ RuntimeSerializationSupport.singleton().register(AccessCondition.alwaysTrue(), clazz);
}
}
@@ -103,7 +103,7 @@ public static void register(Class>... classes) {
@Deprecated(since = "24.2")
@SuppressWarnings("unused")
public static void registerWithTargetConstructorClass(Class> clazz, Class> customTargetConstructorClazz) {
- RuntimeSerializationSupport.singleton().register(ConfigurationCondition.alwaysTrue(), clazz);
+ RuntimeSerializationSupport.singleton().register(AccessCondition.alwaysTrue(), clazz);
}
/**
@@ -114,7 +114,7 @@ public static void registerWithTargetConstructorClass(Class> clazz, Class> c
* @since 22.3
*/
public static void registerLambdaCapturingClass(Class> lambdaCapturingClass) {
- RuntimeSerializationSupport.singleton().registerLambdaCapturingClass(ConfigurationCondition.alwaysTrue(), lambdaCapturingClass);
+ RuntimeSerializationSupport.singleton().registerLambdaCapturingClass(AccessCondition.alwaysTrue(), lambdaCapturingClass);
}
/**
@@ -125,7 +125,7 @@ public static void registerLambdaCapturingClass(Class> lambdaCapturingClass) {
* @since 22.3
*/
public static void registerProxyClass(Class>... implementedInterfaces) {
- RuntimeSerializationSupport.singleton().registerProxyClass(ConfigurationCondition.alwaysTrue(), implementedInterfaces);
+ RuntimeSerializationSupport.singleton().registerProxyClass(AccessCondition.alwaysTrue(), implementedInterfaces);
}
private RuntimeSerialization() {
diff --git a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/ReflectionRegistry.java b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/ReflectionRegistry.java
index 9d0534347cfb..801db9f44d60 100644
--- a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/ReflectionRegistry.java
+++ b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/ReflectionRegistry.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* The Universal Permissive License (UPL), Version 1.0
@@ -44,22 +44,24 @@
import java.lang.reflect.Field;
import java.util.Arrays;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
+
public interface ReflectionRegistry {
- default void register(ConfigurationCondition condition, Class>... classes) {
+ default void register(AccessCondition condition, Class>... classes) {
Arrays.stream(classes).forEach(clazz -> register(condition, false, clazz));
}
- void register(ConfigurationCondition condition, boolean unsafeAllocated, Class> clazz);
+ void register(AccessCondition condition, boolean unsafeAllocated, Class> clazz);
- void register(ConfigurationCondition condition, boolean queriedOnly, Executable... methods);
+ void register(AccessCondition condition, boolean queriedOnly, Executable... methods);
- void register(ConfigurationCondition condition, boolean finalIsWritable, Field... fields);
+ void register(AccessCondition condition, boolean finalIsWritable, Field... fields);
- void registerClassLookup(ConfigurationCondition condition, String typeName);
+ void registerClassLookup(AccessCondition condition, String typeName);
- void registerFieldLookup(ConfigurationCondition condition, Class> declaringClass, String fieldName);
+ void registerFieldLookup(AccessCondition condition, Class> declaringClass, String fieldName);
- void registerMethodLookup(ConfigurationCondition condition, Class> declaringClass, String methodName, Class>... parameterTypes);
+ void registerMethodLookup(AccessCondition condition, Class> declaringClass, String methodName, Class>... parameterTypes);
- void registerConstructorLookup(ConfigurationCondition condition, Class> declaringClass, Class>... parameterTypes);
+ void registerConstructorLookup(AccessCondition condition, Class> declaringClass, Class>... parameterTypes);
}
diff --git a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeForeignAccessSupport.java b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeForeignAccessSupport.java
index dd0537c496fc..60a00fc2921a 100644
--- a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeForeignAccessSupport.java
+++ b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeForeignAccessSupport.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* The Universal Permissive License (UPL), Version 1.0
@@ -42,10 +42,12 @@
import java.lang.invoke.MethodHandle;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
+
public interface RuntimeForeignAccessSupport {
- void registerForDowncall(ConfigurationCondition condition, Object desc, Object... options);
+ void registerForDowncall(AccessCondition condition, Object desc, Object... options);
- void registerForUpcall(ConfigurationCondition condition, Object desc, Object... options);
+ void registerForUpcall(AccessCondition condition, Object desc, Object... options);
- void registerForDirectUpcall(ConfigurationCondition condition, MethodHandle target, Object desc, Object... options);
+ void registerForDirectUpcall(AccessCondition condition, MethodHandle target, Object desc, Object... options);
}
diff --git a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeProxyCreationSupport.java b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeProxyCreationSupport.java
index f7ca149c3c3f..2b575cc1824c 100644
--- a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeProxyCreationSupport.java
+++ b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeProxyCreationSupport.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* The Universal Permissive License (UPL), Version 1.0
@@ -40,6 +40,8 @@
*/
package org.graalvm.nativeimage.impl;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
+
public interface RuntimeProxyCreationSupport {
- void addProxyClass(ConfigurationCondition condition, Class>... interfaces);
+ void addProxyClass(AccessCondition condition, Class>... interfaces);
}
diff --git a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeReflectionSupport.java b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeReflectionSupport.java
index 5cfcd85b11b0..510d69d4e452 100644
--- a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeReflectionSupport.java
+++ b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeReflectionSupport.java
@@ -40,32 +40,34 @@
*/
package org.graalvm.nativeimage.impl;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
+
public interface RuntimeReflectionSupport extends ReflectionRegistry {
// needed as reflection-specific ImageSingletons key
- void registerAllMethodsQuery(ConfigurationCondition condition, boolean queriedOnly, Class> clazz);
+ void registerAllMethodsQuery(AccessCondition condition, boolean queriedOnly, Class> clazz);
- void registerAllDeclaredMethodsQuery(ConfigurationCondition condition, boolean queriedOnly, Class> clazz);
+ void registerAllDeclaredMethodsQuery(AccessCondition condition, boolean queriedOnly, Class> clazz);
- void registerAllFields(ConfigurationCondition condition, Class> clazz);
+ void registerAllFields(AccessCondition condition, Class> clazz);
- void registerAllDeclaredFields(ConfigurationCondition condition, Class> clazz);
+ void registerAllDeclaredFields(AccessCondition condition, Class> clazz);
- void registerAllConstructorsQuery(ConfigurationCondition condition, boolean queriedOnly, Class> clazz);
+ void registerAllConstructorsQuery(AccessCondition condition, boolean queriedOnly, Class> clazz);
- void registerAllDeclaredConstructorsQuery(ConfigurationCondition condition, boolean queriedOnly, Class> clazz);
+ void registerAllDeclaredConstructorsQuery(AccessCondition condition, boolean queriedOnly, Class> clazz);
- void registerAllClassesQuery(ConfigurationCondition condition, Class> clazz);
+ void registerAllClassesQuery(AccessCondition condition, Class> clazz);
- void registerAllDeclaredClassesQuery(ConfigurationCondition condition, Class> clazz);
+ void registerAllDeclaredClassesQuery(AccessCondition condition, Class> clazz);
- void registerAllRecordComponentsQuery(ConfigurationCondition condition, Class> clazz);
+ void registerAllRecordComponentsQuery(AccessCondition condition, Class> clazz);
- void registerAllPermittedSubclassesQuery(ConfigurationCondition condition, Class> clazz);
+ void registerAllPermittedSubclassesQuery(AccessCondition condition, Class> clazz);
- void registerAllNestMembersQuery(ConfigurationCondition condition, Class> clazz);
+ void registerAllNestMembersQuery(AccessCondition condition, Class> clazz);
- void registerAllSignersQuery(ConfigurationCondition condition, Class> clazz);
+ void registerAllSignersQuery(AccessCondition condition, Class> clazz);
- void registerClassLookupException(ConfigurationCondition condition, String typeName, Throwable t);
+ void registerClassLookupException(AccessCondition condition, String typeName, Throwable t);
}
diff --git a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeResourceSupport.java b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeResourceSupport.java
index f0c2273cbf95..6cdb294c6f6a 100644
--- a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeResourceSupport.java
+++ b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeResourceSupport.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* The Universal Permissive License (UPL), Version 1.0
@@ -44,11 +44,12 @@
import java.util.Locale;
import org.graalvm.nativeimage.ImageSingletons;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
public interface RuntimeResourceSupport {
@SuppressWarnings("unchecked")
- static RuntimeResourceSupport singleton() {
+ static RuntimeResourceSupport singleton() {
return ImageSingletons.lookup(RuntimeResourceSupport.class);
}
@@ -63,15 +64,15 @@ static RuntimeResourceSupport singleton() {
void addResourceBundles(C condition, String basename, Collection locales);
/* Following functions are used only from features */
- void addCondition(ConfigurationCondition configurationCondition, Module module, String resourcePath);
+ void addCondition(AccessCondition condition, Module module, String resourcePath);
void addResourceEntry(Module module, String resourcePath, Object origin);
default void addResource(Module module, String resourcePath, Object origin) {
- addResource(ConfigurationCondition.alwaysTrue(), module, resourcePath, origin);
+ addResource(AccessCondition.alwaysTrue(), module, resourcePath, origin);
}
- default void addResource(ConfigurationCondition condition, Module module, String resourcePath, Object origin) {
+ default void addResource(AccessCondition condition, Module module, String resourcePath, Object origin) {
addResourceEntry(module, resourcePath, origin);
addCondition(condition, module, resourcePath);
}
diff --git a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeSerializationSupport.java b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeSerializationSupport.java
index 3237047e86d8..9515617dc4d5 100644
--- a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeSerializationSupport.java
+++ b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/RuntimeSerializationSupport.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* The Universal Permissive License (UPL), Version 1.0
@@ -45,11 +45,12 @@
import java.util.stream.Collectors;
import org.graalvm.nativeimage.ImageSingletons;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
public interface RuntimeSerializationSupport {
@SuppressWarnings("unchecked")
- static RuntimeSerializationSupport singleton() {
+ static RuntimeSerializationSupport singleton() {
return ImageSingletons.lookup(RuntimeSerializationSupport.class);
}
diff --git a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/ConfigurationCondition.java b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/TypeReachabilityCondition.java
similarity index 64%
rename from sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/ConfigurationCondition.java
rename to sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/TypeReachabilityCondition.java
index d7c56dc0dd98..01dcf920f95f 100644
--- a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/ConfigurationCondition.java
+++ b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/TypeReachabilityCondition.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* The Universal Permissive License (UPL), Version 1.0
@@ -42,45 +42,21 @@
import java.util.Objects;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
+
/**
- * A condition that describes if a reflectively-accessed element in Native Image is visible by the
- * user at run time.
- *
- * Currently, there is only two types of condition:
- *
typeReached (the default) that signifies that the type must be both reachable by
- * static analysis at build time, and reached at run time. A type is reached at run time, right
- * before the class-initialization routine starts for that type, or any of the type's subtypes are
- * reached.
- *
typeReachable (legacy) that signifies that the type must be reachable by static
- * analysis at build time.
- *
- * When {@link ConfigurationCondition#runtimeChecked} is true denotes that this is a
+ * Type that represents both {@code typeReached} and {@code typeReachable} condition. When
+ * {@link TypeReachabilityCondition#runtimeChecked} is true denotes that this is a
* typeReached condition.
*/
-public final class ConfigurationCondition {
+public final class TypeReachabilityCondition implements AccessCondition {
/* Cached to save space: it is used as a marker for all non-conditional elements */
- private static final ConfigurationCondition JAVA_LANG_OBJECT_REACHED = new ConfigurationCondition(Object.class, true);
-
- public static ConfigurationCondition alwaysTrue() {
- return JAVA_LANG_OBJECT_REACHED;
- }
-
+ public static final TypeReachabilityCondition JAVA_LANG_OBJECT_REACHED = new TypeReachabilityCondition(Object.class, true);
private final Class> type;
private final boolean runtimeChecked;
- /**
- * Creates the default type-reached condition that is satisfied when the type is reached at
- * runtime.
- *
- * @param type that has to be reached for this condition to be satisfied
- * @return instance of the condition
- */
- public static ConfigurationCondition create(Class> type) {
- return create(type, true);
- }
-
/**
* Creates either a type-reached condition ({@code runtimeChecked = true}) or a type-reachable
* condition.
@@ -89,23 +65,23 @@ public static ConfigurationCondition create(Class> type) {
* @param runtimeChecked makes this a type-reachable condition when false
* @return instance of the condition
*/
- public static ConfigurationCondition create(Class> type, boolean runtimeChecked) {
+ public static TypeReachabilityCondition create(Class> type, boolean runtimeChecked) {
Objects.requireNonNull(type);
- if (JAVA_LANG_OBJECT_REACHED.getType().equals(type)) {
- return JAVA_LANG_OBJECT_REACHED;
+ if (TypeReachabilityCondition.JAVA_LANG_OBJECT_REACHED.getType().equals(type)) {
+ return TypeReachabilityCondition.JAVA_LANG_OBJECT_REACHED;
}
- return new ConfigurationCondition(type, runtimeChecked);
- }
-
- public boolean isAlwaysTrue() {
- return ConfigurationCondition.alwaysTrue().equals(this);
+ return new TypeReachabilityCondition(type, runtimeChecked);
}
- private ConfigurationCondition(Class> type, boolean runtimeChecked) {
+ private TypeReachabilityCondition(Class> type, boolean runtimeChecked) {
this.runtimeChecked = runtimeChecked;
this.type = type;
}
+ public boolean isAlwaysTrue() {
+ return AccessCondition.alwaysTrue().equals(this);
+ }
+
public Class> getType() {
return type;
}
@@ -122,7 +98,7 @@ public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) {
return false;
}
- ConfigurationCondition that = (ConfigurationCondition) o;
+ TypeReachabilityCondition that = (TypeReachabilityCondition) o;
return runtimeChecked == that.runtimeChecked && Objects.equals(type, that.type);
}
@@ -133,7 +109,7 @@ public int hashCode() {
@Override
public String toString() {
- return "ConfigurationCondition(" +
+ return "TypeReachabilityCondition(" +
"type=" + type +
", runtimeChecked=" + runtimeChecked +
')';
diff --git a/substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/OmitPreviousConfigTests.java b/substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/OmitPreviousConfigTests.java
index 7f4027220745..98540a28d155 100644
--- a/substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/OmitPreviousConfigTests.java
+++ b/substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/OmitPreviousConfigTests.java
@@ -40,7 +40,7 @@
import com.oracle.svm.configure.ConfigurationTypeDescriptor;
import com.oracle.svm.configure.NamedConfigurationTypeDescriptor;
-import com.oracle.svm.configure.UnresolvedConfigurationCondition;
+import com.oracle.svm.configure.UnresolvedAccessCondition;
import com.oracle.svm.configure.config.ConfigurationFileCollection;
import com.oracle.svm.configure.config.ConfigurationMemberInfo;
import com.oracle.svm.configure.config.ConfigurationMemberInfo.ConfigurationMemberAccessibility;
@@ -145,8 +145,8 @@ private static void doTestTypeConfig(TypeConfiguration typeConfig) {
}
private static void doTestExpectedMissingTypes(TypeConfiguration typeConfig) {
- Assert.assertNull(typeConfig.get(UnresolvedConfigurationCondition.alwaysTrue(), new NamedConfigurationTypeDescriptor("FlagTestA")));
- Assert.assertNull(typeConfig.get(UnresolvedConfigurationCondition.alwaysTrue(), new NamedConfigurationTypeDescriptor("FlagTestB")));
+ Assert.assertNull(typeConfig.get(UnresolvedAccessCondition.alwaysTrue(), new NamedConfigurationTypeDescriptor("FlagTestA")));
+ Assert.assertNull(typeConfig.get(UnresolvedAccessCondition.alwaysTrue(), new NamedConfigurationTypeDescriptor("FlagTestB")));
}
private static void doTestTypeFlags(TypeConfiguration typeConfig) {
@@ -187,7 +187,7 @@ private static void doTestMethods(TypeConfiguration typeConfig) {
}
private static void doTestProxyConfig(ProxyConfiguration proxyConfig) {
- UnresolvedConfigurationCondition condition = UnresolvedConfigurationCondition.alwaysTrue();
+ UnresolvedAccessCondition condition = UnresolvedAccessCondition.alwaysTrue();
Assert.assertFalse(proxyConfig.contains(condition, "testProxySeenA", "testProxySeenB", "testProxySeenC"));
Assert.assertTrue(proxyConfig.contains(condition, "testProxyUnseen"));
}
@@ -196,7 +196,7 @@ private static void doTestResourceConfig(ResourceConfiguration resourceConfig) {
Assert.assertFalse(resourceConfig.anyResourceMatches("seenResource.txt"));
Assert.assertTrue(resourceConfig.anyResourceMatches("unseenResource.txt"));
- UnresolvedConfigurationCondition condition = UnresolvedConfigurationCondition.alwaysTrue();
+ UnresolvedAccessCondition condition = UnresolvedAccessCondition.alwaysTrue();
Assert.assertFalse(resourceConfig.anyBundleMatches(condition, "seenBundle"));
Assert.assertTrue(resourceConfig.anyBundleMatches(condition, "unseenBundle"));
}
@@ -208,13 +208,13 @@ private static void doTestResourceConfig(ResourceConfiguration resourceConfig) {
*/
private static void doTestSerializationConfig(ConfigurationSet config) {
SerializationConfiguration serializationConfig = config.getSerializationConfiguration();
- UnresolvedConfigurationCondition condition = UnresolvedConfigurationCondition.alwaysTrue();
+ UnresolvedAccessCondition condition = UnresolvedAccessCondition.alwaysTrue();
Assert.assertFalse(serializationConfig.contains(condition, "seenType"));
Assert.assertTrue(serializationConfig.contains(condition, "unseenType"));
}
private static ConfigurationType getConfigTypeOrFail(TypeConfiguration typeConfig, String typeName) {
- ConfigurationType type = typeConfig.get(UnresolvedConfigurationCondition.alwaysTrue(), new NamedConfigurationTypeDescriptor(typeName));
+ ConfigurationType type = typeConfig.get(UnresolvedAccessCondition.alwaysTrue(), new NamedConfigurationTypeDescriptor(typeName));
Assert.assertNotNull(type);
return type;
}
@@ -273,11 +273,11 @@ Map getMethodsMap(Configura
}
void populateConfig() {
- ConfigurationType oldType = new ConfigurationType(UnresolvedConfigurationCondition.alwaysTrue(), getTypeName(), true);
+ ConfigurationType oldType = new ConfigurationType(UnresolvedAccessCondition.alwaysTrue(), getTypeName(), true);
setFlags(oldType);
previousConfig.add(oldType);
- ConfigurationType newType = new ConfigurationType(UnresolvedConfigurationCondition.alwaysTrue(), getTypeName(), true);
+ ConfigurationType newType = new ConfigurationType(UnresolvedAccessCondition.alwaysTrue(), getTypeName(), true);
for (Map.Entry methodEntry : methodsThatMustExist.entrySet()) {
newType.addMethod(methodEntry.getKey().getName(), methodEntry.getKey().getInternalSignature(), methodEntry.getValue());
}
@@ -310,7 +310,7 @@ void doTest() {
TypeConfiguration currentConfigWithoutPrevious = currentConfig.copyAndSubtract(previousConfig);
ConfigurationTypeDescriptor name = getTypeName();
- ConfigurationType configurationType = currentConfigWithoutPrevious.get(UnresolvedConfigurationCondition.alwaysTrue(), name);
+ ConfigurationType configurationType = currentConfigWithoutPrevious.get(UnresolvedAccessCondition.alwaysTrue(), name);
if (methodsThatMustExist.size() == 0) {
Assert.assertNull("Generated configuration type " + name + " exists. Expected it to be cleared as it is empty.", configurationType);
} else {
diff --git a/substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/ResourceConfigurationTest.java b/substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/ResourceConfigurationTest.java
index 1649fd56ed0e..e0ae18ecfd7f 100644
--- a/substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/ResourceConfigurationTest.java
+++ b/substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/ResourceConfigurationTest.java
@@ -34,14 +34,14 @@
import java.util.List;
import java.util.Locale;
-import org.graalvm.nativeimage.impl.ConfigurationCondition;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
import org.junit.Assert;
import org.junit.Test;
import com.oracle.svm.configure.ConfigurationParserOption;
import com.oracle.svm.configure.ResourceConfigurationParser;
import com.oracle.svm.configure.ResourcesRegistry;
-import com.oracle.svm.configure.UnresolvedConfigurationCondition;
+import com.oracle.svm.configure.UnresolvedAccessCondition;
import com.oracle.svm.configure.config.ResourceConfiguration;
import com.oracle.svm.configure.config.conditional.ConfigurationConditionResolver;
@@ -52,7 +52,7 @@ public class ResourceConfigurationTest {
@Test
public void anyResourceMatches() {
ResourceConfiguration rc = new ResourceConfiguration();
- UnresolvedConfigurationCondition defaultCond = UnresolvedConfigurationCondition.alwaysTrue();
+ UnresolvedAccessCondition defaultCond = UnresolvedAccessCondition.alwaysTrue();
rc.addResourcePattern(defaultCond, ".*/Resource.*txt$");
Assert.assertTrue(rc.anyResourceMatches("com/my/app/Resource0.txt"));
@@ -71,7 +71,7 @@ public void anyResourceMatches() {
@Test
public void printJson() {
ResourceConfiguration rc = new ResourceConfiguration();
- UnresolvedConfigurationCondition defaultCond = UnresolvedConfigurationCondition.alwaysTrue();
+ UnresolvedAccessCondition defaultCond = UnresolvedAccessCondition.alwaysTrue();
rc.addResourcePattern(defaultCond, ".*/Resource.*txt$");
rc.ignoreResourcePattern(defaultCond, ".*/Resource2.txt$");
PipedWriter pw = new PipedWriter();
@@ -91,15 +91,15 @@ public void printJson() {
List addedResources = new LinkedList<>();
List ignoredResources = new LinkedList<>();
- ResourcesRegistry registry = new ResourcesRegistry<>() {
+ ResourcesRegistry registry = new ResourcesRegistry<>() {
@Override
- public void addResources(UnresolvedConfigurationCondition condition, String pattern, Object origin) {
+ public void addResources(UnresolvedAccessCondition condition, String pattern, Object origin) {
addedResources.add(pattern);
}
@Override
- public void addGlob(UnresolvedConfigurationCondition condition, String module, String glob, Object origin) {
+ public void addGlob(UnresolvedAccessCondition condition, String module, String glob, Object origin) {
throw new AssertionError("Unused function.");
}
@@ -113,31 +113,31 @@ public void injectResource(Module module, String resourcePath, byte[] resourceCo
}
@Override
- public void ignoreResources(UnresolvedConfigurationCondition condition, String pattern) {
+ public void ignoreResources(UnresolvedAccessCondition condition, String pattern) {
ignoredResources.add(pattern);
}
@Override
- public void addResourceBundles(UnresolvedConfigurationCondition condition, String name) {
+ public void addResourceBundles(UnresolvedAccessCondition condition, String name) {
}
@Override
- public void addResourceBundles(UnresolvedConfigurationCondition condition, String basename, Collection locales) {
+ public void addResourceBundles(UnresolvedAccessCondition condition, String basename, Collection locales) {
}
@Override
- public void addCondition(ConfigurationCondition configurationCondition, Module module, String resourcePath) {
+ public void addCondition(AccessCondition configurationCondition, Module module, String resourcePath) {
}
@Override
- public void addClassBasedResourceBundle(UnresolvedConfigurationCondition condition, String basename, String className) {
+ public void addClassBasedResourceBundle(UnresolvedAccessCondition condition, String basename, String className) {
}
};
- ResourceConfigurationParser rcp = ResourceConfigurationParser.create(false, ConfigurationConditionResolver.identityResolver(), registry,
+ ResourceConfigurationParser rcp = ResourceConfigurationParser.create(false, ConfigurationConditionResolver.identityResolver(), registry,
EnumSet.of(ConfigurationParserOption.STRICT_CONFIGURATION));
writerThread.start();
rcp.parseAndRegister(pr);
diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConditionalConfigurationParser.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConditionalConfigurationParser.java
index 0001421597d0..87af84ab24fc 100644
--- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConditionalConfigurationParser.java
+++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConditionalConfigurationParser.java
@@ -24,8 +24,8 @@
*/
package com.oracle.svm.configure;
-import static com.oracle.svm.configure.UnresolvedConfigurationCondition.TYPE_REACHABLE_KEY;
-import static com.oracle.svm.configure.UnresolvedConfigurationCondition.TYPE_REACHED_KEY;
+import static com.oracle.svm.configure.UnresolvedAccessCondition.TYPE_REACHABLE_KEY;
+import static com.oracle.svm.configure.UnresolvedAccessCondition.TYPE_REACHED_KEY;
import java.util.EnumSet;
@@ -45,7 +45,7 @@ protected EnumSet supportedOptions() {
return base;
}
- protected UnresolvedConfigurationCondition parseCondition(EconomicMap data, boolean runtimeCondition) {
+ protected UnresolvedAccessCondition parseCondition(EconomicMap data, boolean runtimeCondition) {
Object conditionData = data.get(CONDITIONAL_KEY);
if (conditionData != null) {
EconomicMap conditionObject = asMap(conditionData, "Attribute '" + CONDITIONAL_KEY + "' must be an object");
@@ -61,7 +61,7 @@ protected UnresolvedConfigurationCondition parseCondition(EconomicMap(UnresolvedConfigurationCondition condition, T element) {
+public record ConditionalElement(UnresolvedAccessCondition condition, T element) {
public static > Comparator> comparator() {
return (o1, o2) -> Comparator
diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConfigurationBase.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConfigurationBase.java
index fbfd7eb15425..172d6251c13a 100644
--- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConfigurationBase.java
+++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConfigurationBase.java
@@ -39,7 +39,7 @@ public abstract class ConfigurationBase, P> im
protected abstract void merge(T other);
- public abstract void mergeConditional(UnresolvedConfigurationCondition condition, T other);
+ public abstract void mergeConditional(UnresolvedAccessCondition condition, T other);
protected abstract void subtract(T other);
diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ForeignConfigurationParser.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ForeignConfigurationParser.java
index 65147491f835..48230648d22d 100644
--- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ForeignConfigurationParser.java
+++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ForeignConfigurationParser.java
@@ -29,7 +29,7 @@
import java.util.List;
import org.graalvm.collections.EconomicMap;
-import org.graalvm.nativeimage.impl.ConfigurationCondition;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
/**
* A base class for parsing FFM API configurations.
@@ -74,14 +74,14 @@ private void parseAndRegisterForeignCall(Object call, boolean forUpcall) {
if (forUpcall) {
LO upcallOptions = createUpcallOptions(optionsMap, descriptor);
try {
- registerUpcall(ConfigurationCondition.alwaysTrue(), descriptor, upcallOptions);
+ registerUpcall(AccessCondition.alwaysTrue(), descriptor, upcallOptions);
} catch (Exception e) {
handleRegistrationError(e, map);
}
} else {
LO downcallOptions = createDowncallOptions(optionsMap, descriptor);
try {
- registerDowncall(ConfigurationCondition.alwaysTrue(), descriptor, downcallOptions);
+ registerDowncall(AccessCondition.alwaysTrue(), descriptor, downcallOptions);
} catch (Exception e) {
handleRegistrationError(e, map);
}
@@ -141,9 +141,9 @@ private FD createFunctionDescriptor(EconomicMap map) {
/** Parses the options allowed for upcalls. */
protected abstract LO createUpcallOptions(EconomicMap map, FD desc);
- protected abstract void registerDowncall(ConfigurationCondition configurationCondition, FD descriptor, LO options);
+ protected abstract void registerDowncall(AccessCondition configurationCondition, FD descriptor, LO options);
- protected abstract void registerUpcall(ConfigurationCondition configurationCondition, FD descriptor, LO options);
+ protected abstract void registerUpcall(AccessCondition configurationCondition, FD descriptor, LO options);
protected abstract void registerDirectUpcallWithoutDescriptor(String className, String methodName, EconomicMap optionsMap);
diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/LegacyReflectionConfigurationParser.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/LegacyReflectionConfigurationParser.java
index 49e5600c44cd..0507fe56795c 100644
--- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/LegacyReflectionConfigurationParser.java
+++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/LegacyReflectionConfigurationParser.java
@@ -76,7 +76,7 @@ protected void parseClass(EconomicMap data) {
*/
boolean isType = type.get().definedAsType();
- UnresolvedConfigurationCondition unresolvedCondition = parseCondition(data, false);
+ UnresolvedAccessCondition unresolvedCondition = parseCondition(data, false);
TypeResult conditionResult = conditionResolver.resolveCondition(unresolvedCondition);
if (!conditionResult.isPresent()) {
return;
diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/LegacyResourceConfigurationParser.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/LegacyResourceConfigurationParser.java
index 9a444c185864..b88e0f7751e3 100644
--- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/LegacyResourceConfigurationParser.java
+++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/LegacyResourceConfigurationParser.java
@@ -74,7 +74,7 @@ private void parseTopLevelObject(EconomicMap obj, Object origin)
}
@Override
- protected UnresolvedConfigurationCondition parseCondition(EconomicMap condition) {
+ protected UnresolvedAccessCondition parseCondition(EconomicMap condition) {
return parseCondition(condition, false);
}
diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/LegacySerializationConfigurationParser.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/LegacySerializationConfigurationParser.java
index ce4a1e5c0dc5..f8bea773320a 100644
--- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/LegacySerializationConfigurationParser.java
+++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/LegacySerializationConfigurationParser.java
@@ -96,7 +96,7 @@ protected void parseSerializationDescriptorObject(EconomicMap da
}
NamedConfigurationTypeDescriptor targetSerializationClass = NamedConfigurationTypeDescriptor.fromJSONName(asString(data.get(NAME_KEY)));
- UnresolvedConfigurationCondition unresolvedCondition = parseCondition(data, false);
+ UnresolvedAccessCondition unresolvedCondition = parseCondition(data, false);
var condition = conditionResolver.resolveCondition(unresolvedCondition);
if (!condition.isPresent()) {
return;
diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ProxyConfigurationParser.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ProxyConfigurationParser.java
index 5696bac54171..5ac7a22f8a70 100644
--- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ProxyConfigurationParser.java
+++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ProxyConfigurationParser.java
@@ -90,7 +90,7 @@ private void parseInterfaceList(C condition, List> data) {
private void parseWithConditionalConfig(EconomicMap proxyConfigObject) {
checkAttributes(proxyConfigObject, "proxy descriptor object", Collections.singleton("interfaces"), Collections.singletonList(CONDITIONAL_KEY));
- UnresolvedConfigurationCondition condition = parseCondition(proxyConfigObject, false);
+ UnresolvedAccessCondition condition = parseCondition(proxyConfigObject, false);
TypeResult resolvedCondition = conditionResolver.resolveCondition(condition);
if (resolvedCondition.isPresent()) {
parseInterfaceList(resolvedCondition.get(), asList(proxyConfigObject.get("interfaces"), "The interfaces property must be an array of fully qualified interface names"));
diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ReflectionMetadataParser.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ReflectionMetadataParser.java
index 8c8ca28d06a7..bc68485c247a 100644
--- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ReflectionMetadataParser.java
+++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ReflectionMetadataParser.java
@@ -64,7 +64,7 @@ protected void parseClass(EconomicMap data) {
return;
}
- UnresolvedConfigurationCondition unresolvedCondition = parseCondition(data, true);
+ UnresolvedAccessCondition unresolvedCondition = parseCondition(data, true);
TypeResult conditionResult = conditionResolver.resolveCondition(unresolvedCondition);
if (!conditionResult.isPresent()) {
return;
diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ResourceConfigurationParser.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ResourceConfigurationParser.java
index dcb4936d8b8f..532a4e8c821b 100644
--- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ResourceConfigurationParser.java
+++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ResourceConfigurationParser.java
@@ -66,7 +66,7 @@ protected void parseBundlesObject(Object bundlesObject) {
}
}
- protected abstract UnresolvedConfigurationCondition parseCondition(EconomicMap condition);
+ protected abstract UnresolvedAccessCondition parseCondition(EconomicMap condition);
protected void parseBundle(Object bundle, boolean inResourcesSection) {
EconomicMap resource = asMap(bundle, "Elements of 'bundles' list must be a bundle descriptor object");
diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ResourceMetadataParser.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ResourceMetadataParser.java
index 519f6a93c7be..89e250c3390a 100644
--- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ResourceMetadataParser.java
+++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ResourceMetadataParser.java
@@ -58,7 +58,7 @@ public void parseAndRegister(Object json, URI origin) {
}
@Override
- protected UnresolvedConfigurationCondition parseCondition(EconomicMap condition) {
+ protected UnresolvedAccessCondition parseCondition(EconomicMap condition) {
return parseCondition(condition, true);
}
}
diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ResourcesRegistry.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ResourcesRegistry.java
index 5fbdb3418524..280aad0b1113 100644
--- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ResourcesRegistry.java
+++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ResourcesRegistry.java
@@ -28,13 +28,13 @@
import java.util.Locale;
import org.graalvm.nativeimage.ImageSingletons;
-import org.graalvm.nativeimage.impl.ConfigurationCondition;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
import org.graalvm.nativeimage.impl.RuntimeResourceSupport;
public interface ResourcesRegistry extends RuntimeResourceSupport {
@SuppressWarnings("unchecked")
- static ResourcesRegistry singleton() {
+ static ResourcesRegistry singleton() {
return ImageSingletons.lookup(ResourcesRegistry.class);
}
diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/SerializationMetadataParser.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/SerializationMetadataParser.java
index 16642fd36f55..c90f86eeda95 100644
--- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/SerializationMetadataParser.java
+++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/SerializationMetadataParser.java
@@ -60,7 +60,7 @@ protected void parseSerializationDescriptorObject(EconomicMap da
return;
}
- UnresolvedConfigurationCondition unresolvedCondition = parseCondition(data, true);
+ UnresolvedAccessCondition unresolvedCondition = parseCondition(data, true);
var condition = conditionResolver.resolveCondition(unresolvedCondition);
if (!condition.isPresent()) {
return;
diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/UnresolvedConfigurationCondition.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/UnresolvedAccessCondition.java
similarity index 74%
rename from substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/UnresolvedConfigurationCondition.java
rename to substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/UnresolvedAccessCondition.java
index 641680a2b790..e7a648d18607 100644
--- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/UnresolvedConfigurationCondition.java
+++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/UnresolvedAccessCondition.java
@@ -26,38 +26,38 @@
import java.util.Objects;
-import org.graalvm.nativeimage.impl.ConfigurationCondition;
+import org.graalvm.nativeimage.dynamicaccess.AccessCondition;
/**
- * Represents a {@link ConfigurationCondition} during parsing before it is resolved in a context of
- * the classpath.
+ * Represents a {@link AccessCondition} during parsing before it is resolved in a context of the
+ * classpath.
*/
-public final class UnresolvedConfigurationCondition implements Comparable {
- private static final UnresolvedConfigurationCondition JAVA_LANG_OBJECT_REACHED = new UnresolvedConfigurationCondition(
+public final class UnresolvedAccessCondition implements Comparable {
+ private static final UnresolvedAccessCondition JAVA_LANG_OBJECT_REACHED = new UnresolvedAccessCondition(
NamedConfigurationTypeDescriptor.fromTypeName(Object.class.getTypeName()), true);
public static final String TYPE_REACHED_KEY = "typeReached";
public static final String TYPE_REACHABLE_KEY = "typeReachable";
private final NamedConfigurationTypeDescriptor type;
private final boolean runtimeChecked;
- public static UnresolvedConfigurationCondition create(NamedConfigurationTypeDescriptor type) {
+ public static UnresolvedAccessCondition create(NamedConfigurationTypeDescriptor type) {
return create(type, true);
}
- public static UnresolvedConfigurationCondition create(NamedConfigurationTypeDescriptor type, boolean runtimeChecked) {
+ public static UnresolvedAccessCondition create(NamedConfigurationTypeDescriptor type, boolean runtimeChecked) {
Objects.requireNonNull(type);
if (JAVA_LANG_OBJECT_REACHED.getTypeName().equals(type.name())) {
return JAVA_LANG_OBJECT_REACHED;
}
- return new UnresolvedConfigurationCondition(type, runtimeChecked);
+ return new UnresolvedAccessCondition(type, runtimeChecked);
}
- private UnresolvedConfigurationCondition(NamedConfigurationTypeDescriptor type, boolean runtimeChecked) {
+ private UnresolvedAccessCondition(NamedConfigurationTypeDescriptor type, boolean runtimeChecked) {
this.type = type;
this.runtimeChecked = runtimeChecked;
}
- public static UnresolvedConfigurationCondition alwaysTrue() {
+ public static UnresolvedAccessCondition alwaysTrue() {
return JAVA_LANG_OBJECT_REACHED;
}
@@ -81,7 +81,7 @@ public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) {
return false;
}
- UnresolvedConfigurationCondition that = (UnresolvedConfigurationCondition) o;
+ UnresolvedAccessCondition that = (UnresolvedAccessCondition) o;
return runtimeChecked == that.runtimeChecked && Objects.equals(type, that.type);
}
@@ -91,7 +91,7 @@ public int hashCode() {
}
@Override
- public int compareTo(UnresolvedConfigurationCondition o) {
+ public int compareTo(UnresolvedAccessCondition o) {
int res = Boolean.compare(runtimeChecked, o.runtimeChecked);
if (res != 0) {
return res;
diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationConditionPrintable.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationConditionPrintable.java
index bef40b8f5f64..04e338ecebe8 100644
--- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationConditionPrintable.java
+++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationConditionPrintable.java
@@ -25,17 +25,17 @@
package com.oracle.svm.configure.config;
import static com.oracle.svm.configure.ConditionalConfigurationParser.CONDITIONAL_KEY;
-import static com.oracle.svm.configure.UnresolvedConfigurationCondition.TYPE_REACHABLE_KEY;
-import static com.oracle.svm.configure.UnresolvedConfigurationCondition.TYPE_REACHED_KEY;
+import static com.oracle.svm.configure.UnresolvedAccessCondition.TYPE_REACHABLE_KEY;
+import static com.oracle.svm.configure.UnresolvedAccessCondition.TYPE_REACHED_KEY;
import java.io.IOException;
-import com.oracle.svm.configure.UnresolvedConfigurationCondition;
+import com.oracle.svm.configure.UnresolvedAccessCondition;
import jdk.graal.compiler.util.json.JsonWriter;
final class ConfigurationConditionPrintable {
- static void printConditionAttribute(UnresolvedConfigurationCondition condition, JsonWriter writer, boolean combinedFile) throws IOException {
+ static void printConditionAttribute(UnresolvedAccessCondition condition, JsonWriter writer, boolean combinedFile) throws IOException {
if (!condition.isAlwaysTrue()) {
writer.quote(CONDITIONAL_KEY).appendFieldSeparator().appendObjectStart();
/*
diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationType.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationType.java
index 6940a662077d..725ce45bc5fe 100644
--- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationType.java
+++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationType.java
@@ -37,7 +37,7 @@
import java.util.stream.Collectors;
import com.oracle.svm.configure.ConfigurationTypeDescriptor;
-import com.oracle.svm.configure.UnresolvedConfigurationCondition;
+import com.oracle.svm.configure.UnresolvedAccessCondition;
import com.oracle.svm.configure.config.ConfigurationMemberInfo.ConfigurationMemberAccessibility;
import com.oracle.svm.configure.config.ConfigurationMemberInfo.ConfigurationMemberDeclaration;
@@ -82,7 +82,7 @@ static ConfigurationType copyAndMerge(ConfigurationType type, ConfigurationType
return copy;
}
- private final UnresolvedConfigurationCondition condition;
+ private final UnresolvedAccessCondition condition;
private final ConfigurationTypeDescriptor typeDescriptor;
private Map fields;
@@ -104,7 +104,7 @@ static ConfigurationType copyAndMerge(ConfigurationType type, ConfigurationType
private boolean serializable = false;
private boolean typeJniAccessible = false;
- public ConfigurationType(UnresolvedConfigurationCondition condition, ConfigurationTypeDescriptor typeDescriptor, boolean includeAllElements) {
+ public ConfigurationType(UnresolvedAccessCondition condition, ConfigurationTypeDescriptor typeDescriptor, boolean includeAllElements) {
this.condition = Objects.requireNonNull(condition);
this.typeDescriptor = Objects.requireNonNull(typeDescriptor);
allDeclaredClasses = allPublicClasses = allRecordComponents = allPermittedSubclasses = allNestMembers = allSigners = includeAllElements;
@@ -113,7 +113,7 @@ public ConfigurationType(UnresolvedConfigurationCondition condition, Configurati
: ConfigurationMemberAccessibility.NONE;
}
- ConfigurationType(ConfigurationType other, UnresolvedConfigurationCondition condition) {
+ ConfigurationType(ConfigurationType other, UnresolvedAccessCondition condition) {
// Our object is not yet published, so it is sufficient to take only the other object's lock
synchronized (other) {
typeDescriptor = other.typeDescriptor;
@@ -551,7 +551,7 @@ private static Map maybeRemove(Map fromMap, Consumer