From 3e69af4422bb3844ca245571a3497f761754edf2 Mon Sep 17 00:00:00 2001 From: Mihailo Date: Tue, 3 Jun 2025 18:10:39 +0200 Subject: [PATCH 1/3] Introduced public API for registration conditions. ConfigurationCondition is divided into AccessCondition(API) and TypeReachabilityCondition(implementation). --- sdk/mx.sdk/suite.py | 1 + .../dynamicaccess/AccessCondition.java | 128 ++++++++++++++++++ .../impl/TypeReachabilityCondition.java | 117 ++++++++++++++++ 3 files changed, 246 insertions(+) create mode 100644 sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/dynamicaccess/AccessCondition.java create mode 100644 sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/TypeReachabilityCondition.java 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/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: + *

+ *

+ * 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/impl/TypeReachabilityCondition.java b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/TypeReachabilityCondition.java new file mode 100644 index 000000000000..01dcf920f95f --- /dev/null +++ b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/TypeReachabilityCondition.java @@ -0,0 +1,117 @@ +/* + * 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.impl; + +import java.util.Objects; + +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; + +/** + * 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 TypeReachabilityCondition implements AccessCondition { + + /* Cached to save space: it is used as a marker for all non-conditional elements */ + public static final TypeReachabilityCondition JAVA_LANG_OBJECT_REACHED = new TypeReachabilityCondition(Object.class, true); + private final Class type; + + private final boolean runtimeChecked; + + /** + * Creates either a type-reached condition ({@code runtimeChecked = true}) or a type-reachable + * condition. + * + * @param type that has to be reached (or reachable) for this condition to be satisfied + * @param runtimeChecked makes this a type-reachable condition when false + * @return instance of the condition + */ + public static TypeReachabilityCondition create(Class type, boolean runtimeChecked) { + Objects.requireNonNull(type); + if (TypeReachabilityCondition.JAVA_LANG_OBJECT_REACHED.getType().equals(type)) { + return TypeReachabilityCondition.JAVA_LANG_OBJECT_REACHED; + } + return new TypeReachabilityCondition(type, 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; + } + + public boolean isRuntimeChecked() { + return runtimeChecked; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TypeReachabilityCondition that = (TypeReachabilityCondition) o; + return runtimeChecked == that.runtimeChecked && Objects.equals(type, that.type); + } + + @Override + public int hashCode() { + return Objects.hash(type, runtimeChecked); + } + + @Override + public String toString() { + return "TypeReachabilityCondition(" + + "type=" + type + + ", runtimeChecked=" + runtimeChecked + + ')'; + } +} From 820cad1f56b4aee21264782f3119de0fe95513d6 Mon Sep 17 00:00:00 2001 From: Mihailo Date: Tue, 3 Jun 2025 18:12:11 +0200 Subject: [PATCH 2/3] Replaced all usages of ConfigurationCondition. --- .../org.graalvm.nativeimage/snapshot.sigtest | 4 + .../hosted/RuntimeForeignAccess.java | 10 +- .../nativeimage/hosted/RuntimeJNIAccess.java | 10 +- .../hosted/RuntimeProxyCreation.java | 6 +- .../nativeimage/hosted/RuntimeReflection.java | 42 +++--- .../hosted/RuntimeResourceAccess.java | 10 +- .../hosted/RuntimeSerialization.java | 14 +- .../impl/ConfigurationCondition.java | 141 ------------------ .../nativeimage/impl/ReflectionRegistry.java | 20 +-- .../impl/RuntimeForeignAccessSupport.java | 10 +- .../impl/RuntimeProxyCreationSupport.java | 6 +- .../impl/RuntimeReflectionSupport.java | 28 ++-- .../impl/RuntimeResourceSupport.java | 11 +- .../impl/RuntimeSerializationSupport.java | 5 +- .../config/ResourceConfigurationTest.java | 4 +- .../configure/ForeignConfigurationParser.java | 10 +- .../svm/configure/ResourcesRegistry.java | 4 +- .../UnresolvedConfigurationCondition.java | 6 +- .../config/ForeignConfiguration.java | 6 +- .../config/ResourceConfiguration.java | 4 +- .../oracle/svm/core/ClassLoaderSupport.java | 6 +- .../core/configure/RuntimeConditionSet.java | 23 +-- .../svm/core/hub/ClassForNameSupport.java | 18 +-- .../svm/core/jdk/JavaNetHttpFeature.java | 4 +- .../com/oracle/svm/core/jdk/Resources.java | 4 +- .../jdk/localization/LocalizationSupport.java | 6 +- .../oracle/svm/core/jni/JNIRuntimeAccess.java | 4 +- .../reflect/proxy/DynamicProxySupport.java | 7 +- .../serialize/SerializationSupport.java | 6 +- .../ForeignFunctionsConfigurationParser.java | 14 +- .../foreign/ForeignFunctionsFeature.java | 8 +- ...onglyTypedRuntimeForeignAccessSupport.java | 24 +-- .../svm/hosted/ClassLoaderSupportImpl.java | 8 +- .../ConditionalConfigurationRegistry.java | 24 +-- .../com/oracle/svm/hosted/FeatureImpl.java | 4 +- .../oracle/svm/hosted/ResourcesFeature.java | 39 ++--- .../config/ConfigurationParserUtils.java | 8 +- .../svm/hosted/config/JNIRegistryAdapter.java | 40 ++--- .../config/ReflectionRegistryAdapter.java | 48 +++--- .../svm/hosted/config/RegistryAdapter.java | 60 ++++---- .../hosted/image/PreserveOptionsSupport.java | 6 +- .../svm/hosted/jdk/JmxCommonFeature.java | 34 ++--- .../svm/hosted/jdk/JmxServerFeature.java | 14 +- .../jdk/localization/LocalizationFeature.java | 24 +-- .../svm/hosted/jni/JNIAccessFeature.java | 22 +-- .../reflect/NativeImageConditionResolver.java | 16 +- .../hosted/reflect/ReflectionDataBuilder.java | 84 ++++++----- .../svm/hosted/reflect/ReflectionFeature.java | 10 +- .../reflect/proxy/DynamicProxyFeature.java | 6 +- .../hosted/reflect/proxy/ProxyRegistry.java | 6 +- .../serialize/SerializationFeature.java | 56 +++---- .../hosted/xml/XMLParsersRegistration.java | 34 ++--- .../hosted/webimage/JSEntryPointRegistry.java | 18 +-- .../svm/hosted/webimage/WebImageFeature.java | 6 +- .../WebImageRuntimeJNIAccessSupport.java | 16 +- 55 files changed, 474 insertions(+), 584 deletions(-) delete mode 100644 sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/ConfigurationCondition.java 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/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/ConfigurationCondition.java b/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/ConfigurationCondition.java deleted file mode 100644 index d7c56dc0dd98..000000000000 --- a/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/ConfigurationCondition.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (c) 2021, 2024, 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.impl; - -import java.util.Objects; - -/** - * 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 - * typeReached condition. - */ -public final class ConfigurationCondition { - - /* 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; - } - - 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. - * - * @param type that has to be reached (or reachable) for this condition to be satisfied - * @param runtimeChecked makes this a type-reachable condition when false - * @return instance of the condition - */ - public static ConfigurationCondition create(Class type, boolean runtimeChecked) { - Objects.requireNonNull(type); - if (JAVA_LANG_OBJECT_REACHED.getType().equals(type)) { - return JAVA_LANG_OBJECT_REACHED; - } - return new ConfigurationCondition(type, runtimeChecked); - } - - public boolean isAlwaysTrue() { - return ConfigurationCondition.alwaysTrue().equals(this); - } - - private ConfigurationCondition(Class type, boolean runtimeChecked) { - this.runtimeChecked = runtimeChecked; - this.type = type; - } - - public Class getType() { - return type; - } - - public boolean isRuntimeChecked() { - return runtimeChecked; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ConfigurationCondition that = (ConfigurationCondition) o; - return runtimeChecked == that.runtimeChecked && Objects.equals(type, that.type); - } - - @Override - public int hashCode() { - return Objects.hash(type, runtimeChecked); - } - - @Override - public String toString() { - return "ConfigurationCondition(" + - "type=" + type + - ", runtimeChecked=" + runtimeChecked + - ')'; - } -} 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/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..fcf88b055d9b 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,7 +34,7 @@ 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; @@ -127,7 +127,7 @@ public void addResourceBundles(UnresolvedConfigurationCondition condition, Strin } @Override - public void addCondition(ConfigurationCondition configurationCondition, Module module, String resourcePath) { + public void addCondition(AccessCondition configurationCondition, Module module, String resourcePath) { } 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/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/UnresolvedConfigurationCondition.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/UnresolvedConfigurationCondition.java index 641680a2b790..94cbe0c7b898 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/UnresolvedConfigurationCondition.java @@ -26,11 +26,11 @@ 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( diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ForeignConfiguration.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ForeignConfiguration.java index b38e2d234504..eece3298094b 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ForeignConfiguration.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ForeignConfiguration.java @@ -37,7 +37,7 @@ import org.graalvm.collections.EconomicMap; import org.graalvm.collections.MapCursor; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import com.oracle.svm.configure.ConfigurationBase; import com.oracle.svm.configure.ConfigurationParser; @@ -337,13 +337,13 @@ private UnresolvedForeignConfigurationParser(EnumSet } @Override - protected void registerDowncall(ConfigurationCondition configurationCondition, ConfigurationFunctionDescriptor descriptor, Map options) { + protected void registerDowncall(AccessCondition configurationCondition, ConfigurationFunctionDescriptor descriptor, Map options) { ForeignConfiguration.this.addDowncall(descriptor, options); } @Override - protected void registerUpcall(ConfigurationCondition configurationCondition, ConfigurationFunctionDescriptor descriptor, Map options) { + protected void registerUpcall(AccessCondition configurationCondition, ConfigurationFunctionDescriptor descriptor, Map options) { ForeignConfiguration.this.addUpcall(descriptor, options); } diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ResourceConfiguration.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ResourceConfiguration.java index 37affab1edbb..2bf93e0426dd 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ResourceConfiguration.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ResourceConfiguration.java @@ -42,7 +42,7 @@ import java.util.concurrent.ConcurrentMap; import java.util.regex.Pattern; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import com.oracle.svm.configure.ConditionalElement; import com.oracle.svm.configure.ConfigurationBase; @@ -84,7 +84,7 @@ public void addResourceEntry(Module module, String resourcePath, Object origin) } @Override - public void addCondition(ConfigurationCondition condition, Module module, String resourcePath) { + public void addCondition(AccessCondition condition, Module module, String resourcePath) { throw new UnsupportedOperationException("Unused function."); } diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/ClassLoaderSupport.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/ClassLoaderSupport.java index 3f3a411b3a13..1fdb1a7b5ffc 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/ClassLoaderSupport.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/ClassLoaderSupport.java @@ -34,7 +34,7 @@ import org.graalvm.nativeimage.Platform; import org.graalvm.nativeimage.Platforms; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; @Platforms(Platform.HOSTED_ONLY.class) public abstract class ClassLoaderSupport { @@ -52,7 +52,7 @@ public boolean isNativeImageClassLoader(ClassLoader classLoader) { protected abstract boolean isNativeImageClassLoaderImpl(ClassLoader classLoader); - public record ConditionWithOrigin(ConfigurationCondition condition, Object origin) { + public record ConditionWithOrigin(AccessCondition condition, Object origin) { } public interface ResourceCollector { @@ -60,7 +60,7 @@ public interface ResourceCollector { void addResourceEntry(Module module, String resourceName, Object origin); - void addResourceConditionally(Module module, String resourceName, ConfigurationCondition condition, Object origin); + void addResourceConditionally(Module module, String resourceName, AccessCondition condition, Object origin); void registerNegativeQuery(Module module, String resourceName); diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/configure/RuntimeConditionSet.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/configure/RuntimeConditionSet.java index d403da2152bc..61a57942ae39 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/configure/RuntimeConditionSet.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/configure/RuntimeConditionSet.java @@ -33,7 +33,8 @@ 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.TypeReachabilityCondition; import com.oracle.svm.core.hub.DynamicHub; import com.oracle.svm.core.util.VMError; @@ -44,7 +45,7 @@ *

    * If any of the {@link #conditions} is satisfied then the whole set becomes also * {@link #satisfied}. {@link RuntimeConditionSet}s can be created at build time - * {@link #createHosted(ConfigurationCondition)} and stored to the image heap, or it can be encoded + * {@link #createHosted(AccessCondition)} and stored to the image heap, or it can be encoded * ({@link #getTypesForEncoding()} and later decoded at run time ({@link #createDecoded(Object[])}. * The current implementation does not cache {@link #conditions}, although this will be implemented * in the future (GR-49526) @@ -60,18 +61,19 @@ public static RuntimeConditionSet emptySet() { } @Platforms(Platform.HOSTED_ONLY.class) - public static RuntimeConditionSet createHosted(ConfigurationCondition condition) { + public static RuntimeConditionSet createHosted(AccessCondition condition) { var conditionSet = new RuntimeConditionSet(new Object[0]); conditionSet.addCondition(condition); return conditionSet; } @Platforms(Platform.HOSTED_ONLY.class) - public synchronized void addCondition(ConfigurationCondition cnd) { - VMError.guarantee(cnd.isRuntimeChecked(), "Only runtime conditions can be added to the ConditionalRuntimeValue."); + public synchronized void addCondition(AccessCondition cnd) { + TypeReachabilityCondition reachabilityCondition = (TypeReachabilityCondition) cnd; + VMError.guarantee(reachabilityCondition.isRuntimeChecked(), "Only runtime conditions can be added to the ConditionalRuntimeValue."); if (satisfied) { return; - } else if (cnd.isAlwaysTrue()) { + } else if (reachabilityCondition.isAlwaysTrue()) { conditions = null; satisfied = true; return; @@ -159,11 +161,12 @@ private void setConditions(Object[] conditions) { satisfied = false; } - private static Object createRuntimeCondition(ConfigurationCondition cnd) { - if (cnd.isAlwaysTrue() || !cnd.isRuntimeChecked()) { + private static Object createRuntimeCondition(AccessCondition cnd) { + TypeReachabilityCondition reachabilityCondition = (TypeReachabilityCondition) cnd; + if (reachabilityCondition.isAlwaysTrue() || !reachabilityCondition.isRuntimeChecked()) { throw VMError.shouldNotReachHere("We should never create run-time conditions from conditions that are always true at build time. Condition: " + cnd); } - return cnd.getType(); + return reachabilityCondition.getType(); } private static boolean isSatisfied(Object condition) { @@ -190,7 +193,7 @@ private UnmodifiableRuntimeConditionSet(Object[] conditions) { } @Override - public synchronized void addCondition(ConfigurationCondition cnd) { + public synchronized void addCondition(AccessCondition cnd) { throw new UnsupportedOperationException("Can't add conditions to an unmodifiable set of conditions."); } } diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/ClassForNameSupport.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/ClassForNameSupport.java index 83aeb042797c..26d21156ce6a 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/ClassForNameSupport.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/ClassForNameSupport.java @@ -38,7 +38,7 @@ import org.graalvm.nativeimage.Platform; import org.graalvm.nativeimage.Platform.HOSTED_ONLY; import org.graalvm.nativeimage.Platforms; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import com.oracle.svm.configure.ClassNameSupport; import com.oracle.svm.configure.config.ConfigurationType; @@ -137,11 +137,11 @@ public static boolean respectClassLoader() { @Platforms(Platform.HOSTED_ONLY.class) public void registerClass(Class clazz, ClassLoader runtimeClassLoader) { - registerClass(ConfigurationCondition.alwaysTrue(), clazz, runtimeClassLoader); + registerClass(AccessCondition.alwaysTrue(), clazz, runtimeClassLoader); } @Platforms(Platform.HOSTED_ONLY.class) - public void registerClass(ConfigurationCondition condition, Class clazz, ClassLoader runtimeClassLoader) { + public void registerClass(AccessCondition condition, Class clazz, ClassLoader runtimeClassLoader) { assert !clazz.isPrimitive() : "primitive classes cannot be looked up by name"; if (PredefinedClassesSupport.isPredefined(clazz)) { return; // must be defined at runtime before it can be looked up @@ -205,7 +205,7 @@ private boolean isLibGraalClass(Class clazz) { } public static ConditionalRuntimeValue updateConditionalValue(ConditionalRuntimeValue existingConditionalValue, Object newValue, - ConfigurationCondition additionalCondition) { + AccessCondition additionalCondition) { if (existingConditionalValue == null) { return new ConditionalRuntimeValue<>(RuntimeConditionSet.createHosted(additionalCondition), newValue); } else { @@ -216,7 +216,7 @@ public static ConditionalRuntimeValue updateConditionalValue(Conditional } @Platforms(Platform.HOSTED_ONLY.class) - public void registerExceptionForClass(ConfigurationCondition condition, String className, Throwable t) { + public void registerExceptionForClass(AccessCondition condition, String className, Throwable t) { if (RuntimeClassLoading.isSupported()) { return; } @@ -231,7 +231,7 @@ public void registerExceptionForClass(ConfigurationCondition condition, String c } @Platforms(Platform.HOSTED_ONLY.class) - public void registerNegativeQuery(ConfigurationCondition condition, String className) { + public void registerNegativeQuery(AccessCondition condition, String className) { if (respectClassLoader()) { registerKnownClassName(condition, className); } else { @@ -244,7 +244,7 @@ public void registerNegativeQuery(ConfigurationCondition condition, String class } } - private void registerKnownClassName(ConfigurationCondition condition, String className) { + private void registerKnownClassName(AccessCondition condition, String className) { assert respectClassLoader(); synchronized (knownClassNames) { RuntimeConditionSet existingConditions = knownClassNames.get(className); @@ -257,7 +257,7 @@ private void registerKnownClassName(ConfigurationCondition condition, String cla } @Platforms(Platform.HOSTED_ONLY.class) - public void registerUnsafeAllocated(ConfigurationCondition condition, Class clazz) { + public void registerUnsafeAllocated(AccessCondition condition, Class clazz) { if (!clazz.isArray() && !clazz.isInterface() && !Modifier.isAbstract(clazz.getModifiers())) { /* Otherwise, UNSAFE.allocateInstance results in InstantiationException */ var conditionSet = unsafeInstantiatedClasses.putIfAbsent(clazz, RuntimeConditionSet.createHosted(condition)); @@ -267,7 +267,7 @@ public void registerUnsafeAllocated(ConfigurationCondition condition, Class c } } - private void updateCondition(ConfigurationCondition condition, String className, Object value) { + private void updateCondition(AccessCondition condition, String className, Object value) { synchronized (knownClasses) { var runtimeConditions = knownClasses.putIfAbsent(className, new ConditionalRuntimeValue<>(RuntimeConditionSet.createHosted(condition), value)); if (runtimeConditions != null) { diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/JavaNetHttpFeature.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/JavaNetHttpFeature.java index a36b46ba346c..f7a48d89e5d6 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/JavaNetHttpFeature.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/JavaNetHttpFeature.java @@ -27,8 +27,8 @@ import java.util.Optional; import org.graalvm.nativeimage.ImageSingletons; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.hosted.RuntimeReflection; -import org.graalvm.nativeimage.impl.ConfigurationCondition; import org.graalvm.nativeimage.impl.RuntimeClassInitializationSupport; import com.oracle.svm.configure.ResourcesRegistry; @@ -94,7 +94,7 @@ public void afterRegistration(AfterRegistrationAccess access) { @Override public void beforeAnalysis(BeforeAnalysisAccess access) { access.registerReachabilityHandler(a -> { - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "sun.net.httpserver.simpleserver.resources.simpleserver"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "sun.net.httpserver.simpleserver.resources.simpleserver"); }, access.findClassByName("sun.net.httpserver.simpleserver.SimpleFileServerImpl")); } } diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/Resources.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/Resources.java index 10eb5db9b94c..639e445e22aa 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/Resources.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/Resources.java @@ -50,7 +50,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 com.oracle.svm.core.BuildPhaseProvider; import com.oracle.svm.core.ClassLoaderSupport.ConditionWithOrigin; @@ -322,7 +322,7 @@ public void registerNegativeQuery(Module module, String resourceName) { } @Platforms(Platform.HOSTED_ONLY.class) - public void registerIncludePattern(ConfigurationCondition condition, String module, String pattern) { + public void registerIncludePattern(AccessCondition condition, String module, String pattern) { assert MissingRegistrationUtils.throwMissingRegistrationErrors(); synchronized (requestedPatterns) { updateTimeStamp(); diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/localization/LocalizationSupport.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/localization/LocalizationSupport.java index 470264065b6c..8183ae389ec8 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/localization/LocalizationSupport.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/localization/LocalizationSupport.java @@ -48,8 +48,8 @@ import org.graalvm.nativeimage.ImageSingletons; import org.graalvm.nativeimage.Platform; import org.graalvm.nativeimage.Platforms; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.hosted.RuntimeReflection; -import org.graalvm.nativeimage.impl.ConfigurationCondition; import org.graalvm.nativeimage.impl.RuntimeReflectionSupport; import org.graalvm.nativeimage.impl.RuntimeResourceSupport; @@ -182,7 +182,7 @@ public void registerRequiredReflectionAndResourcesForBundle(String baseName, Col if (i > 0) { String name = baseName.substring(i + 1) + "Provider"; String providerName = baseName.substring(0, i) + ".spi." + name; - ImageSingletons.lookup(RuntimeReflectionSupport.class).registerClassLookup(ConfigurationCondition.alwaysTrue(), providerName); + ImageSingletons.lookup(RuntimeReflectionSupport.class).registerClassLookup(AccessCondition.alwaysTrue(), providerName); } } @@ -283,7 +283,7 @@ private static void registerNullaryConstructor(Class bundleClass) { } @Platforms(Platform.HOSTED_ONLY.class) - public void registerBundleLookup(ConfigurationCondition condition, String baseName) { + public void registerBundleLookup(AccessCondition condition, String baseName) { RuntimeConditionSet conditionSet = RuntimeConditionSet.emptySet(); var registered = registeredBundles.putIfAbsent(baseName, conditionSet); (registered == null ? conditionSet : registered).addCondition(condition); diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jni/JNIRuntimeAccess.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jni/JNIRuntimeAccess.java index 4e4080b7667e..0c4711fc7eb5 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jni/JNIRuntimeAccess.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jni/JNIRuntimeAccess.java @@ -30,8 +30,8 @@ import org.graalvm.nativeimage.ImageSingletons; import org.graalvm.nativeimage.Platform; import org.graalvm.nativeimage.Platforms; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.hosted.RuntimeJNIAccess; -import org.graalvm.nativeimage.impl.ConfigurationCondition; import org.graalvm.nativeimage.impl.RuntimeJNIAccessSupport; /** @@ -56,6 +56,6 @@ public static void register(Field... fields) { } public static void register(boolean finalIsWritable, Field... fields) { - ImageSingletons.lookup(RuntimeJNIAccessSupport.class).register(ConfigurationCondition.alwaysTrue(), finalIsWritable, fields); + ImageSingletons.lookup(RuntimeJNIAccessSupport.class).register(AccessCondition.alwaysTrue(), finalIsWritable, fields); } } diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/proxy/DynamicProxySupport.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/proxy/DynamicProxySupport.java index 40883789eba9..aeb399fba4e3 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/proxy/DynamicProxySupport.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/proxy/DynamicProxySupport.java @@ -35,9 +35,10 @@ import org.graalvm.collections.EconomicMap; import org.graalvm.nativeimage.Platform; import org.graalvm.nativeimage.Platforms; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.hosted.RuntimeClassInitialization; import org.graalvm.nativeimage.hosted.RuntimeReflection; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.impl.TypeReachabilityCondition; import com.oracle.svm.core.configure.ConditionalRuntimeValue; import com.oracle.svm.core.configure.RuntimeConditionSet; @@ -108,8 +109,8 @@ public DynamicProxySupport() { @Override @Platforms(Platform.HOSTED_ONLY.class) - public synchronized void addProxyClass(ConfigurationCondition condition, Class... interfaces) { - VMError.guarantee(condition.isRuntimeChecked(), "The condition used must be a runtime condition."); + public synchronized void addProxyClass(AccessCondition condition, Class... interfaces) { + VMError.guarantee(((TypeReachabilityCondition) condition).isRuntimeChecked(), "The condition used must be a runtime condition."); /* * Make a defensive copy of the interfaces array to protect against the caller modifying the * array. diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/serialize/SerializationSupport.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/serialize/SerializationSupport.java index 8ca407aa2cd4..b7d060e37e6d 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/serialize/SerializationSupport.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/serialize/SerializationSupport.java @@ -38,7 +38,7 @@ import org.graalvm.collections.MapCursor; import org.graalvm.nativeimage.Platform; import org.graalvm.nativeimage.Platforms; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import com.oracle.svm.core.BuildPhaseProvider; import com.oracle.svm.core.SubstrateUtil; @@ -217,7 +217,7 @@ public int getTypeID() { private final EconomicMap lambdaCapturingClasses = EconomicMap.create(); @Platforms(Platform.HOSTED_ONLY.class) - public void registerSerializationTargetClass(ConfigurationCondition cnd, DynamicHub hub) { + public void registerSerializationTargetClass(AccessCondition cnd, DynamicHub hub) { synchronized (classes) { var previous = classes.putIfAbsent(BuildPhaseProvider.isHostedUniverseBuilt() ? hub.getTypeID() : new DynamicHubKey(hub), RuntimeConditionSet.createHosted(cnd)); if (previous != null) { @@ -240,7 +240,7 @@ public void replaceHubKeyWithTypeID() { } @Platforms(Platform.HOSTED_ONLY.class) - public void registerLambdaCapturingClass(ConfigurationCondition cnd, String lambdaCapturingClass) { + public void registerLambdaCapturingClass(AccessCondition cnd, String lambdaCapturingClass) { synchronized (lambdaCapturingClasses) { var previousConditions = lambdaCapturingClasses.putIfAbsent(lambdaCapturingClass, RuntimeConditionSet.createHosted(cnd)); if (previousConditions != null) { diff --git a/substratevm/src/com.oracle.svm.hosted.foreign/src/com/oracle/svm/hosted/foreign/ForeignFunctionsConfigurationParser.java b/substratevm/src/com.oracle.svm.hosted.foreign/src/com/oracle/svm/hosted/foreign/ForeignFunctionsConfigurationParser.java index ddb2c2119a5c..677f7bece2a2 100644 --- a/substratevm/src/com.oracle.svm.hosted.foreign/src/com/oracle/svm/hosted/foreign/ForeignFunctionsConfigurationParser.java +++ b/substratevm/src/com.oracle.svm.hosted.foreign/src/com/oracle/svm/hosted/foreign/ForeignFunctionsConfigurationParser.java @@ -50,7 +50,7 @@ import org.graalvm.collections.Pair; 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; import com.oracle.svm.configure.ConfigurationParserOption; @@ -96,13 +96,13 @@ protected EnumSet supportedOptions() { } @Override - protected void registerDowncall(ConfigurationCondition configurationCondition, FunctionDescriptor descriptor, Option[] options) { - accessSupport.registerForDowncall(ConfigurationCondition.alwaysTrue(), descriptor, (Object[]) options); + protected void registerDowncall(AccessCondition configurationCondition, FunctionDescriptor descriptor, Option[] options) { + accessSupport.registerForDowncall(AccessCondition.alwaysTrue(), descriptor, (Object[]) options); } @Override - protected void registerUpcall(ConfigurationCondition configurationCondition, FunctionDescriptor descriptor, Option[] options) { - accessSupport.registerForUpcall(ConfigurationCondition.alwaysTrue(), descriptor, (Object[]) options); + protected void registerUpcall(AccessCondition configurationCondition, FunctionDescriptor descriptor, Option[] options) { + accessSupport.registerForUpcall(AccessCondition.alwaysTrue(), descriptor, (Object[]) options); } @Override @@ -129,7 +129,7 @@ protected void registerDirectUpcallWithDescriptor(String className, String metho className, methodName, methodType); return; } - accessSupport.registerForDirectUpcall(ConfigurationCondition.alwaysTrue(), target, descriptor, (Object[]) options); + accessSupport.registerForDirectUpcall(AccessCondition.alwaysTrue(), target, descriptor, (Object[]) options); } @Override @@ -167,7 +167,7 @@ protected void registerDirectUpcallWithoutDescriptor(String className, String me for (Pair pair : descriptors) { var options = createUpcallOptions(optionsMap, pair.getLeft()); try { - accessSupport.registerForDirectUpcall(ConfigurationCondition.alwaysTrue(), pair.getRight(), pair.getLeft(), (Object[]) options); + accessSupport.registerForDirectUpcall(AccessCondition.alwaysTrue(), pair.getRight(), pair.getLeft(), (Object[]) options); } catch (IllegalArgumentException e) { handleMissingElement(e, "Could not register direct upcall stub '%s.%s%s'", className, methodName, pair.getLeft().toMethodType()); } diff --git a/substratevm/src/com.oracle.svm.hosted.foreign/src/com/oracle/svm/hosted/foreign/ForeignFunctionsFeature.java b/substratevm/src/com.oracle.svm.hosted.foreign/src/com/oracle/svm/hosted/foreign/ForeignFunctionsFeature.java index 7d92f9ae9ba2..6b389a7e361d 100644 --- a/substratevm/src/com.oracle.svm.hosted.foreign/src/com/oracle/svm/hosted/foreign/ForeignFunctionsFeature.java +++ b/substratevm/src/com.oracle.svm.hosted.foreign/src/com/oracle/svm/hosted/foreign/ForeignFunctionsFeature.java @@ -56,9 +56,9 @@ import org.graalvm.nativeimage.Platforms; import org.graalvm.nativeimage.c.function.CFunctionPointer; import org.graalvm.nativeimage.c.type.CIntPointer; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.hosted.RuntimeClassInitialization; import org.graalvm.nativeimage.hosted.RuntimeReflection; -import org.graalvm.nativeimage.impl.ConfigurationCondition; import org.graalvm.nativeimage.impl.RuntimeForeignAccessSupport; import com.oracle.graal.pointsto.meta.AnalysisMetaAccess; @@ -196,7 +196,7 @@ private final class RuntimeForeignAccessSupportImpl extends ConditionalConfigura private final Lookup implLookup = ReflectionUtil.readStaticField(MethodHandles.Lookup.class, "IMPL_LOOKUP"); @Override - public void registerForDowncall(ConfigurationCondition condition, FunctionDescriptor desc, Linker.Option... options) { + public void registerForDowncall(AccessCondition condition, FunctionDescriptor desc, Linker.Option... options) { checkNotSealed(); try { LinkerOptions linkerOptions = LinkerOptions.forDowncall(desc, options); @@ -207,7 +207,7 @@ public void registerForDowncall(ConfigurationCondition condition, FunctionDescri } @Override - public void registerForUpcall(ConfigurationCondition condition, FunctionDescriptor desc, Linker.Option... options) { + public void registerForUpcall(AccessCondition condition, FunctionDescriptor desc, Linker.Option... options) { checkNotSealed(); try { LinkerOptions linkerOptions = LinkerOptions.forUpcall(desc, options); @@ -218,7 +218,7 @@ public void registerForUpcall(ConfigurationCondition condition, FunctionDescript } @Override - public void registerForDirectUpcall(ConfigurationCondition condition, MethodHandle target, FunctionDescriptor desc, Linker.Option... options) { + public void registerForDirectUpcall(AccessCondition condition, MethodHandle target, FunctionDescriptor desc, Linker.Option... options) { checkNotSealed(); DirectMethodHandleDesc directMethodHandleDesc = target.describeConstable() .filter(x -> x instanceof DirectMethodHandleDesc dmh && dmh.kind() == Kind.STATIC) diff --git a/substratevm/src/com.oracle.svm.hosted.foreign/src/com/oracle/svm/hosted/foreign/StronglyTypedRuntimeForeignAccessSupport.java b/substratevm/src/com.oracle.svm.hosted.foreign/src/com/oracle/svm/hosted/foreign/StronglyTypedRuntimeForeignAccessSupport.java index 137f37345631..7ba3f8d7f210 100644 --- a/substratevm/src/com.oracle.svm.hosted.foreign/src/com/oracle/svm/hosted/foreign/StronglyTypedRuntimeForeignAccessSupport.java +++ b/substratevm/src/com.oracle.svm.hosted.foreign/src/com/oracle/svm/hosted/foreign/StronglyTypedRuntimeForeignAccessSupport.java @@ -28,7 +28,7 @@ import java.lang.foreign.Linker; import java.lang.invoke.MethodHandle; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.impl.RuntimeForeignAccessSupport; /** @@ -55,51 +55,51 @@ private static Linker.Option[] castOptions(Object... optionsO) { @FunctionalInterface interface Recorder { - void apply(ConfigurationCondition condition, FunctionDescriptor desc, Linker.Option... options); + void apply(AccessCondition condition, FunctionDescriptor desc, Linker.Option... options); } @FunctionalInterface interface DirectUpcallRecorder { - void apply(ConfigurationCondition condition, MethodHandle target, FunctionDescriptor desc, Linker.Option... options); + void apply(AccessCondition condition, MethodHandle target, FunctionDescriptor desc, Linker.Option... options); } static StronglyTypedRuntimeForeignAccessSupport make(Recorder forDowncalls, Recorder forUpcalls, DirectUpcallRecorder forDirectUpcalls) { return new StronglyTypedRuntimeForeignAccessSupport() { @Override - public void registerForDowncall(ConfigurationCondition condition, FunctionDescriptor desc, Linker.Option... options) { + public void registerForDowncall(AccessCondition condition, FunctionDescriptor desc, Linker.Option... options) { forDowncalls.apply(condition, desc, options); } @Override - public void registerForUpcall(ConfigurationCondition condition, FunctionDescriptor desc, Linker.Option... options) { + public void registerForUpcall(AccessCondition condition, FunctionDescriptor desc, Linker.Option... options) { forUpcalls.apply(condition, desc, options); } @Override - public void registerForDirectUpcall(ConfigurationCondition condition, MethodHandle target, FunctionDescriptor fd, Linker.Option... options) { + public void registerForDirectUpcall(AccessCondition condition, MethodHandle target, FunctionDescriptor fd, Linker.Option... options) { forDirectUpcalls.apply(condition, target, fd, options); } }; } @Override - default void registerForDowncall(ConfigurationCondition condition, Object descO, Object... optionsO) { + default void registerForDowncall(AccessCondition condition, Object descO, Object... optionsO) { registerForDowncall(condition, castDesc(descO), castOptions(optionsO)); } - void registerForDowncall(ConfigurationCondition condition, FunctionDescriptor desc, Linker.Option... options); + void registerForDowncall(AccessCondition condition, FunctionDescriptor desc, Linker.Option... options); @Override - default void registerForUpcall(ConfigurationCondition condition, Object descO, Object... optionsO) { + default void registerForUpcall(AccessCondition condition, Object descO, Object... optionsO) { registerForUpcall(condition, castDesc(descO), castOptions(optionsO)); } - void registerForUpcall(ConfigurationCondition condition, FunctionDescriptor desc, Linker.Option... options); + void registerForUpcall(AccessCondition condition, FunctionDescriptor desc, Linker.Option... options); @Override - default void registerForDirectUpcall(ConfigurationCondition condition, MethodHandle target, Object desc, Object... options) { + default void registerForDirectUpcall(AccessCondition condition, MethodHandle target, Object desc, Object... options) { registerForDirectUpcall(condition, target, castDesc(desc), castOptions(options)); } - void registerForDirectUpcall(ConfigurationCondition condition, MethodHandle target, FunctionDescriptor desc, Linker.Option... options); + void registerForDirectUpcall(AccessCondition condition, MethodHandle target, FunctionDescriptor desc, Linker.Option... options); } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ClassLoaderSupportImpl.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ClassLoaderSupportImpl.java index c8dff0897002..f774fd8e45ee 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ClassLoaderSupportImpl.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ClassLoaderSupportImpl.java @@ -54,7 +54,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import com.oracle.svm.core.ClassLoaderSupport; import com.oracle.svm.core.util.ClasspathUtils; @@ -72,7 +72,7 @@ public class ClassLoaderSupportImpl extends ClassLoaderSupport { private final Map> packageToModules; - private record ConditionalResource(ConfigurationCondition condition, String resourceName, Object origin) { + private record ConditionalResource(AccessCondition condition, String resourceName, Object origin) { } public ClassLoaderSupportImpl(NativeImageClassLoaderSupport classLoaderSupport) { @@ -220,13 +220,13 @@ private static void scanJar(Path jarPath, ResourceCollector collector, boolean i } } - private static void includeResource(ResourceCollector collector, Module module, String name, ConfigurationCondition condition, Object origin) { + private static void includeResource(ResourceCollector collector, Module module, String name, AccessCondition condition, Object origin) { collector.addResourceConditionally(module, name, condition, origin); } private static List shouldIncludeEntry(Module module, ResourceCollector collector, String fileName, URI uri, boolean includeCurrent) { if (includeCurrent && !(fileName.endsWith(".class") || fileName.endsWith(".jar"))) { - return Collections.singletonList(new ConditionWithOrigin(ConfigurationCondition.alwaysTrue(), "Include all")); + return Collections.singletonList(new ConditionWithOrigin(AccessCondition.alwaysTrue(), "Include all")); } return collector.isIncluded(module, fileName, uri); diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ConditionalConfigurationRegistry.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ConditionalConfigurationRegistry.java index c09f626e5baf..7d972b230a94 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ConditionalConfigurationRegistry.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ConditionalConfigurationRegistry.java @@ -32,7 +32,8 @@ import java.util.function.Consumer; import org.graalvm.nativeimage.hosted.Feature; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; +import org.graalvm.nativeimage.impl.TypeReachabilityCondition; import com.oracle.svm.core.util.VMError; import com.oracle.svm.hosted.classinitialization.ClassInitializationSupport; @@ -42,32 +43,33 @@ public abstract class ConditionalConfigurationRegistry { private SVMHost hostVM; private final Map, Collection> pendingReachabilityHandlers = new ConcurrentHashMap<>(); - protected void registerConditionalConfiguration(ConfigurationCondition condition, Consumer consumer) { + protected void registerConditionalConfiguration(AccessCondition condition, Consumer consumer) { + TypeReachabilityCondition reachabilityCondition = (TypeReachabilityCondition) condition; Objects.requireNonNull(condition, "Cannot use null value as condition for conditional configuration. Please ensure that you register a non-null condition."); Objects.requireNonNull(consumer, "Cannot use null value as runnable for conditional configuration. Please ensure that you register a non-null runnable."); - if (condition.isRuntimeChecked() && !condition.isAlwaysTrue()) { + if (reachabilityCondition.isRuntimeChecked() && !reachabilityCondition.isAlwaysTrue()) { /* * We do this before the type is reached as the handler runs during analysis when it is * too late to register types for reached tracking. If the type is never reached, there * is no damage as subtypes will also never be reached. */ - ClassInitializationSupport.singleton().addForTypeReachedTracking(condition.getType()); + ClassInitializationSupport.singleton().addForTypeReachedTracking(reachabilityCondition.getType()); } - if (ConfigurationCondition.alwaysTrue().equals(condition)) { + if (reachabilityCondition.isAlwaysTrue()) { /* analysis optimization to include new types as early as possible */ - consumer.accept(ConfigurationCondition.alwaysTrue()); + consumer.accept(AccessCondition.alwaysTrue()); } else { - ConfigurationCondition runtimeCondition; - if (condition.isRuntimeChecked()) { + AccessCondition runtimeCondition; + if (reachabilityCondition.isRuntimeChecked()) { runtimeCondition = condition; } else { - runtimeCondition = ConfigurationCondition.alwaysTrue(); + runtimeCondition = AccessCondition.alwaysTrue(); } if (beforeAnalysisAccess == null) { - Collection handlers = pendingReachabilityHandlers.computeIfAbsent(condition.getType(), key -> new ConcurrentLinkedQueue<>()); + Collection handlers = pendingReachabilityHandlers.computeIfAbsent(reachabilityCondition.getType(), key -> new ConcurrentLinkedQueue<>()); handlers.add(() -> consumer.accept(runtimeCondition)); } else { - beforeAnalysisAccess.registerReachabilityHandler(access -> consumer.accept(runtimeCondition), condition.getType()); + beforeAnalysisAccess.registerReachabilityHandler(access -> consumer.accept(runtimeCondition), reachabilityCondition.getType()); } } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/FeatureImpl.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/FeatureImpl.java index 9d268b206d05..a5b596eeb66d 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/FeatureImpl.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/FeatureImpl.java @@ -47,11 +47,11 @@ import org.graalvm.collections.Pair; import org.graalvm.nativeimage.AnnotationAccess; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.hosted.Feature; import org.graalvm.nativeimage.hosted.Feature.DuringAnalysisAccess; import org.graalvm.nativeimage.hosted.FieldValueTransformer; import org.graalvm.nativeimage.hosted.RuntimeReflection; -import org.graalvm.nativeimage.impl.ConfigurationCondition; import com.oracle.graal.pointsto.BigBang; import com.oracle.graal.pointsto.ObjectScanner; @@ -409,7 +409,7 @@ public void registerAsUnsafeAllocated(AnalysisType aType) { throw UserError.abort("Cannot register an abstract class as instantiated: " + aType.toJavaName(true)); } aType.registerAsUnsafeAllocated("From feature"); - classForNameSupport.registerUnsafeAllocated(ConfigurationCondition.alwaysTrue(), aType.getJavaClass()); + classForNameSupport.registerUnsafeAllocated(AccessCondition.alwaysTrue(), aType.getJavaClass()); } @Override diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ResourcesFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ResourcesFeature.java index 2f11afd2fc5e..c8a555fbfdb1 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ResourcesFeature.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ResourcesFeature.java @@ -56,9 +56,10 @@ import java.util.stream.Collectors; import org.graalvm.nativeimage.ImageSingletons; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.hosted.RuntimeResourceAccess; -import org.graalvm.nativeimage.impl.ConfigurationCondition; import org.graalvm.nativeimage.impl.RuntimeResourceSupport; +import org.graalvm.nativeimage.impl.TypeReachabilityCondition; import com.oracle.svm.configure.ConfigurationFile; import com.oracle.svm.configure.ResourceConfigurationParser; @@ -161,10 +162,10 @@ public static class Options { private boolean sealed = false; - private record ConditionalPattern(ConfigurationCondition condition, String pattern, Object origin) { + private record ConditionalPattern(AccessCondition condition, String pattern, Object origin) { } - private record CompiledConditionalPattern(ConfigurationCondition condition, ResourcePattern compiledPattern, Object origin) { + private record CompiledConditionalPattern(AccessCondition condition, ResourcePattern compiledPattern, Object origin) { } private Set resourcePatternWorkSet = Collections.newSetFromMap(new ConcurrentHashMap<>()); @@ -174,7 +175,7 @@ private record CompiledConditionalPattern(ConfigurationCondition condition, Reso private int loadedConfigurations; private ImageClassLoader imageClassLoader; - private class ResourcesRegistryImpl extends ConditionalConfigurationRegistry implements ResourcesRegistry { + private class ResourcesRegistryImpl extends ConditionalConfigurationRegistry implements ResourcesRegistry { private final ClassInitializationSupport classInitializationSupport = ClassInitializationSupport.singleton(); private final Set alreadyAddedResources = new HashSet<>(); @@ -183,7 +184,7 @@ private class ResourcesRegistryImpl extends ConditionalConfigurationRegistry imp } @Override - public void addResources(ConfigurationCondition condition, String pattern, Object origin) { + public void addResources(AccessCondition condition, String pattern, Object origin) { try { resourcePatternWorkSet.add(new ConditionalPattern(condition, pattern, origin)); } catch (UnsupportedOperationException e) { @@ -192,17 +193,17 @@ public void addResources(ConfigurationCondition condition, String pattern, Objec } @Override - public void addGlob(ConfigurationCondition condition, String module, String glob, Object origin) { + public void addGlob(AccessCondition condition, String module, String glob, Object origin) { String canonicalGlob = NativeImageResourcePathRepresentation.toCanonicalForm(glob); String resolvedGlob = GlobUtils.transformToTriePath(canonicalGlob, module); globWorkSet.add(new ConditionalPattern(condition, resolvedGlob, origin)); } @Override - public void addCondition(ConfigurationCondition condition, Module module, String resourcePath) { + public void addCondition(AccessCondition condition, Module module, String resourcePath) { var conditionalResource = Resources.currentLayer().getResource(createStorageKey(module, resourcePath)); if (conditionalResource != null) { - classInitializationSupport.addForTypeReachedTracking(condition.getType()); + classInitializationSupport.addForTypeReachedTracking(((TypeReachabilityCondition) condition).getType()); conditionalResource.getConditions().addCondition(condition); } } @@ -233,7 +234,7 @@ public void injectResource(Module module, String resourcePath, byte[] resourceCo } @Override - public void ignoreResources(ConfigurationCondition condition, String pattern) { + public void ignoreResources(AccessCondition condition, String pattern) { registerConditionalConfiguration(condition, (cnd) -> { UserError.guarantee(!sealed, "Resources ignored too late: %s", pattern); @@ -242,17 +243,17 @@ public void ignoreResources(ConfigurationCondition condition, String pattern) { } @Override - public void addResourceBundles(ConfigurationCondition condition, String name) { + public void addResourceBundles(AccessCondition condition, String name) { registerConditionalConfiguration(condition, (cnd) -> ImageSingletons.lookup(LocalizationFeature.class).prepareBundle(cnd, name)); } @Override - public void addClassBasedResourceBundle(ConfigurationCondition condition, String basename, String className) { + public void addClassBasedResourceBundle(AccessCondition condition, String basename, String className) { registerConditionalConfiguration(condition, (cnd) -> ImageSingletons.lookup(LocalizationFeature.class).prepareClassResourceBundle(basename, className)); } @Override - public void addResourceBundles(ConfigurationCondition condition, String basename, Collection locales) { + public void addResourceBundles(AccessCondition condition, String basename, Collection locales) { registerConditionalConfiguration(condition, (cnd) -> ImageSingletons.lookup(LocalizationFeature.class).prepareBundle(cnd, basename, locales)); } @@ -406,14 +407,14 @@ protected boolean collectEmbeddedResourcesInfo() { public void beforeAnalysis(BeforeAnalysisAccess a) { FeatureImpl.BeforeAnalysisAccessImpl access = (FeatureImpl.BeforeAnalysisAccessImpl) a; /* load and parse resource configuration files */ - ConfigurationConditionResolver conditionResolver = new NativeImageConditionResolver(access.getImageClassLoader(), + ConfigurationConditionResolver conditionResolver = new NativeImageConditionResolver(access.getImageClassLoader(), ClassInitializationSupport.singleton()); - ResourceConfigurationParser parser = ResourceConfigurationParser.create(true, conditionResolver, ResourcesRegistry.singleton(), + ResourceConfigurationParser parser = ResourceConfigurationParser.create(true, conditionResolver, ResourcesRegistry.singleton(), ConfigurationFiles.Options.getConfigurationParserOptions()); loadedConfigurations = ConfigurationParserUtils.parseAndRegisterConfigurationsFromCombinedFile(parser, imageClassLoader, "resource"); - ResourceConfigurationParser legacyParser = ResourceConfigurationParser.create(false, conditionResolver, ResourcesRegistry.singleton(), + ResourceConfigurationParser legacyParser = ResourceConfigurationParser.create(false, conditionResolver, ResourcesRegistry.singleton(), ConfigurationFiles.Options.getConfigurationParserOptions()); loadedConfigurations += ConfigurationParserUtils.parseAndRegisterConfigurations(legacyParser, imageClassLoader, "resource", ConfigurationFiles.Options.ResourceConfigurationFiles, ConfigurationFiles.Options.ResourceConfigurationResources, @@ -444,7 +445,7 @@ public void beforeAnalysis(BeforeAnalysisAccess a) { /* prepare regex patterns for resource registration */ resourcePatternWorkSet.addAll(Options.IncludeResources.getValue() .getValuesWithOrigins() - .map(e -> new ConditionalPattern(ConfigurationCondition.alwaysTrue(), e.value(), e.origin())) + .map(e -> new ConditionalPattern(AccessCondition.alwaysTrue(), e.value(), e.origin())) .toList()); Set includePatterns = resourcePatternWorkSet .stream() @@ -583,7 +584,7 @@ public void addResourceEntry(Module module, String resourceName, Object origin) } @Override - public void addResourceConditionally(Module module, String resourceName, ConfigurationCondition condition, Object origin) { + public void addResourceConditionally(Module module, String resourceName, AccessCondition condition, Object origin) { registerConditionalConfiguration(condition, cnd -> { addResourceEntry(module, resourceName, origin); ImageSingletons.lookup(RuntimeResourceSupport.class).addCondition(cnd, module, resourceName); @@ -601,7 +602,7 @@ public void registerNegativeQuery(Module module, String resourceName) { Resources.currentLayer().registerNegativeQuery(module, resourceName); } - public void registerIncludePattern(ConfigurationCondition condition, String module, String pattern) { + public void registerIncludePattern(AccessCondition condition, String module, String pattern) { registerConditionalConfiguration(condition, cnd -> Resources.currentLayer().registerIncludePattern(cnd, module, pattern)); } } @@ -655,7 +656,7 @@ public void afterAnalysis(AfterAnalysisAccess access) { /* prepare resources GlobTrie for runtime */ GlobTrieNode root = Resources.currentLayer().getResourcesTrieRoot(); - CompressedGlobTrie.removeNodes(root, (conditionWithOrigin) -> !access.isReachable(conditionWithOrigin.condition().getType())); + CompressedGlobTrie.removeNodes(root, (conditionWithOrigin) -> !access.isReachable(((TypeReachabilityCondition) conditionWithOrigin.condition()).getType())); CompressedGlobTrie.finalize(root); } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/ConfigurationParserUtils.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/ConfigurationParserUtils.java index 9903e8b88a97..6887e5709e25 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/ConfigurationParserUtils.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/ConfigurationParserUtils.java @@ -43,7 +43,7 @@ import java.util.stream.Stream; import java.util.stream.StreamSupport; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.impl.ReflectionRegistry; import org.graalvm.nativeimage.impl.RuntimeJNIAccessSupport; import org.graalvm.nativeimage.impl.RuntimeProxyCreationSupport; @@ -63,9 +63,9 @@ public final class ConfigurationParserUtils { - public static ReflectionConfigurationParser> create(ConfigurationFile configurationKind, boolean combinedFileSchema, - ConfigurationConditionResolver conditionResolver, ReflectionRegistry registry, RuntimeProxyCreationSupport proxyRegistry, - RuntimeSerializationSupport serializationSupport, RuntimeJNIAccessSupport jniSupport, ImageClassLoader imageClassLoader) { + public static ReflectionConfigurationParser> create(ConfigurationFile configurationKind, boolean combinedFileSchema, + ConfigurationConditionResolver conditionResolver, ReflectionRegistry registry, RuntimeProxyCreationSupport proxyRegistry, + RuntimeSerializationSupport serializationSupport, RuntimeJNIAccessSupport jniSupport, ImageClassLoader imageClassLoader) { var additionalParserOptions = configurationKind == ConfigurationFile.JNI ? EnumSet.of(JNI_PARSER) : null; return ReflectionConfigurationParser.create(combinedFileSchema, conditionResolver, RegistryAdapter.create(registry, proxyRegistry, serializationSupport, jniSupport, imageClassLoader), ConfigurationFiles.Options.getConfigurationParserOptions(additionalParserOptions, null)); diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/JNIRegistryAdapter.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/JNIRegistryAdapter.java index f6ceb6919532..e2ecac1cba3f 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/JNIRegistryAdapter.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/JNIRegistryAdapter.java @@ -28,7 +28,7 @@ import java.lang.reflect.Field; import java.util.List; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.impl.ReflectionRegistry; import com.oracle.svm.core.util.VMError; @@ -40,108 +40,108 @@ public JNIRegistryAdapter(ReflectionRegistry registry, ImageClassLoader classLoa } @Override - public void registerPublicClasses(ConfigurationCondition condition, Class type) { + public void registerPublicClasses(AccessCondition condition, Class type) { registry.register(condition, type.getClasses()); } @Override - public void registerDeclaredClasses(ConfigurationCondition condition, Class type) { + public void registerDeclaredClasses(AccessCondition condition, Class type) { registry.register(condition, type.getDeclaredClasses()); } @Override - public void registerRecordComponents(ConfigurationCondition condition, Class type) { + public void registerRecordComponents(AccessCondition condition, Class type) { VMError.shouldNotReachHere("Record components cannot be accessed through JNI registrations"); } @Override - public void registerPermittedSubclasses(ConfigurationCondition condition, Class type) { + public void registerPermittedSubclasses(AccessCondition condition, Class type) { VMError.shouldNotReachHere("Permitted subclasses cannot be accessed through JNI registrations"); } @Override - public void registerNestMembers(ConfigurationCondition condition, Class type) { + public void registerNestMembers(AccessCondition condition, Class type) { VMError.shouldNotReachHere("Nest members cannot be accessed through JNI registrations"); } @Override - public void registerSigners(ConfigurationCondition condition, Class type) { + public void registerSigners(AccessCondition condition, Class type) { VMError.shouldNotReachHere("Signers cannot be accessed through JNI registrations"); } @Override - public void registerPublicFields(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerPublicFields(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { ensureJniAccessible(jniAccessible); super.registerPublicFields(condition, queriedOnly, false, type); } @Override - public void registerDeclaredFields(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerDeclaredFields(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { ensureJniAccessible(jniAccessible); super.registerDeclaredFields(condition, queriedOnly, false, type); } @Override - public void registerPublicMethods(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerPublicMethods(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { ensureJniAccessible(jniAccessible); super.registerPublicMethods(condition, queriedOnly, false, type); } @Override - public void registerDeclaredMethods(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerDeclaredMethods(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { ensureJniAccessible(jniAccessible); super.registerDeclaredMethods(condition, queriedOnly, false, type); } @Override - public void registerPublicConstructors(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerPublicConstructors(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { ensureJniAccessible(jniAccessible); super.registerPublicConstructors(condition, queriedOnly, false, type); } @Override - public void registerDeclaredConstructors(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerDeclaredConstructors(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { ensureJniAccessible(jniAccessible); super.registerDeclaredConstructors(condition, queriedOnly, false, type); } @Override - protected void registerField(ConfigurationCondition condition, boolean allowWrite, boolean jniAccessible, Field field) { + protected void registerField(AccessCondition condition, boolean allowWrite, boolean jniAccessible, Field field) { ensureJniAccessible(jniAccessible); super.registerField(condition, allowWrite, true, field); } @Override - protected void registerFieldNegativeQuery(ConfigurationCondition condition, boolean jniAccessible, Class type, String fieldName) { + protected void registerFieldNegativeQuery(AccessCondition condition, boolean jniAccessible, Class type, String fieldName) { ensureJniAccessible(jniAccessible); super.registerFieldNegativeQuery(condition, true, type, fieldName); } @Override - protected void registerExecutable(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Executable... executable) { + protected void registerExecutable(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Executable... executable) { ensureJniAccessible(jniAccessible); super.registerExecutable(condition, queriedOnly, true, executable); } @Override - protected void registerMethodNegativeQuery(ConfigurationCondition condition, boolean jniAccessible, Class type, String methodName, List> methodParameterTypes) { + protected void registerMethodNegativeQuery(AccessCondition condition, boolean jniAccessible, Class type, String methodName, List> methodParameterTypes) { ensureJniAccessible(jniAccessible); super.registerMethodNegativeQuery(condition, true, type, methodName, methodParameterTypes); } @Override - protected void registerConstructorNegativeQuery(ConfigurationCondition condition, boolean jniAccessible, Class type, List> constructorParameterTypes) { + protected void registerConstructorNegativeQuery(AccessCondition condition, boolean jniAccessible, Class type, List> constructorParameterTypes) { ensureJniAccessible(jniAccessible); super.registerConstructorNegativeQuery(condition, true, type, constructorParameterTypes); } @Override - public void registerAsSerializable(ConfigurationCondition condition, Class clazz) { + public void registerAsSerializable(AccessCondition condition, Class clazz) { VMError.shouldNotReachHere("serializable cannot be set on JNI registrations"); } @Override - public void registerAsJniAccessed(ConfigurationCondition condition, Class clazz) { + public void registerAsJniAccessed(AccessCondition condition, Class clazz) { VMError.shouldNotReachHere("jniAccessible cannot be set on JNI registrations"); } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/ReflectionRegistryAdapter.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/ReflectionRegistryAdapter.java index e1f7cd84b98d..1783c5412771 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/ReflectionRegistryAdapter.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/ReflectionRegistryAdapter.java @@ -31,9 +31,9 @@ import java.lang.reflect.Proxy; import java.util.List; -import org.graalvm.nativeimage.impl.ConfigurationCondition; import org.graalvm.nativeimage.impl.RuntimeJNIAccessSupport; import org.graalvm.nativeimage.impl.RuntimeProxyCreationSupport; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.impl.RuntimeReflectionSupport; import org.graalvm.nativeimage.impl.RuntimeSerializationSupport; @@ -47,10 +47,10 @@ public class ReflectionRegistryAdapter extends RegistryAdapter { private final RuntimeReflectionSupport reflectionSupport; private final RuntimeProxyCreationSupport proxyRegistry; - private final RuntimeSerializationSupport serializationSupport; + private final RuntimeSerializationSupport serializationSupport; private final RuntimeJNIAccessSupport jniSupport; - ReflectionRegistryAdapter(RuntimeReflectionSupport reflectionSupport, RuntimeProxyCreationSupport proxyRegistry, RuntimeSerializationSupport serializationSupport, + ReflectionRegistryAdapter(RuntimeReflectionSupport reflectionSupport, RuntimeProxyCreationSupport proxyRegistry, RuntimeSerializationSupport serializationSupport, RuntimeJNIAccessSupport jniSupport, ImageClassLoader classLoader) { super(reflectionSupport, classLoader); this.reflectionSupport = reflectionSupport; @@ -60,7 +60,7 @@ public class ReflectionRegistryAdapter extends RegistryAdapter { } @Override - public void registerType(ConfigurationCondition condition, Class type) { + public void registerType(AccessCondition condition, Class type) { super.registerType(condition, type); if (Proxy.isProxyClass(type)) { proxyRegistry.addProxyClass(condition, type.getInterfaces()); @@ -68,7 +68,7 @@ public void registerType(ConfigurationCondition condition, Class type) { } @Override - public TypeResult> resolveType(ConfigurationCondition condition, ConfigurationTypeDescriptor typeDescriptor, boolean allowPrimitives, boolean jniAccessible) { + public TypeResult> resolveType(AccessCondition condition, ConfigurationTypeDescriptor typeDescriptor, boolean allowPrimitives, boolean jniAccessible) { TypeResult> result = super.resolveType(condition, typeDescriptor, allowPrimitives, jniAccessible); if (!result.isPresent() && typeDescriptor instanceof NamedConfigurationTypeDescriptor namedDescriptor) { Throwable classLookupException = result.getException(); @@ -84,37 +84,37 @@ public TypeResult> resolveType(ConfigurationCondition condition, Config } @Override - public void registerPublicClasses(ConfigurationCondition condition, Class type) { + public void registerPublicClasses(AccessCondition condition, Class type) { reflectionSupport.registerAllClassesQuery(condition, type); } @Override - public void registerDeclaredClasses(ConfigurationCondition condition, Class type) { + public void registerDeclaredClasses(AccessCondition condition, Class type) { reflectionSupport.registerAllDeclaredClassesQuery(condition, type); } @Override - public void registerRecordComponents(ConfigurationCondition condition, Class type) { + public void registerRecordComponents(AccessCondition condition, Class type) { reflectionSupport.registerAllRecordComponentsQuery(condition, type); } @Override - public void registerPermittedSubclasses(ConfigurationCondition condition, Class type) { + public void registerPermittedSubclasses(AccessCondition condition, Class type) { reflectionSupport.registerAllPermittedSubclassesQuery(condition, type); } @Override - public void registerNestMembers(ConfigurationCondition condition, Class type) { + public void registerNestMembers(AccessCondition condition, Class type) { reflectionSupport.registerAllNestMembersQuery(condition, type); } @Override - public void registerSigners(ConfigurationCondition condition, Class type) { + public void registerSigners(AccessCondition condition, Class type) { reflectionSupport.registerAllSignersQuery(condition, type); } @Override - public void registerPublicFields(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerPublicFields(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { if (queriedOnly && reflectionSupport instanceof ReflectionDataBuilder reflectionDataBuilder) { reflectionDataBuilder.registerAllFieldsQuery(condition, true, type); } else if (!queriedOnly) { @@ -126,7 +126,7 @@ public void registerPublicFields(ConfigurationCondition condition, boolean queri } @Override - public void registerDeclaredFields(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerDeclaredFields(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { if (queriedOnly && reflectionSupport instanceof ReflectionDataBuilder reflectionDataBuilder) { reflectionDataBuilder.registerAllDeclaredFieldsQuery(condition, true, type); } else if (!queriedOnly) { @@ -138,7 +138,7 @@ public void registerDeclaredFields(ConfigurationCondition condition, boolean que } @Override - public void registerPublicMethods(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerPublicMethods(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { reflectionSupport.registerAllMethodsQuery(condition, queriedOnly, type); if (!queriedOnly && jniAccessible) { jniSupport.register(condition, false, type.getMethods()); @@ -146,7 +146,7 @@ public void registerPublicMethods(ConfigurationCondition condition, boolean quer } @Override - public void registerDeclaredMethods(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerDeclaredMethods(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { reflectionSupport.registerAllDeclaredMethodsQuery(condition, queriedOnly, type); if (!queriedOnly && jniAccessible) { jniSupport.register(condition, false, type.getDeclaredMethods()); @@ -154,7 +154,7 @@ public void registerDeclaredMethods(ConfigurationCondition condition, boolean qu } @Override - public void registerPublicConstructors(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerPublicConstructors(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { reflectionSupport.registerAllConstructorsQuery(condition, queriedOnly, type); if (!queriedOnly && jniAccessible) { jniSupport.register(condition, false, type.getConstructors()); @@ -162,7 +162,7 @@ public void registerPublicConstructors(ConfigurationCondition condition, boolean } @Override - public void registerDeclaredConstructors(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerDeclaredConstructors(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { reflectionSupport.registerAllDeclaredConstructorsQuery(condition, queriedOnly, type); if (!queriedOnly && jniAccessible) { jniSupport.register(condition, false, type.getDeclaredConstructors()); @@ -170,17 +170,17 @@ public void registerDeclaredConstructors(ConfigurationCondition condition, boole } @Override - public void registerAsSerializable(ConfigurationCondition condition, Class clazz) { + public void registerAsSerializable(AccessCondition condition, Class clazz) { serializationSupport.register(condition, clazz); } @Override - public void registerAsJniAccessed(ConfigurationCondition condition, Class clazz) { + public void registerAsJniAccessed(AccessCondition condition, Class clazz) { jniSupport.register(condition, clazz); } @Override - protected void registerField(ConfigurationCondition condition, boolean allowWrite, boolean jniAccessible, Field field) { + protected void registerField(AccessCondition condition, boolean allowWrite, boolean jniAccessible, Field field) { super.registerField(condition, allowWrite, jniAccessible, field); if (jniAccessible) { jniSupport.register(condition, allowWrite, field); @@ -188,7 +188,7 @@ protected void registerField(ConfigurationCondition condition, boolean allowWrit } @Override - protected void registerFieldNegativeQuery(ConfigurationCondition condition, boolean jniAccessible, Class type, String fieldName) { + protected void registerFieldNegativeQuery(AccessCondition condition, boolean jniAccessible, Class type, String fieldName) { super.registerFieldNegativeQuery(condition, jniAccessible, type, fieldName); if (jniAccessible) { jniSupport.registerFieldLookup(condition, type, fieldName); @@ -196,7 +196,7 @@ protected void registerFieldNegativeQuery(ConfigurationCondition condition, bool } @Override - protected void registerExecutable(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Executable... executable) { + protected void registerExecutable(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Executable... executable) { super.registerExecutable(condition, queriedOnly, jniAccessible, executable); if (jniAccessible) { jniSupport.register(condition, queriedOnly, executable); @@ -204,7 +204,7 @@ protected void registerExecutable(ConfigurationCondition condition, boolean quer } @Override - protected void registerMethodNegativeQuery(ConfigurationCondition condition, boolean jniAccessible, Class type, String methodName, List> methodParameterTypes) { + protected void registerMethodNegativeQuery(AccessCondition condition, boolean jniAccessible, Class type, String methodName, List> methodParameterTypes) { super.registerMethodNegativeQuery(condition, jniAccessible, type, methodName, methodParameterTypes); if (jniAccessible) { jniSupport.registerMethodLookup(condition, type, methodName, getParameterTypes(methodParameterTypes)); @@ -212,7 +212,7 @@ protected void registerMethodNegativeQuery(ConfigurationCondition condition, boo } @Override - protected void registerConstructorNegativeQuery(ConfigurationCondition condition, boolean jniAccessible, Class type, List> constructorParameterTypes) { + protected void registerConstructorNegativeQuery(AccessCondition condition, boolean jniAccessible, Class type, List> constructorParameterTypes) { super.registerConstructorNegativeQuery(condition, jniAccessible, type, constructorParameterTypes); if (jniAccessible) { jniSupport.registerConstructorLookup(condition, type, getParameterTypes(constructorParameterTypes)); diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/RegistryAdapter.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/RegistryAdapter.java index 687150cb9cb1..cf69c1c03b50 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/RegistryAdapter.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/RegistryAdapter.java @@ -34,7 +34,7 @@ import java.util.List; import org.graalvm.nativeimage.ImageSingletons; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.impl.ReflectionRegistry; import org.graalvm.nativeimage.impl.RuntimeJNIAccessSupport; import org.graalvm.nativeimage.impl.RuntimeProxyCreationSupport; @@ -52,11 +52,11 @@ import com.oracle.svm.util.ClassUtil; import com.oracle.svm.util.TypeResult; -public class RegistryAdapter implements ReflectionConfigurationParserDelegate> { +public class RegistryAdapter implements ReflectionConfigurationParserDelegate> { protected final ReflectionRegistry registry; private final ImageClassLoader classLoader; - public static RegistryAdapter create(ReflectionRegistry registry, RuntimeProxyCreationSupport proxyRegistry, RuntimeSerializationSupport serializationSupport, + public static RegistryAdapter create(ReflectionRegistry registry, RuntimeProxyCreationSupport proxyRegistry, RuntimeSerializationSupport serializationSupport, RuntimeJNIAccessSupport jniSupport, ImageClassLoader classLoader) { if (registry instanceof RuntimeReflectionSupport) { return new ReflectionRegistryAdapter((RuntimeReflectionSupport) registry, proxyRegistry, serializationSupport, jniSupport, classLoader); @@ -73,12 +73,12 @@ public static RegistryAdapter create(ReflectionRegistry registry, RuntimeProxyCr } @Override - public void registerType(ConfigurationCondition condition, Class type) { + public void registerType(AccessCondition condition, Class type) { registry.register(condition, type); } @Override - public TypeResult> resolveType(ConfigurationCondition condition, ConfigurationTypeDescriptor typeDescriptor, boolean allowPrimitives, boolean jniAccessible) { + public TypeResult> resolveType(AccessCondition condition, ConfigurationTypeDescriptor typeDescriptor, boolean allowPrimitives, boolean jniAccessible) { switch (typeDescriptor.getDescriptorType()) { case NAMED -> { String reflectionName = ClassNameSupport.typeNameToReflectionName(((NamedConfigurationTypeDescriptor) typeDescriptor).name()); @@ -139,66 +139,66 @@ private TypeResult> resolveProxyType(ProxyConfigurationTypeDescriptor t } @Override - public void registerPublicClasses(ConfigurationCondition condition, Class type) { + public void registerPublicClasses(AccessCondition condition, Class type) { } @Override - public void registerDeclaredClasses(ConfigurationCondition condition, Class type) { + public void registerDeclaredClasses(AccessCondition condition, Class type) { } @Override - public void registerRecordComponents(ConfigurationCondition condition, Class type) { + public void registerRecordComponents(AccessCondition condition, Class type) { } @Override - public void registerPermittedSubclasses(ConfigurationCondition condition, Class type) { + public void registerPermittedSubclasses(AccessCondition condition, Class type) { } @Override - public void registerNestMembers(ConfigurationCondition condition, Class type) { + public void registerNestMembers(AccessCondition condition, Class type) { } @Override - public void registerSigners(ConfigurationCondition condition, Class type) { + public void registerSigners(AccessCondition condition, Class type) { } @Override - public void registerPublicFields(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerPublicFields(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { if (!queriedOnly) { registry.register(condition, false, type.getFields()); } } @Override - public void registerDeclaredFields(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerDeclaredFields(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { if (!queriedOnly) { registry.register(condition, false, type.getDeclaredFields()); } } @Override - public void registerPublicMethods(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerPublicMethods(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { registry.register(condition, queriedOnly, type.getMethods()); } @Override - public void registerDeclaredMethods(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerDeclaredMethods(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { registry.register(condition, queriedOnly, type.getDeclaredMethods()); } @Override - public void registerPublicConstructors(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerPublicConstructors(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { registry.register(condition, queriedOnly, type.getConstructors()); } @Override - public void registerDeclaredConstructors(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public void registerDeclaredConstructors(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { registry.register(condition, queriedOnly, type.getDeclaredConstructors()); } @Override @SuppressWarnings("unused") - public final void registerField(ConfigurationCondition condition, Class type, String fieldName, boolean allowWrite, boolean jniAccessible) throws NoSuchFieldException { + public final void registerField(AccessCondition condition, Class type, String fieldName, boolean allowWrite, boolean jniAccessible) throws NoSuchFieldException { try { registerField(condition, allowWrite, jniAccessible, type.getDeclaredField(fieldName)); } catch (NoSuchFieldException e) { @@ -211,17 +211,17 @@ public final void registerField(ConfigurationCondition condition, Class type, } @SuppressWarnings("unused") - protected void registerField(ConfigurationCondition condition, boolean allowWrite, boolean jniAccessible, Field field) { + protected void registerField(AccessCondition condition, boolean allowWrite, boolean jniAccessible, Field field) { registry.register(condition, allowWrite, field); } @SuppressWarnings("unused") - protected void registerFieldNegativeQuery(ConfigurationCondition condition, boolean jniAccessible, Class type, String fieldName) { + protected void registerFieldNegativeQuery(AccessCondition condition, boolean jniAccessible, Class type, String fieldName) { registry.registerFieldLookup(condition, type, fieldName); } @Override - public boolean registerAllMethodsWithName(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type, String methodName) { + public boolean registerAllMethodsWithName(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type, String methodName) { boolean found = false; Executable[] methods = type.getDeclaredMethods(); for (Executable method : methods) { @@ -234,14 +234,14 @@ public boolean registerAllMethodsWithName(ConfigurationCondition condition, bool } @Override - public boolean registerAllConstructors(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { + public boolean registerAllConstructors(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Class type) { Executable[] methods = type.getDeclaredConstructors(); registerExecutable(condition, queriedOnly, jniAccessible, methods); return methods.length > 0; } @Override - public void registerUnsafeAllocated(ConfigurationCondition condition, Class clazz) { + public void registerUnsafeAllocated(AccessCondition condition, Class clazz) { if (!clazz.isArray() && !clazz.isInterface() && !Modifier.isAbstract(clazz.getModifiers())) { registry.register(condition, true, clazz); /* @@ -252,7 +252,7 @@ public void registerUnsafeAllocated(ConfigurationCondition condition, Class c } @Override - public final void registerMethod(ConfigurationCondition condition, boolean queriedOnly, Class type, String methodName, List> methodParameterTypes, boolean jniAccessible) + public final void registerMethod(AccessCondition condition, boolean queriedOnly, Class type, String methodName, List> methodParameterTypes, boolean jniAccessible) throws NoSuchMethodException { try { Class[] parameterTypesArray = getParameterTypes(methodParameterTypes); @@ -286,7 +286,7 @@ public final void registerMethod(ConfigurationCondition condition, boolean queri } @Override - public final void registerConstructor(ConfigurationCondition condition, boolean queriedOnly, Class type, List> methodParameterTypes, boolean jniAccessible) + public final void registerConstructor(AccessCondition condition, boolean queriedOnly, Class type, List> methodParameterTypes, boolean jniAccessible) throws NoSuchMethodException { Class[] parameterTypesArray = getParameterTypes(methodParameterTypes); try { @@ -305,26 +305,26 @@ static Class[] getParameterTypes(List> methodParameterTypes) { } @SuppressWarnings("unused") - protected void registerExecutable(ConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, Executable... executable) { + protected void registerExecutable(AccessCondition condition, boolean queriedOnly, boolean jniAccessible, Executable... executable) { registry.register(condition, queriedOnly, executable); } @SuppressWarnings("unused") - protected void registerMethodNegativeQuery(ConfigurationCondition condition, boolean jniAccessible, Class type, String methodName, List> methodParameterTypes) { + protected void registerMethodNegativeQuery(AccessCondition condition, boolean jniAccessible, Class type, String methodName, List> methodParameterTypes) { registry.registerMethodLookup(condition, type, methodName, getParameterTypes(methodParameterTypes)); } @SuppressWarnings("unused") - protected void registerConstructorNegativeQuery(ConfigurationCondition condition, boolean jniAccessible, Class type, List> constructorParameterTypes) { + protected void registerConstructorNegativeQuery(AccessCondition condition, boolean jniAccessible, Class type, List> constructorParameterTypes) { registry.registerConstructorLookup(condition, type, getParameterTypes(constructorParameterTypes)); } @Override - public void registerAsSerializable(ConfigurationCondition condition, Class clazz) { + public void registerAsSerializable(AccessCondition condition, Class clazz) { } @Override - public void registerAsJniAccessed(ConfigurationCondition condition, Class clazz) { + public void registerAsJniAccessed(AccessCondition condition, Class clazz) { } @Override diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/PreserveOptionsSupport.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/PreserveOptionsSupport.java index e84dab52ebf1..f7495ac10a8e 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/PreserveOptionsSupport.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/PreserveOptionsSupport.java @@ -38,7 +38,7 @@ import org.graalvm.collections.EconomicMap; import org.graalvm.nativeimage.ImageSingletons; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.impl.RuntimeJNIAccessSupport; import org.graalvm.nativeimage.impl.RuntimeProxyCreationSupport; import org.graalvm.nativeimage.impl.RuntimeReflectionSupport; @@ -150,8 +150,8 @@ public static void registerPreservedClasses(NativeImageClassLoaderSupport classL final RuntimeReflectionSupport reflection = ImageSingletons.lookup(RuntimeReflectionSupport.class); final RuntimeProxyCreationSupport proxy = ImageSingletons.lookup(RuntimeProxyCreationSupport.class); - final RuntimeSerializationSupport serialization = RuntimeSerializationSupport.singleton(); - final ConfigurationCondition always = ConfigurationCondition.alwaysTrue(); + final RuntimeSerializationSupport serialization = RuntimeSerializationSupport.singleton(); + final AccessCondition always = AccessCondition.alwaysTrue(); /* * Sort descending by class hierarchy depth to avoid complexity related to field diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JmxCommonFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JmxCommonFeature.java index 53e199bf8281..6ca80c3daa69 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JmxCommonFeature.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JmxCommonFeature.java @@ -29,6 +29,7 @@ import java.util.Arrays; import org.graalvm.nativeimage.ImageSingletons; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.hosted.RuntimeReflection; import org.graalvm.nativeimage.hosted.RuntimeSerialization; @@ -38,7 +39,6 @@ import com.oracle.svm.core.jdk.proxy.DynamicProxyRegistry; import com.oracle.svm.core.jni.JNIRuntimeAccess; import com.oracle.svm.util.ReflectionUtil; -import org.graalvm.nativeimage.impl.ConfigurationCondition; @AutomaticallyRegisteredFeature public class JmxCommonFeature implements InternalFeature { @@ -158,27 +158,27 @@ public void beforeAnalysis(BeforeAnalysisAccess access) { */ private static void configureProxy(BeforeAnalysisAccess access) { DynamicProxyRegistry dynamicProxySupport = ImageSingletons.lookup(DynamicProxyRegistry.class); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("com.sun.management.GarbageCollectorMXBean"), + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("com.sun.management.GarbageCollectorMXBean"), access.findClassByName("javax.management.NotificationEmitter")); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("com.sun.management.OperatingSystemMXBean")); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("com.sun.management.ThreadMXBean")); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("com.sun.management.UnixOperatingSystemMXBean")); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("java.lang.management.BufferPoolMXBean")); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("java.lang.management.ClassLoadingMXBean")); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("java.lang.management.CompilationMXBean")); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("java.lang.management.GarbageCollectorMXBean"), + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("com.sun.management.OperatingSystemMXBean")); + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("com.sun.management.ThreadMXBean")); + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("com.sun.management.UnixOperatingSystemMXBean")); + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("java.lang.management.BufferPoolMXBean")); + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("java.lang.management.ClassLoadingMXBean")); + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("java.lang.management.CompilationMXBean")); + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("java.lang.management.GarbageCollectorMXBean"), access.findClassByName("javax.management.NotificationEmitter")); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("java.lang.management.MemoryManagerMXBean"), + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("java.lang.management.MemoryManagerMXBean"), access.findClassByName("javax.management.NotificationEmitter")); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("java.lang.management.MemoryManagerMXBean")); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("java.lang.management.MemoryPoolMXBean"), + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("java.lang.management.MemoryManagerMXBean")); + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("java.lang.management.MemoryPoolMXBean"), access.findClassByName("javax.management.NotificationEmitter")); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("java.lang.management.MemoryMXBean"), + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("java.lang.management.MemoryMXBean"), access.findClassByName("javax.management.NotificationEmitter")); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("java.lang.management.OperatingSystemMXBean")); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("java.lang.management.RuntimeMXBean")); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("java.lang.management.ThreadMXBean")); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("jdk.management.jfr.FlightRecorderMXBean"), + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("java.lang.management.OperatingSystemMXBean")); + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("java.lang.management.RuntimeMXBean")); + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("java.lang.management.ThreadMXBean")); + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("jdk.management.jfr.FlightRecorderMXBean"), access.findClassByName("javax.management.NotificationEmitter")); } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JmxServerFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JmxServerFeature.java index 50367d43c976..159aa760a7be 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JmxServerFeature.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JmxServerFeature.java @@ -34,11 +34,11 @@ import javax.management.remote.JMXServiceURL; import org.graalvm.nativeimage.ImageSingletons; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.hosted.RuntimeReflection; -import org.graalvm.nativeimage.impl.ConfigurationCondition; -import com.oracle.svm.core.VMInspectionOptions; import com.oracle.svm.configure.ResourcesRegistry; +import com.oracle.svm.core.VMInspectionOptions; import com.oracle.svm.core.feature.AutomaticallyRegisteredFeature; import com.oracle.svm.core.feature.InternalFeature; import com.oracle.svm.core.jdk.NativeLibrarySupport; @@ -77,22 +77,22 @@ public void beforeAnalysis(BeforeAnalysisAccess access) { } private static void registerJMXAgentResources() { - ResourcesRegistry resourcesRegistry = ResourcesRegistry.singleton(); + ResourcesRegistry resourcesRegistry = ResourcesRegistry.singleton(); - resourcesRegistry.addResourceBundles(ConfigurationCondition.alwaysTrue(), + resourcesRegistry.addResourceBundles(AccessCondition.alwaysTrue(), "jdk.internal.agent.resources.agent"); - resourcesRegistry.addResourceBundles(ConfigurationCondition.alwaysTrue(), + resourcesRegistry.addResourceBundles(AccessCondition.alwaysTrue(), "sun.security.util.Resources"); // required for password auth } private static void configureProxy(BeforeAnalysisAccess access) { DynamicProxyRegistry dynamicProxySupport = ImageSingletons.lookup(DynamicProxyRegistry.class); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("java.rmi.Remote"), + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("java.rmi.Remote"), access.findClassByName("java.rmi.registry.Registry")); - dynamicProxySupport.addProxyClass(ConfigurationCondition.alwaysTrue(), access.findClassByName("javax.management.remote.rmi.RMIServer")); + dynamicProxySupport.addProxyClass(AccessCondition.alwaysTrue(), access.findClassByName("javax.management.remote.rmi.RMIServer")); } /** diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/localization/LocalizationFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/localization/LocalizationFeature.java index 2d670c874e49..57c611f7b3b7 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/localization/LocalizationFeature.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/localization/LocalizationFeature.java @@ -63,7 +63,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.RuntimeClassInitializationSupport; import com.oracle.graal.pointsto.ObjectScanner; @@ -504,7 +504,7 @@ protected void addResourceBundles() { * Locale data bundle class names do not contain underscores */ String baseName = e.getClassName().split("_")[0]; - prepareNegativeBundle(ConfigurationCondition.alwaysTrue(), baseName, locale, true); + prepareNegativeBundle(AccessCondition.alwaysTrue(), baseName, locale, true); continue; /* No bundle for this `locale`. */ } if (bundle instanceof ParallelListResourceBundle) { @@ -521,14 +521,14 @@ protected void addResourceBundles() { * No eager loading of bundle content, so we need to include the * `sun.text.resources.FormatData` bundle supplement as well. */ - prepareBundle(ConfigurationCondition.alwaysTrue(), "sun.text.resources.JavaTimeSupplementary"); + prepareBundle(AccessCondition.alwaysTrue(), "sun.text.resources.JavaTimeSupplementary"); } final String[] alwaysRegisteredResourceBundles = new String[]{ "sun.util.logging.resources.logging" }; for (String bundleName : alwaysRegisteredResourceBundles) { - prepareBundle(ConfigurationCondition.alwaysTrue(), bundleName); + prepareBundle(AccessCondition.alwaysTrue(), bundleName); } for (String bundleName : Options.IncludeResourceBundles.getValue().values()) { @@ -545,13 +545,13 @@ private void processRequestedBundle(String input) { if (locale != null) { /* Get rid of locale specific suffix. */ String baseName = input.substring(0, splitIndex); - prepareBundle(ConfigurationCondition.alwaysTrue(), baseName, Collections.singletonList(locale)); + prepareBundle(AccessCondition.alwaysTrue(), baseName, Collections.singletonList(locale)); return; } else { trace("Cannot parse wanted locale " + input.substring(splitIndex + 1) + ", default will be used instead."); } } - prepareBundle(ConfigurationCondition.alwaysTrue(), input, allLocales); + prepareBundle(AccessCondition.alwaysTrue(), input, allLocales); } @Platforms(Platform.HOSTED_ONLY.class) @@ -568,7 +568,7 @@ public void prepareClassResourceBundle(String basename, String className) { } @Platforms(Platform.HOSTED_ONLY.class) - public void prepareBundle(ConfigurationCondition condition, String baseName) { + public void prepareBundle(AccessCondition condition, String baseName) { prepareBundle(condition, baseName, allLocales); } @@ -580,7 +580,7 @@ public void prepareBundle(ConfigurationCondition condition, String baseName) { }; @Platforms(Platform.HOSTED_ONLY.class) - public void prepareBundle(ConfigurationCondition condition, String baseName, Collection wantedLocales) { + public void prepareBundle(AccessCondition condition, String baseName, Collection wantedLocales) { prepareBundleInternal(condition, baseName, wantedLocales); String alternativeBundleName = null; @@ -595,7 +595,7 @@ public void prepareBundle(ConfigurationCondition condition, String baseName, Col } } - private void prepareBundleInternal(ConfigurationCondition condition, String baseName, Collection wantedLocales) { + private void prepareBundleInternal(AccessCondition condition, String baseName, Collection wantedLocales) { boolean somethingFound = false; for (Locale locale : wantedLocales) { support.registerBundleLookup(condition, baseName); @@ -652,7 +652,7 @@ private void prepareBundleInternal(ConfigurationCondition condition, String base } @Platforms(Platform.HOSTED_ONLY.class) - protected void prepareNegativeBundle(ConfigurationCondition condition, String baseName, Locale locale, boolean jdkBundle) { + protected void prepareNegativeBundle(AccessCondition condition, String baseName, Locale locale, boolean jdkBundle) { support.registerBundleLookup(condition, baseName); support.registerRequiredReflectionAndResourcesForBundleAndLocale(baseName, locale, jdkBundle); } @@ -660,11 +660,11 @@ protected void prepareNegativeBundle(ConfigurationCondition condition, String ba @Platforms(Platform.HOSTED_ONLY.class) protected void prepareJDKBundle(ResourceBundle bundle, Locale locale) { String baseName = bundle.getBaseBundleName(); - prepareBundle(ConfigurationCondition.alwaysTrue(), baseName, bundle, locale, true); + prepareBundle(AccessCondition.alwaysTrue(), baseName, bundle, locale, true); } @Platforms(Platform.HOSTED_ONLY.class) - private void prepareBundle(ConfigurationCondition condition, String bundleName, ResourceBundle bundle, Locale locale, boolean jdkBundle) { + private void prepareBundle(AccessCondition condition, String bundleName, ResourceBundle bundle, Locale locale, boolean jdkBundle) { trace("Adding bundle " + bundleName + ", locale " + locale + " with condition " + condition); /* * Ensure that the bundle contents are loaded. We need to walk the whole bundle parent chain diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jni/JNIAccessFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jni/JNIAccessFeature.java index e63b7b408d10..e1373d32dc3d 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jni/JNIAccessFeature.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jni/JNIAccessFeature.java @@ -48,8 +48,8 @@ import org.graalvm.collections.UnmodifiableMapCursor; import org.graalvm.nativeimage.ImageSingletons; import org.graalvm.nativeimage.c.function.CodePointer; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.hosted.Feature; -import org.graalvm.nativeimage.impl.ConfigurationCondition; import org.graalvm.nativeimage.impl.RuntimeJNIAccessSupport; import org.graalvm.word.PointerBase; @@ -210,12 +210,12 @@ public void afterRegistration(AfterRegistrationAccess arg) { runtimeSupport = new JNIRuntimeAccessibilitySupportImpl(); ImageSingletons.add(RuntimeJNIAccessSupport.class, runtimeSupport); - ConfigurationConditionResolver conditionResolver = new NativeImageConditionResolver(access.getImageClassLoader(), + ConfigurationConditionResolver conditionResolver = new NativeImageConditionResolver(access.getImageClassLoader(), ClassInitializationSupport.singleton()); - ReflectionConfigurationParser> parser = ConfigurationParserUtils.create(ConfigurationFile.JNI, true, conditionResolver, runtimeSupport, null, null, null, + ReflectionConfigurationParser> parser = ConfigurationParserUtils.create(ConfigurationFile.JNI, true, conditionResolver, runtimeSupport, null, null, null, access.getImageClassLoader()); loadedConfigurations = ConfigurationParserUtils.parseAndRegisterConfigurationsFromCombinedFile(parser, access.getImageClassLoader(), "JNI"); - ReflectionConfigurationParser> legacyParser = ConfigurationParserUtils.create(ConfigurationFile.JNI, false, conditionResolver, runtimeSupport, null, null, + ReflectionConfigurationParser> legacyParser = ConfigurationParserUtils.create(ConfigurationFile.JNI, false, conditionResolver, runtimeSupport, null, null, null, access.getImageClassLoader()); loadedConfigurations += ConfigurationParserUtils.parseAndRegisterConfigurations(legacyParser, access.getImageClassLoader(), "JNI", @@ -226,7 +226,7 @@ private final class JNIRuntimeAccessibilitySupportImpl extends ConditionalConfig implements RuntimeJNIAccessSupport, LayeredImageSingleton { @Override - public void register(ConfigurationCondition condition, boolean unsafeAllocated, Class clazz) { + public void register(AccessCondition condition, boolean unsafeAllocated, Class clazz) { assert !unsafeAllocated : "unsafeAllocated can be only set via Unsafe.allocateInstance, not via JNI."; Objects.requireNonNull(clazz, () -> nullErrorMessage("class")); abortIfSealed(); @@ -234,7 +234,7 @@ public void register(ConfigurationCondition condition, boolean unsafeAllocated, } @Override - public void register(ConfigurationCondition condition, boolean queriedOnly, Executable... executables) { + public void register(AccessCondition condition, boolean queriedOnly, Executable... executables) { requireNonNull(executables, "executable"); abortIfSealed(); if (!queriedOnly) { @@ -243,7 +243,7 @@ public void register(ConfigurationCondition condition, boolean queriedOnly, Exec } @Override - public void register(ConfigurationCondition condition, boolean finalIsWritable, Field... fields) { + public void register(AccessCondition condition, boolean finalIsWritable, Field... fields) { requireNonNull(fields, "field"); abortIfSealed(); registerConditionalConfiguration(condition, (cnd) -> registerFields(finalIsWritable, fields)); @@ -257,7 +257,7 @@ private void registerFields(boolean finalIsWritable, Field[] fields) { } @Override - public void registerClassLookup(ConfigurationCondition condition, String reflectionName) { + public void registerClassLookup(AccessCondition condition, String reflectionName) { try { register(condition, false, Class.forName(reflectionName)); } catch (ClassNotFoundException e) { @@ -267,7 +267,7 @@ public void registerClassLookup(ConfigurationCondition condition, String reflect } @Override - public void registerFieldLookup(ConfigurationCondition condition, Class declaringClass, String fieldName) { + public void registerFieldLookup(AccessCondition condition, Class declaringClass, String fieldName) { try { register(condition, false, declaringClass.getDeclaredField(fieldName)); } catch (NoSuchFieldException e) { @@ -276,7 +276,7 @@ public void registerFieldLookup(ConfigurationCondition condition, Class decla } @Override - public void registerMethodLookup(ConfigurationCondition condition, Class declaringClass, String methodName, Class... parameterTypes) { + public void registerMethodLookup(AccessCondition condition, Class declaringClass, String methodName, Class... parameterTypes) { try { register(condition, false, declaringClass.getDeclaredMethod(methodName, parameterTypes)); } catch (NoSuchMethodException e) { @@ -285,7 +285,7 @@ public void registerMethodLookup(ConfigurationCondition condition, Class decl } @Override - public void registerConstructorLookup(ConfigurationCondition condition, Class declaringClass, Class... parameterTypes) { + public void registerConstructorLookup(AccessCondition condition, Class declaringClass, Class... parameterTypes) { try { register(condition, false, declaringClass.getDeclaredConstructor(parameterTypes)); } catch (NoSuchMethodException e) { diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/NativeImageConditionResolver.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/NativeImageConditionResolver.java index 14288fb74c68..717f84b21573 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/NativeImageConditionResolver.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/NativeImageConditionResolver.java @@ -24,7 +24,8 @@ */ package com.oracle.svm.hosted.reflect; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; +import org.graalvm.nativeimage.impl.TypeReachabilityCondition; import com.oracle.svm.configure.ClassNameSupport; import com.oracle.svm.configure.UnresolvedConfigurationCondition; @@ -33,7 +34,7 @@ import com.oracle.svm.hosted.classinitialization.ClassInitializationSupport; import com.oracle.svm.util.TypeResult; -public class NativeImageConditionResolver implements ConfigurationConditionResolver { +public class NativeImageConditionResolver implements ConfigurationConditionResolver { private final ImageClassLoader classLoader; @SuppressWarnings({"FieldCanBeLocal", "unused"}) private final ClassInitializationSupport classInitializationSupport; @@ -43,7 +44,7 @@ public NativeImageConditionResolver(ImageClassLoader classLoader, ClassInitializ } @Override - public TypeResult resolveCondition(UnresolvedConfigurationCondition unresolvedCondition) { + public TypeResult resolveCondition(UnresolvedConfigurationCondition unresolvedCondition) { String reflectionName = ClassNameSupport.typeNameToReflectionName(unresolvedCondition.getTypeName()); TypeResult> clazz = classLoader.findClass(reflectionName); return clazz.map(type -> { @@ -52,12 +53,15 @@ public TypeResult resolveCondition(UnresolvedConfigurati * reachability checks. */ var runtimeChecked = !classInitializationSupport.isAlwaysReached(type) && unresolvedCondition.isRuntimeChecked(); - return ConfigurationCondition.create(type, runtimeChecked); + /* + * GR-62516, this should be deleted + */ + return TypeReachabilityCondition.create(type, runtimeChecked); }); } @Override - public ConfigurationCondition alwaysTrue() { - return ConfigurationCondition.alwaysTrue(); + public AccessCondition alwaysTrue() { + return AccessCondition.alwaysTrue(); } } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/ReflectionDataBuilder.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/ReflectionDataBuilder.java index 513e0a887e9d..b9153b752644 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/ReflectionDataBuilder.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/ReflectionDataBuilder.java @@ -68,10 +68,11 @@ import java.util.stream.Collectors; import org.graalvm.nativeimage.ImageSingletons; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.hosted.RuntimeProxyCreation; import org.graalvm.nativeimage.hosted.RuntimeReflection; -import org.graalvm.nativeimage.impl.ConfigurationCondition; import org.graalvm.nativeimage.impl.RuntimeReflectionSupport; +import org.graalvm.nativeimage.impl.TypeReachabilityCondition; import com.oracle.graal.pointsto.ObjectScanner.ScanReason; import com.oracle.graal.pointsto.constraints.UnsupportedFeatureException; @@ -149,7 +150,7 @@ public class ReflectionDataBuilder extends ConditionalConfigurationRegistry impl private Map> processedTypes = new ConcurrentHashMap<>(); private Map, Set> pendingRecordClasses; - record ConditionalTask(ConfigurationCondition condition, Consumer task) { + record ConditionalTask(AccessCondition condition, Consumer task) { } private final Set pendingConditionalTasks = ConcurrentHashMap.newKeySet(); @@ -178,7 +179,7 @@ public void beforeAnalysis(BeforeAnalysisAccessImpl beforeAnalysisAccess) { this.analysisAccess = beforeAnalysisAccess; } - private void runConditionalInAnalysisTask(ConfigurationCondition condition, Consumer task) { + private void runConditionalInAnalysisTask(AccessCondition condition, Consumer task) { if (sealed) { throw new UnsupportedFeatureException("Too late to add classes, methods, and fields for reflective access. Registration must happen in a Feature before the analysis has finished."); } @@ -200,13 +201,13 @@ private boolean isQueryFlagSet(Class clazz, int flag) { } @Override - public void register(ConfigurationCondition condition, boolean unsafeInstantiated, Class clazz) { + public void register(AccessCondition condition, boolean unsafeInstantiated, Class clazz) { Objects.requireNonNull(clazz, () -> nullErrorMessage("class")); runConditionalInAnalysisTask(condition, (cnd) -> registerClass(cnd, clazz, unsafeInstantiated, true)); } @Override - public void registerAllClassesQuery(ConfigurationCondition condition, Class clazz) { + public void registerAllClassesQuery(AccessCondition condition, Class clazz) { guaranteeNotRuntimeConditionForQueries(condition, true); runConditionalInAnalysisTask(condition, (cnd) -> { setQueryFlag(clazz, ALL_CLASSES_FLAG); @@ -228,14 +229,16 @@ public void registerAllClassesQuery(ConfigurationCondition condition, Class c * Runtime conditions can only be used with type, so they are not valid here. */ @SuppressWarnings("unused") - private static void guaranteeNotRuntimeConditionForQueries(ConfigurationCondition cnd, boolean queriedOnly) { + private static void guaranteeNotRuntimeConditionForQueries(AccessCondition cnd, boolean queriedOnly) { + TypeReachabilityCondition reachabilityCondition = (TypeReachabilityCondition) cnd; if (!TreatAllTypeReachableConditionsAsTypeReached.getValue()) { - VMError.guarantee(!queriedOnly || cnd.isAlwaysTrue() || !cnd.isRuntimeChecked(), "Bulk queries can only be set with 'name' which does not allow run-time conditions."); + VMError.guarantee(!queriedOnly || reachabilityCondition.isAlwaysTrue() || !reachabilityCondition.isRuntimeChecked(), + "Bulk queries can only be set with 'name' which does not allow run-time conditions."); } } @Override - public void registerAllDeclaredClassesQuery(ConfigurationCondition condition, Class clazz) { + public void registerAllDeclaredClassesQuery(AccessCondition condition, Class clazz) { guaranteeNotRuntimeConditionForQueries(condition, true); runConditionalInAnalysisTask(condition, (cnd) -> { setQueryFlag(clazz, ALL_DECLARED_CLASSES_FLAG); @@ -250,7 +253,7 @@ public void registerAllDeclaredClassesQuery(ConfigurationCondition condition, Cl }); } - private void registerClass(ConfigurationCondition condition, Class clazz, boolean unsafeInstantiated, boolean allowForName) { + private void registerClass(AccessCondition condition, Class clazz, boolean unsafeInstantiated, boolean allowForName) { if (shouldExcludeClass(clazz)) { return; } @@ -286,12 +289,12 @@ private void registerClass(ConfigurationCondition condition, Class clazz, boo } @Override - public void registerClassLookupException(ConfigurationCondition condition, String typeName, Throwable t) { + public void registerClassLookupException(AccessCondition condition, String typeName, Throwable t) { runConditionalInAnalysisTask(condition, (cnd) -> classForNameSupport.registerExceptionForClass(cnd, typeName, t)); } @Override - public void registerClassLookup(ConfigurationCondition condition, String typeName) { + public void registerClassLookup(AccessCondition condition, String typeName) { runConditionalInAnalysisTask(condition, (cnd) -> { try { registerClass(cnd, Class.forName(typeName, false, ClassLoader.getSystemClassLoader()), false, true); @@ -304,7 +307,7 @@ public void registerClassLookup(ConfigurationCondition condition, String typeNam } @Override - public void registerAllRecordComponentsQuery(ConfigurationCondition condition, Class clazz) { + public void registerAllRecordComponentsQuery(AccessCondition condition, Class clazz) { guaranteeNotRuntimeConditionForQueries(condition, true); runConditionalInAnalysisTask(condition, (cnd) -> { setQueryFlag(clazz, ALL_RECORD_COMPONENTS_FLAG); @@ -313,7 +316,7 @@ public void registerAllRecordComponentsQuery(ConfigurationCondition condition, C } @Override - public void registerAllPermittedSubclassesQuery(ConfigurationCondition condition, Class clazz) { + public void registerAllPermittedSubclassesQuery(AccessCondition condition, Class clazz) { guaranteeNotRuntimeConditionForQueries(condition, true); runConditionalInAnalysisTask(condition, (cnd) -> { setQueryFlag(clazz, ALL_PERMITTED_SUBCLASSES_FLAG); @@ -326,7 +329,7 @@ public void registerAllPermittedSubclassesQuery(ConfigurationCondition condition } @Override - public void registerAllNestMembersQuery(ConfigurationCondition condition, Class clazz) { + public void registerAllNestMembersQuery(AccessCondition condition, Class clazz) { guaranteeNotRuntimeConditionForQueries(condition, true); runConditionalInAnalysisTask(condition, (cnd) -> { setQueryFlag(clazz, ALL_NEST_MEMBERS_FLAG); @@ -339,7 +342,7 @@ public void registerAllNestMembersQuery(ConfigurationCondition condition, Class< } @Override - public void registerAllSignersQuery(ConfigurationCondition condition, Class clazz) { + public void registerAllSignersQuery(AccessCondition condition, Class clazz) { guaranteeNotRuntimeConditionForQueries(condition, true); runConditionalInAnalysisTask(condition, (cnd) -> { setQueryFlag(clazz, ALL_SIGNERS_FLAG); @@ -353,13 +356,13 @@ public void registerAllSignersQuery(ConfigurationCondition condition, Class c } @Override - public void register(ConfigurationCondition condition, boolean queriedOnly, Executable... executables) { + public void register(AccessCondition condition, boolean queriedOnly, Executable... executables) { requireNonNull(executables, "executable"); runConditionalInAnalysisTask(condition, (cnd) -> registerMethods(cnd, queriedOnly, executables)); } @Override - public void registerAllMethodsQuery(ConfigurationCondition condition, boolean queriedOnly, Class clazz) { + public void registerAllMethodsQuery(AccessCondition condition, boolean queriedOnly, Class clazz) { guaranteeNotRuntimeConditionForQueries(condition, queriedOnly); runConditionalInAnalysisTask(condition, (cnd) -> { for (Class current = clazz; current != null; current = current.getSuperclass()) { @@ -374,7 +377,7 @@ public void registerAllMethodsQuery(ConfigurationCondition condition, boolean qu } @Override - public void registerAllDeclaredMethodsQuery(ConfigurationCondition condition, boolean queriedOnly, Class clazz) { + public void registerAllDeclaredMethodsQuery(AccessCondition condition, boolean queriedOnly, Class clazz) { guaranteeNotRuntimeConditionForQueries(condition, queriedOnly); runConditionalInAnalysisTask(condition, (cnd) -> { setQueryFlag(clazz, ALL_DECLARED_METHODS_FLAG); @@ -387,7 +390,7 @@ public void registerAllDeclaredMethodsQuery(ConfigurationCondition condition, bo } @Override - public void registerAllConstructorsQuery(ConfigurationCondition condition, boolean queriedOnly, Class clazz) { + public void registerAllConstructorsQuery(AccessCondition condition, boolean queriedOnly, Class clazz) { guaranteeNotRuntimeConditionForQueries(condition, queriedOnly); runConditionalInAnalysisTask(condition, (cnd) -> { for (Class current = clazz; current != null; current = current.getSuperclass()) { @@ -402,7 +405,7 @@ public void registerAllConstructorsQuery(ConfigurationCondition condition, boole } @Override - public void registerAllDeclaredConstructorsQuery(ConfigurationCondition condition, boolean queriedOnly, Class clazz) { + public void registerAllDeclaredConstructorsQuery(AccessCondition condition, boolean queriedOnly, Class clazz) { guaranteeNotRuntimeConditionForQueries(condition, queriedOnly); runConditionalInAnalysisTask(condition, (cnd) -> { setQueryFlag(clazz, ALL_DECLARED_CONSTRUCTORS_FLAG); @@ -414,13 +417,13 @@ public void registerAllDeclaredConstructorsQuery(ConfigurationCondition conditio }); } - private void registerMethods(ConfigurationCondition cnd, boolean queriedOnly, Executable[] reflectExecutables) { + private void registerMethods(AccessCondition cnd, boolean queriedOnly, Executable[] reflectExecutables) { for (Executable reflectExecutable : reflectExecutables) { registerMethod(cnd, queriedOnly, reflectExecutable); } } - private void registerMethod(ConfigurationCondition cnd, boolean queriedOnly, Executable reflectExecutable) { + private void registerMethod(AccessCondition cnd, boolean queriedOnly, Executable reflectExecutable) { if (SubstitutionReflectivityFilter.shouldExclude(reflectExecutable, metaAccess, universe)) { return; } @@ -496,7 +499,7 @@ private void registerMethod(ConfigurationCondition cnd, boolean queriedOnly, Exe } @Override - public void registerMethodLookup(ConfigurationCondition condition, Class declaringClass, String methodName, Class... parameterTypes) { + public void registerMethodLookup(AccessCondition condition, Class declaringClass, String methodName, Class... parameterTypes) { guaranteeNotRuntimeConditionForQueries(condition, true); runConditionalInAnalysisTask(condition, (cnd) -> { try { @@ -511,7 +514,7 @@ public void registerMethodLookup(ConfigurationCondition condition, Class decl } @Override - public void registerConstructorLookup(ConfigurationCondition condition, Class declaringClass, Class... parameterTypes) { + public void registerConstructorLookup(AccessCondition condition, Class declaringClass, Class... parameterTypes) { guaranteeNotRuntimeConditionForQueries(condition, true); runConditionalInAnalysisTask(condition, (cnd) -> { try { @@ -526,17 +529,17 @@ public void registerConstructorLookup(ConfigurationCondition condition, Class } @Override - public void register(ConfigurationCondition condition, boolean finalIsWritable, Field... fields) { + public void register(AccessCondition condition, boolean finalIsWritable, Field... fields) { requireNonNull(fields, "field"); runConditionalInAnalysisTask(condition, (cnd) -> registerFields(cnd, false, fields)); } @Override - public void registerAllFields(ConfigurationCondition condition, Class clazz) { + public void registerAllFields(AccessCondition condition, Class clazz) { registerAllFieldsQuery(condition, false, clazz); } - public void registerAllFieldsQuery(ConfigurationCondition condition, boolean queriedOnly, Class clazz) { + public void registerAllFieldsQuery(AccessCondition condition, boolean queriedOnly, Class clazz) { guaranteeNotRuntimeConditionForQueries(condition, queriedOnly); runConditionalInAnalysisTask(condition, (cnd) -> { for (Class current = clazz; current != null; current = current.getSuperclass()) { @@ -551,16 +554,16 @@ public void registerAllFieldsQuery(ConfigurationCondition condition, boolean que } @Override - public void registerAllDeclaredFields(ConfigurationCondition condition, Class clazz) { + public void registerAllDeclaredFields(AccessCondition condition, Class clazz) { registerAllDeclaredFieldsQuery(condition, false, clazz); } - private record AllDeclaredFieldsQuery(ConfigurationCondition condition, boolean queriedOnly, Class clazz) { + private record AllDeclaredFieldsQuery(AccessCondition condition, boolean queriedOnly, Class clazz) { } private Set existingAllDeclaredFieldsQuery = ConcurrentHashMap.newKeySet(); - public void registerAllDeclaredFieldsQuery(ConfigurationCondition condition, boolean queriedOnly, Class clazz) { + public void registerAllDeclaredFieldsQuery(AccessCondition condition, boolean queriedOnly, Class clazz) { final var query = new AllDeclaredFieldsQuery(condition, queriedOnly, clazz); if (!existingAllDeclaredFieldsQuery.contains(query)) { runConditionalInAnalysisTask(condition, (cnd) -> { @@ -575,13 +578,13 @@ public void registerAllDeclaredFieldsQuery(ConfigurationCondition condition, boo } } - private void registerFields(ConfigurationCondition cnd, boolean queriedOnly, Field[] reflectFields) { + private void registerFields(AccessCondition cnd, boolean queriedOnly, Field[] reflectFields) { for (Field reflectField : reflectFields) { registerField(cnd, queriedOnly, reflectField); } } - private void registerField(ConfigurationCondition cnd, boolean queriedOnly, Field reflectField) { + private void registerField(AccessCondition cnd, boolean queriedOnly, Field reflectField) { if (SubstitutionReflectivityFilter.shouldExclude(reflectField, metaAccess, universe)) { return; } @@ -633,7 +636,7 @@ private void registerField(ConfigurationCondition cnd, boolean queriedOnly, Fiel } @Override - public void registerFieldLookup(ConfigurationCondition condition, Class declaringClass, String fieldName) { + public void registerFieldLookup(AccessCondition condition, Class declaringClass, String fieldName) { runConditionalInAnalysisTask(condition, (cnd) -> { try { registerField(cnd, false, declaringClass.getDeclaredField(fieldName)); @@ -658,8 +661,11 @@ private void processAnnotationMethod(boolean queriedOnly, Method method) { Class annotationClass = method.getDeclaringClass(); Class proxyClass = Proxy.getProxyClass(annotationClass.getClassLoader(), annotationClass); try { - /* build-time condition as it is registered during analysis */ - var condition = ConfigurationCondition.create(proxyClass, false); + /* + * build-time condition as it is registered during analysis GR-62516, this should be + * deleted + */ + var condition = TypeReachabilityCondition.create(proxyClass, false); register(condition, queriedOnly, proxyClass.getDeclaredMethod(method.getName(), method.getParameterTypes())); } catch (NoSuchMethodException e) { /* @@ -669,7 +675,7 @@ private void processAnnotationMethod(boolean queriedOnly, Method method) { } @SuppressWarnings("deprecation") - private void processAnnotationField(ConfigurationCondition cnd, Field field) { + private void processAnnotationField(AccessCondition cnd, Field field) { Class annotationClass = field.getDeclaringClass(); Class proxyClass = Proxy.getProxyClass(annotationClass.getClassLoader(), annotationClass); try { @@ -959,7 +965,7 @@ private void registerTypesForGenericSignature(Type type, int dimension) { private void registerTypesForRecordComponent(RecordComponent recordComponent) { Method accessorOrNull = recordComponent.getAccessor(); if (accessorOrNull != null) { - register(ConfigurationCondition.alwaysTrue(), true, accessorOrNull); + register(AccessCondition.alwaysTrue(), true, accessorOrNull); } registerTypesForAnnotations(recordComponent); registerTypesForTypeAnnotations(recordComponent); @@ -1235,7 +1241,7 @@ public void registerHeapReflectionField(Field reflectField, ScanReason reason) { if (!SubstitutionReflectivityFilter.shouldExclude(reflectField, metaAccess, universe)) { registerTypesForField(analysisField, reflectField, false); if (analysisField.getDeclaringClass().isAnnotation()) { - processAnnotationField(ConfigurationCondition.alwaysTrue(), reflectField); + processAnnotationField(AccessCondition.alwaysTrue(), reflectField); } } } @@ -1362,7 +1368,7 @@ private static String nullErrorMessage(String kind) { public static class TestBackdoor { public static void registerField(ReflectionDataBuilder reflectionDataBuilder, boolean queriedOnly, Field field) { - reflectionDataBuilder.runConditionalInAnalysisTask(ConfigurationCondition.alwaysTrue(), (cnd) -> reflectionDataBuilder.registerField(cnd, queriedOnly, field)); + reflectionDataBuilder.runConditionalInAnalysisTask(AccessCondition.alwaysTrue(), (cnd) -> reflectionDataBuilder.registerField(cnd, queriedOnly, field)); } } } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/ReflectionFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/ReflectionFeature.java index 13f195ecffe1..627430b54757 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/ReflectionFeature.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/ReflectionFeature.java @@ -40,9 +40,9 @@ import org.graalvm.nativeimage.ImageSingletons; import org.graalvm.nativeimage.c.function.CFunctionPointer; import org.graalvm.nativeimage.hosted.Feature; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.hosted.RuntimeReflection; import org.graalvm.nativeimage.impl.AnnotationExtractor; -import org.graalvm.nativeimage.impl.ConfigurationCondition; import org.graalvm.nativeimage.impl.RuntimeJNIAccessSupport; import org.graalvm.nativeimage.impl.RuntimeProxyCreationSupport; import org.graalvm.nativeimage.impl.RuntimeReflectionSupport; @@ -293,12 +293,12 @@ public void duringSetup(DuringSetupAccess a) { var conditionResolver = new NativeImageConditionResolver(access.getImageClassLoader(), ClassInitializationSupport.singleton()); reflectionData.duringSetup(access.getMetaAccess(), aUniverse); RuntimeProxyCreationSupport proxyRegistry = ImageSingletons.lookup(RuntimeProxyCreationSupport.class); - RuntimeSerializationSupport serializationSupport = RuntimeSerializationSupport.singleton(); + RuntimeSerializationSupport serializationSupport = RuntimeSerializationSupport.singleton(); RuntimeJNIAccessSupport jniSupport = SubstrateOptions.JNI.getValue() ? ImageSingletons.lookup(RuntimeJNIAccessSupport.class) : null; - ReflectionConfigurationParser> parser = ConfigurationParserUtils.create(ConfigurationFile.REFLECTION, true, conditionResolver, reflectionData, proxyRegistry, + ReflectionConfigurationParser> parser = ConfigurationParserUtils.create(ConfigurationFile.REFLECTION, true, conditionResolver, reflectionData, proxyRegistry, serializationSupport, jniSupport, access.getImageClassLoader()); loadedConfigurations = ConfigurationParserUtils.parseAndRegisterConfigurationsFromCombinedFile(parser, access.getImageClassLoader(), "reflection"); - ReflectionConfigurationParser> legacyParser = ConfigurationParserUtils.create(ConfigurationFile.REFLECTION, false, conditionResolver, reflectionData, + ReflectionConfigurationParser> legacyParser = ConfigurationParserUtils.create(ConfigurationFile.REFLECTION, false, conditionResolver, reflectionData, proxyRegistry, serializationSupport, jniSupport, access.getImageClassLoader()); loadedConfigurations += ConfigurationParserUtils.parseAndRegisterConfigurations(legacyParser, access.getImageClassLoader(), "reflection", ConfigurationFiles.Options.ReflectionConfigurationFiles, ConfigurationFiles.Options.ReflectionConfigurationResources, @@ -309,7 +309,7 @@ public void duringSetup(DuringSetupAccess a) { /* Primitive classes cannot be accessed through Class.forName() */ for (Class primitiveClass : PRIMITIVE_CLASSES) { - ClassForNameSupport.currentLayer().registerNegativeQuery(ConfigurationCondition.alwaysTrue(), primitiveClass.getName()); + ClassForNameSupport.currentLayer().registerNegativeQuery(AccessCondition.alwaysTrue(), primitiveClass.getName()); } access.registerObjectReachableCallback(SubstrateAccessor.class, ReflectionFeature::onAccessorReachable); diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/DynamicProxyFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/DynamicProxyFeature.java index 4231340be5a4..7a301ba75427 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/DynamicProxyFeature.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/DynamicProxyFeature.java @@ -25,7 +25,7 @@ package com.oracle.svm.hosted.reflect.proxy; import org.graalvm.nativeimage.ImageSingletons; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.impl.RuntimeProxyCreationSupport; import com.oracle.svm.configure.ConfigurationFile; @@ -68,9 +68,9 @@ public void afterRegistration(AfterRegistrationAccess a) { public void duringSetup(DuringSetupAccess a) { DuringSetupAccessImpl access = (DuringSetupAccessImpl) a; ImageClassLoader imageClassLoader = access.getImageClassLoader(); - ConfigurationConditionResolver conditionResolver = new NativeImageConditionResolver(imageClassLoader, ClassInitializationSupport.singleton()); + ConfigurationConditionResolver conditionResolver = new NativeImageConditionResolver(imageClassLoader, ClassInitializationSupport.singleton()); - ProxyConfigurationParser parser = new ProxyConfigurationParser<>(conditionResolver, ConfigurationFiles.Options.getConfigurationParserOptions(), proxyRegistry); + ProxyConfigurationParser parser = new ProxyConfigurationParser<>(conditionResolver, ConfigurationFiles.Options.getConfigurationParserOptions(), proxyRegistry); loadedConfigurations = ConfigurationParserUtils.parseAndRegisterConfigurations(parser, imageClassLoader, "dynamic proxy", ConfigurationFiles.Options.DynamicProxyConfigurationFiles, ConfigurationFiles.Options.DynamicProxyConfigurationResources, ConfigurationFile.DYNAMIC_PROXY.getFileName()); diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/ProxyRegistry.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/ProxyRegistry.java index f2a2e1093e89..50dca38a5c87 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/ProxyRegistry.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/ProxyRegistry.java @@ -27,14 +27,14 @@ import java.util.List; import java.util.function.BiConsumer; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import com.oracle.svm.core.jdk.proxy.DynamicProxyRegistry; import com.oracle.svm.hosted.ConditionalConfigurationRegistry; import com.oracle.svm.hosted.ImageClassLoader; import com.oracle.svm.util.LogUtils; -public class ProxyRegistry extends ConditionalConfigurationRegistry implements BiConsumer> { +public class ProxyRegistry extends ConditionalConfigurationRegistry implements BiConsumer> { private final DynamicProxyRegistry dynamicProxySupport; private final ImageClassLoader imageClassLoader; @@ -44,7 +44,7 @@ public ProxyRegistry(DynamicProxyRegistry dynamicProxySupport, ImageClassLoader } @Override - public void accept(ConfigurationCondition condition, List proxies) { + public void accept(AccessCondition condition, List proxies) { Class[] interfaces = checkIfInterfacesAreValid(proxies); if (interfaces != null) { registerConditionalConfiguration(condition, (cnd) -> { diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/serialize/SerializationFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/serialize/SerializationFeature.java index 323b2d663eb3..f26f5180dbc4 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/serialize/SerializationFeature.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/serialize/SerializationFeature.java @@ -52,9 +52,9 @@ import java.util.concurrent.ConcurrentHashMap; import org.graalvm.nativeimage.ImageSingletons; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.hosted.Feature; import org.graalvm.nativeimage.hosted.RuntimeReflection; -import org.graalvm.nativeimage.impl.ConfigurationCondition; import org.graalvm.nativeimage.impl.RuntimeReflectionSupport; import org.graalvm.nativeimage.impl.RuntimeSerializationSupport; @@ -130,17 +130,17 @@ public void afterRegistration(AfterRegistrationAccess a) { public void duringSetup(DuringSetupAccess a) { FeatureImpl.DuringSetupAccessImpl access = (FeatureImpl.DuringSetupAccessImpl) a; ImageClassLoader imageClassLoader = access.getImageClassLoader(); - ConfigurationConditionResolver conditionResolver = new NativeImageConditionResolver(imageClassLoader, ClassInitializationSupport.singleton()); + ConfigurationConditionResolver conditionResolver = new NativeImageConditionResolver(imageClassLoader, ClassInitializationSupport.singleton()); EnumSet parserOptions = ConfigurationFiles.Options.getConfigurationParserOptions(); - SerializationConfigurationParser parser = SerializationConfigurationParser.create(true, conditionResolver, serializationBuilder, parserOptions); + SerializationConfigurationParser parser = SerializationConfigurationParser.create(true, conditionResolver, serializationBuilder, parserOptions); loadedConfigurations = ConfigurationParserUtils.parseAndRegisterConfigurationsFromCombinedFile(parser, imageClassLoader, "serialization"); - SerializationConfigurationParser denyCollectorParser = SerializationConfigurationParser.create(false, conditionResolver, serializationDenyRegistry, parserOptions); + SerializationConfigurationParser denyCollectorParser = SerializationConfigurationParser.create(false, conditionResolver, serializationDenyRegistry, parserOptions); ConfigurationParserUtils.parseAndRegisterConfigurations(denyCollectorParser, imageClassLoader, "serialization", ConfigurationFiles.Options.SerializationDenyConfigurationFiles, ConfigurationFiles.Options.SerializationDenyConfigurationResources, ConfigurationFile.SERIALIZATION_DENY.getFileName()); - SerializationConfigurationParser legacyParser = SerializationConfigurationParser.create(false, conditionResolver, serializationBuilder, parserOptions); + SerializationConfigurationParser legacyParser = SerializationConfigurationParser.create(false, conditionResolver, serializationBuilder, parserOptions); loadedConfigurations += ConfigurationParserUtils.parseAndRegisterConfigurations(legacyParser, imageClassLoader, "serialization", ConfigurationFiles.Options.SerializationConfigurationFiles, ConfigurationFiles.Options.SerializationConfigurationResources, ConfigurationFile.SERIALIZATION.getFileName()); @@ -156,7 +156,7 @@ private static void registerLambdasFromConstantNodesInGraph(StructuredGraph grap if (lambdaClass != null && Serializable.class.isAssignableFrom(lambdaClass)) { RuntimeReflection.register(ReflectionUtil.lookupMethod(lambdaClass, "writeReplace")); SerializationBuilder.registerSerializationUIDElements(lambdaClass, false); - serializationBuilder.serializationSupport.registerSerializationTargetClass(ConfigurationCondition.alwaysTrue(), serializationBuilder.getHostVM().dynamicHub(lambdaClass)); + serializationBuilder.serializationSupport.registerSerializationTargetClass(AccessCondition.alwaysTrue(), serializationBuilder.getHostVM().dynamicHub(lambdaClass)); } } } @@ -214,7 +214,7 @@ public static Object getConstructorAccessor(Constructor constructor) { } } -final class SerializationDenyRegistry implements RuntimeSerializationSupport { +final class SerializationDenyRegistry implements RuntimeSerializationSupport { private final Map, Boolean> deniedClasses = new HashMap<>(); private final ConfigurationTypeResolver typeResolver; @@ -228,24 +228,24 @@ final class SerializationDenyRegistry implements RuntimeSerializationSupport clazz) { + public void registerIncludingAssociatedClasses(AccessCondition condition, Class clazz) { register(condition, clazz); } @Override - public void register(ConfigurationCondition condition, Class clazz) { + public void register(AccessCondition condition, Class clazz) { if (clazz != null) { deniedClasses.put(clazz, true); } } @Override - public void register(ConfigurationCondition condition, String className) { + public void register(AccessCondition condition, String className) { this.register(condition, typeResolver.resolveType(className)); } @Override - public void registerLambdaCapturingClass(ConfigurationCondition condition, String lambdaCapturingClassName) { + public void registerLambdaCapturingClass(AccessCondition condition, String lambdaCapturingClassName) { Class lambdaCapturingClass = typeResolver.resolveType(lambdaCapturingClassName); if (lambdaCapturingClass != null) { deniedClasses.put(lambdaCapturingClass, true); @@ -253,7 +253,7 @@ public void registerLambdaCapturingClass(ConfigurationCondition condition, Strin } @Override - public void registerProxyClass(ConfigurationCondition condition, List implementedInterfaces) { + public void registerProxyClass(AccessCondition condition, List implementedInterfaces) { } public boolean isAllowed(Class clazz) { @@ -266,7 +266,7 @@ public boolean isAllowed(Class clazz) { } } -final class SerializationBuilder extends ConditionalConfigurationRegistry implements RuntimeSerializationSupport { +final class SerializationBuilder extends ConditionalConfigurationRegistry implements RuntimeSerializationSupport { private static final Method getConstructorAccessorMethod = ReflectionUtil.lookupMethod(Constructor.class, "getConstructorAccessor"); private static final Method getExternalizableConstructorMethod = ReflectionUtil.lookupMethod(ObjectStreamClass.class, "getExternalizableConstructor", Class.class); @@ -309,11 +309,11 @@ private void abortIfSealed() { } @Override - public void registerIncludingAssociatedClasses(ConfigurationCondition condition, Class clazz) { + public void registerIncludingAssociatedClasses(AccessCondition condition, Class clazz) { registerIncludingAssociatedClasses(condition, clazz, new HashSet<>()); } - private void registerIncludingAssociatedClasses(ConfigurationCondition condition, Class clazz, Set> alreadyVisited) { + private void registerIncludingAssociatedClasses(AccessCondition condition, Class clazz, Set> alreadyVisited) { if (alreadyVisited.contains(clazz)) { return; } @@ -363,7 +363,7 @@ private void registerIncludingAssociatedClasses(ConfigurationCondition condition } @Override - public void registerLambdaCapturingClass(ConfigurationCondition condition, String lambdaCapturingClassName) { + public void registerLambdaCapturingClass(AccessCondition condition, String lambdaCapturingClassName) { abortIfSealed(); Class lambdaCapturingClass = typeResolver.resolveType(lambdaCapturingClassName); @@ -385,7 +385,7 @@ public void registerLambdaCapturingClass(ConfigurationCondition condition, Strin } @Override - public void registerProxyClass(ConfigurationCondition condition, List implementedInterfaces) { + public void registerProxyClass(AccessCondition condition, List implementedInterfaces) { registerConditionalConfiguration(condition, (cnd) -> { Class proxyClass = proxyRegistry.createProxyClassForSerialization(implementedInterfaces); register(cnd, proxyClass); @@ -393,7 +393,7 @@ public void registerProxyClass(ConfigurationCondition condition, List im } @Override - public void register(ConfigurationCondition condition, String targetClassName) { + public void register(AccessCondition condition, String targetClassName) { abortIfSealed(); Class serializationTargetClass = typeResolver.resolveType(targetClassName); /* With invalid streams we have to register the class for lookup */ @@ -405,7 +405,7 @@ public void register(ConfigurationCondition condition, String targetClassName) { } @Override - public void register(ConfigurationCondition condition, Class serializationTargetClass) { + public void register(AccessCondition condition, Class serializationTargetClass) { abortIfSealed(); registerConditionalConfiguration(condition, (cnd) -> { /* @@ -428,9 +428,9 @@ public void register(ConfigurationCondition condition, Class serializationTar Class superclass = serializationTargetClass.getSuperclass(); if (superclass != null) { - ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllDeclaredConstructorsQuery(ConfigurationCondition.alwaysTrue(), true, superclass); - ImageSingletons.lookup(RuntimeReflectionSupport.class).registerMethodLookup(ConfigurationCondition.alwaysTrue(), superclass, "writeReplace"); - ImageSingletons.lookup(RuntimeReflectionSupport.class).registerMethodLookup(ConfigurationCondition.alwaysTrue(), superclass, "readResolve"); + ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllDeclaredConstructorsQuery(AccessCondition.alwaysTrue(), true, superclass); + ImageSingletons.lookup(RuntimeReflectionSupport.class).registerMethodLookup(AccessCondition.alwaysTrue(), superclass, "writeReplace"); + ImageSingletons.lookup(RuntimeReflectionSupport.class).registerMethodLookup(AccessCondition.alwaysTrue(), superclass, "readResolve"); } registerForSerialization(cnd, serializationTargetClass); @@ -440,7 +440,7 @@ public void register(ConfigurationCondition condition, Class serializationTar }); } - private void addOrQueueConstructorAccessors(ConfigurationCondition cnd, Class serializationTargetClass, DynamicHub hub) { + private void addOrQueueConstructorAccessors(AccessCondition cnd, Class serializationTargetClass, DynamicHub hub) { if (pendingConstructorRegistrations != null) { // cannot yet create constructor accessor -> add to pending pendingConstructorRegistrations.add(() -> registerConstructorAccessors(cnd, serializationTargetClass, hub)); @@ -450,7 +450,7 @@ private void addOrQueueConstructorAccessors(ConfigurationCondition cnd, Class } } - private void registerConstructorAccessors(ConfigurationCondition cnd, Class serializationTargetClass, DynamicHub hub) { + private void registerConstructorAccessors(AccessCondition cnd, Class serializationTargetClass, DynamicHub hub) { serializationSupport.registerSerializationTargetClass(cnd, hub); registerConstructorAccessor(cnd, serializationTargetClass, null); for (Class superclass = serializationTargetClass; superclass != null; superclass = superclass.getSuperclass()) { @@ -458,7 +458,7 @@ private void registerConstructorAccessors(ConfigurationCondition cnd, Class s } } - private void registerConstructorAccessor(ConfigurationCondition cnd, Class serializationTargetClass, Class targetConstructorClass) { + private void registerConstructorAccessor(AccessCondition cnd, Class serializationTargetClass, Class targetConstructorClass) { Optional.ofNullable(addConstructorAccessor(serializationTargetClass, targetConstructorClass)) .map(ReflectionUtil::lookupConstructor) .ifPresent(methods -> ImageSingletons.lookup(RuntimeReflectionSupport.class).register(cnd, false, methods)); @@ -485,7 +485,7 @@ private static void registerQueriesForInheritableMethod(Class clazz, String m } } - private static void registerMethod(ConfigurationCondition cnd, Class clazz, String methodName, Class... args) { + private static void registerMethod(AccessCondition cnd, Class clazz, String methodName, Class... args) { Method method = ReflectionUtil.lookupMethod(true, clazz, methodName, args); if (method != null) { ImageSingletons.lookup(RuntimeReflectionSupport.class).register(cnd, false, method); @@ -494,7 +494,7 @@ private static void registerMethod(ConfigurationCondition cnd, Class clazz, S } } - private void registerForSerialization(ConfigurationCondition cnd, Class serializationTargetClass) { + private void registerForSerialization(AccessCondition cnd, Class serializationTargetClass) { if (Serializable.class.isAssignableFrom(serializationTargetClass)) { /* @@ -569,7 +569,7 @@ public void afterAnalysis() { sealed = true; } - private static void registerForDeserialization(ConfigurationCondition cnd, Class serializationTargetClass) { + private static void registerForDeserialization(AccessCondition cnd, Class serializationTargetClass) { ImageSingletons.lookup(RuntimeReflectionSupport.class).register(cnd, serializationTargetClass); if (serializationTargetClass.isRecord()) { diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/xml/XMLParsersRegistration.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/xml/XMLParsersRegistration.java index af5fb15d1170..91229fedf3e6 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/xml/XMLParsersRegistration.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/xml/XMLParsersRegistration.java @@ -30,9 +30,9 @@ import java.util.List; import org.graalvm.nativeimage.ImageSingletons; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.hosted.Feature; import org.graalvm.nativeimage.hosted.RuntimeReflection; -import org.graalvm.nativeimage.impl.ConfigurationCondition; import org.graalvm.nativeimage.impl.RuntimeClassInitializationSupport; import com.oracle.svm.configure.ResourcesRegistry; @@ -130,22 +130,22 @@ void registerResources() { */ ClassInitializationSupport classInitializationSupport = (ClassInitializationSupport) ImageSingletons.lookup(RuntimeClassInitializationSupport.class); classInitializationSupport.withUnsealedConfiguration(() -> { - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "com.sun.org.apache.xml.internal.serializer.utils.SerializerMessages"); - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMessages"); - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "com.sun.org.apache.xml.internal.serializer.Encodings"); - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "com.sun.org.apache.xml.internal.serializer.HTMLEntities"); - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "com.sun.org.apache.xml.internal.serializer.XMLEntities"); - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.xpath.regex.message"); - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.DOMMessages"); - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.DatatypeMessages"); - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.JAXPValidationMessages"); - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.SAXMessages"); - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.XIncludeMessages"); - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.XMLMessages"); - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.XMLSchemaMessages"); - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.XMLSerializerMessages"); - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.XPointerMessages"); - ResourcesRegistry.singleton().addResourceBundles(ConfigurationCondition.alwaysTrue(), "com.sun.org.apache.xalan.internal.res.XSLTInfo"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "com.sun.org.apache.xml.internal.serializer.utils.SerializerMessages"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMessages"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "com.sun.org.apache.xml.internal.serializer.Encodings"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "com.sun.org.apache.xml.internal.serializer.HTMLEntities"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "com.sun.org.apache.xml.internal.serializer.XMLEntities"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.xpath.regex.message"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.DOMMessages"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.DatatypeMessages"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.JAXPValidationMessages"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.SAXMessages"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.XIncludeMessages"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.XMLMessages"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.XMLSchemaMessages"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.XMLSerializerMessages"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "com.sun.org.apache.xerces.internal.impl.msg.XPointerMessages"); + ResourcesRegistry.singleton().addResourceBundles(AccessCondition.alwaysTrue(), "com.sun.org.apache.xalan.internal.res.XSLTInfo"); }); } diff --git a/web-image/src/com.oracle.svm.hosted.webimage/src/com/oracle/svm/hosted/webimage/JSEntryPointRegistry.java b/web-image/src/com.oracle.svm.hosted.webimage/src/com/oracle/svm/hosted/webimage/JSEntryPointRegistry.java index b66e60983333..5b37febb07d5 100644 --- a/web-image/src/com.oracle.svm.hosted.webimage/src/com/oracle/svm/hosted/webimage/JSEntryPointRegistry.java +++ b/web-image/src/com.oracle.svm.hosted.webimage/src/com/oracle/svm/hosted/webimage/JSEntryPointRegistry.java @@ -30,7 +30,7 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.impl.ReflectionRegistry; /** @@ -47,13 +47,13 @@ public class JSEntryPointRegistry implements ReflectionRegistry { public final Set entryPoints = Collections.newSetFromMap(new ConcurrentHashMap<>()); @Override - public void register(ConfigurationCondition condition, boolean unsafeAllocated, Class clazz) { + public void register(AccessCondition condition, boolean unsafeAllocated, Class clazz) { // Do nothing for types } @Override - public void register(ConfigurationCondition condition, boolean queriedOnly, Executable... methods) { - if (!ConfigurationCondition.alwaysTrue().equals(condition)) { + public void register(AccessCondition condition, boolean queriedOnly, Executable... methods) { + if (!AccessCondition.alwaysTrue().equals(condition)) { System.err.println("Conditional specification in entry points configuration is not supported and is ignored"); } @@ -65,27 +65,27 @@ public void register(ConfigurationCondition condition, boolean queriedOnly, Exec } @Override - public void register(ConfigurationCondition condition, boolean finalIsWritable, Field... fields) { + public void register(AccessCondition condition, boolean finalIsWritable, Field... fields) { System.err.println("The specification for fields in entry points configuration is not supported and is ignored."); } @Override - public void registerClassLookup(ConfigurationCondition condition, String typeName) { + public void registerClassLookup(AccessCondition condition, String typeName) { } @Override - public void registerFieldLookup(ConfigurationCondition condition, Class declaringClass, String fieldName) { + public void registerFieldLookup(AccessCondition condition, Class declaringClass, String fieldName) { } @Override - public void registerMethodLookup(ConfigurationCondition condition, Class declaringClass, String methodName, Class... parameterTypes) { + public void registerMethodLookup(AccessCondition condition, Class declaringClass, String methodName, Class... parameterTypes) { } @Override - public void registerConstructorLookup(ConfigurationCondition condition, Class declaringClass, Class... parameterTypes) { + public void registerConstructorLookup(AccessCondition condition, Class declaringClass, Class... parameterTypes) { } } diff --git a/web-image/src/com.oracle.svm.hosted.webimage/src/com/oracle/svm/hosted/webimage/WebImageFeature.java b/web-image/src/com.oracle.svm.hosted.webimage/src/com/oracle/svm/hosted/webimage/WebImageFeature.java index 97a0f5bf90a2..60afe27f002f 100644 --- a/web-image/src/com.oracle.svm.hosted.webimage/src/com/oracle/svm/hosted/webimage/WebImageFeature.java +++ b/web-image/src/com.oracle.svm.hosted.webimage/src/com/oracle/svm/hosted/webimage/WebImageFeature.java @@ -42,7 +42,7 @@ import org.graalvm.nativeimage.Platforms; import org.graalvm.nativeimage.hosted.Feature; import org.graalvm.nativeimage.hosted.RuntimeReflection; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.impl.RuntimeClassInitializationSupport; import org.graalvm.nativeimage.impl.RuntimeJNIAccessSupport; import org.graalvm.nativeimage.impl.RuntimeSystemPropertiesSupport; @@ -226,9 +226,9 @@ public void duringSetup(DuringSetupAccess a) { String entryPointConfig = WebImageOptions.EntryPointsConfig.getValue(ImageSingletons.lookup(HostedOptionValues.class)); if (entryPointConfig != null) { - ConfigurationConditionResolver conditionResolver = new NativeImageConditionResolver(access.getImageClassLoader(), + ConfigurationConditionResolver conditionResolver = new NativeImageConditionResolver(access.getImageClassLoader(), ClassInitializationSupport.singleton()); - ReflectionConfigurationParser> parser = ConfigurationParserUtils.create(ConfigurationFile.REFLECTION, false, conditionResolver, entryPointsData, null, + ReflectionConfigurationParser> parser = ConfigurationParserUtils.create(ConfigurationFile.REFLECTION, false, conditionResolver, entryPointsData, null, null, null, access.getImageClassLoader()); try { parser.parseAndRegister(Path.of(entryPointConfig).toUri()); diff --git a/web-image/src/com.oracle.svm.hosted.webimage/src/com/oracle/svm/hosted/webimage/WebImageRuntimeJNIAccessSupport.java b/web-image/src/com.oracle.svm.hosted.webimage/src/com/oracle/svm/hosted/webimage/WebImageRuntimeJNIAccessSupport.java index 739abd9ad5cc..4df23938c536 100644 --- a/web-image/src/com.oracle.svm.hosted.webimage/src/com/oracle/svm/hosted/webimage/WebImageRuntimeJNIAccessSupport.java +++ b/web-image/src/com.oracle.svm.hosted.webimage/src/com/oracle/svm/hosted/webimage/WebImageRuntimeJNIAccessSupport.java @@ -28,7 +28,7 @@ import java.lang.reflect.Executable; import java.lang.reflect.Field; -import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.dynamicaccess.AccessCondition; import org.graalvm.nativeimage.impl.RuntimeJNIAccessSupport; /** @@ -40,37 +40,37 @@ */ public class WebImageRuntimeJNIAccessSupport implements RuntimeJNIAccessSupport { @Override - public void register(ConfigurationCondition condition, boolean unsafeAllocated, Class clazz) { + public void register(AccessCondition condition, boolean unsafeAllocated, Class clazz) { // Do nothing. } @Override - public void register(ConfigurationCondition condition, boolean queriedOnly, Executable... methods) { + public void register(AccessCondition condition, boolean queriedOnly, Executable... methods) { // Do nothing. } @Override - public void register(ConfigurationCondition condition, boolean finalIsWritable, Field... fields) { + public void register(AccessCondition condition, boolean finalIsWritable, Field... fields) { // Do nothing. } @Override - public void registerClassLookup(ConfigurationCondition condition, String typeName) { + public void registerClassLookup(AccessCondition condition, String typeName) { // Do nothing. } @Override - public void registerFieldLookup(ConfigurationCondition condition, Class declaringClass, String fieldName) { + public void registerFieldLookup(AccessCondition condition, Class declaringClass, String fieldName) { // Do nothing. } @Override - public void registerMethodLookup(ConfigurationCondition condition, Class declaringClass, String methodName, Class... parameterTypes) { + public void registerMethodLookup(AccessCondition condition, Class declaringClass, String methodName, Class... parameterTypes) { // Do nothing. } @Override - public void registerConstructorLookup(ConfigurationCondition condition, Class declaringClass, Class... parameterTypes) { + public void registerConstructorLookup(AccessCondition condition, Class declaringClass, Class... parameterTypes) { // Do nothing. } } From 3f92a671fef5194b94c3e57235974e014c3e2e69 Mon Sep 17 00:00:00 2001 From: Mihailo Date: Fri, 6 Jun 2025 10:45:21 +0200 Subject: [PATCH 3/3] Renamed UnresolvedConfigurationCondition to UnresolvedAccessCondition. --- .../test/config/OmitPreviousConfigTests.java | 20 ++++---- .../config/ResourceConfigurationTest.java | 22 ++++----- .../ConditionalConfigurationParser.java | 12 ++--- .../svm/configure/ConditionalElement.java | 2 +- .../svm/configure/ConfigurationBase.java | 2 +- .../LegacyReflectionConfigurationParser.java | 2 +- .../LegacyResourceConfigurationParser.java | 2 +- ...egacySerializationConfigurationParser.java | 2 +- .../configure/ProxyConfigurationParser.java | 2 +- .../configure/ReflectionMetadataParser.java | 2 +- .../ResourceConfigurationParser.java | 2 +- .../svm/configure/ResourceMetadataParser.java | 2 +- .../SerializationMetadataParser.java | 2 +- ...on.java => UnresolvedAccessCondition.java} | 18 +++---- .../ConfigurationConditionPrintable.java | 8 ++-- .../configure/config/ConfigurationType.java | 10 ++-- .../config/ForeignConfiguration.java | 4 +- .../config/ParserConfigurationAdapter.java | 48 +++++++++---------- .../PredefinedClassesConfiguration.java | 4 +- .../configure/config/ProxyConfiguration.java | 10 ++-- .../config/ResourceConfiguration.java | 38 +++++++-------- .../config/SerializationConfiguration.java | 22 ++++----- ...ationConfigurationLambdaCapturingType.java | 8 ++-- .../SerializationConfigurationType.java | 8 ++-- .../configure/config/TypeConfiguration.java | 8 ++-- .../ConditionalConfigurationComputer.java | 10 ++-- .../ConditionalConfigurationPredicate.java | 4 +- .../ConfigurationConditionResolver.java | 12 ++--- .../svm/configure/trace/JniProcessor.java | 6 +-- .../configure/trace/ReflectionProcessor.java | 10 ++-- .../trace/SerializationProcessor.java | 4 +- .../svm/core/metadata/MetadataTracer.java | 8 ++-- .../reflect/NativeImageConditionResolver.java | 4 +- 33 files changed, 159 insertions(+), 159 deletions(-) rename substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/{UnresolvedConfigurationCondition.java => UnresolvedAccessCondition.java} (78%) 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 fcf88b055d9b..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 @@ -41,7 +41,7 @@ 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,16 +113,16 @@ 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) { } @@ -132,12 +132,12 @@ public void addCondition(AccessCondition configurationCondition, Module module, } @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/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/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 78% 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 94cbe0c7b898..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 @@ -32,32 +32,32 @@ * 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 { +public class ParserConfigurationAdapter implements ReflectionConfigurationParserDelegate { private final TypeConfiguration configuration; @@ -42,7 +42,7 @@ public ParserConfigurationAdapter(TypeConfiguration configuration) { } @Override - public TypeResult resolveType(UnresolvedConfigurationCondition condition, ConfigurationTypeDescriptor typeDescriptor, boolean allowPrimitives, boolean jniAccessible) { + public TypeResult resolveType(UnresolvedAccessCondition condition, ConfigurationTypeDescriptor typeDescriptor, boolean allowPrimitives, boolean jniAccessible) { ConfigurationType type = configuration.get(condition, typeDescriptor); /* * The type is not immediately set with all elements included. These are added afterwards @@ -53,13 +53,13 @@ public TypeResult resolveType(UnresolvedConfigurationConditio } @Override - public void registerType(UnresolvedConfigurationCondition condition, ConfigurationType type) { + public void registerType(UnresolvedAccessCondition condition, ConfigurationType type) { checkArguments(condition.equals(type.getCondition()), "condition is already a part of the type"); configuration.add(type); } @Override - public void registerField(UnresolvedConfigurationCondition condition, ConfigurationType type, String fieldName, boolean finalButWritable, boolean jniAccessible) { + public void registerField(UnresolvedAccessCondition condition, ConfigurationType type, String fieldName, boolean finalButWritable, boolean jniAccessible) { checkArguments(condition.equals(type.getCondition()), "condition is already a part of the type"); if (jniAccessible) { type.setJniAccessible(); @@ -68,7 +68,7 @@ public void registerField(UnresolvedConfigurationCondition condition, Configurat } @Override - public boolean registerAllMethodsWithName(UnresolvedConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, ConfigurationType type, String methodName) { + public boolean registerAllMethodsWithName(UnresolvedAccessCondition condition, boolean queriedOnly, boolean jniAccessible, ConfigurationType type, String methodName) { checkArguments(condition.equals(type.getCondition()), "condition is already a part of the type"); if (jniAccessible) { type.setJniAccessible(); @@ -78,7 +78,7 @@ public boolean registerAllMethodsWithName(UnresolvedConfigurationCondition condi } @Override - public boolean registerAllConstructors(UnresolvedConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, ConfigurationType type) { + public boolean registerAllConstructors(UnresolvedAccessCondition condition, boolean queriedOnly, boolean jniAccessible, ConfigurationType type) { checkArguments(condition.equals(type.getCondition()), "condition is already a part of the type"); if (jniAccessible) { type.setJniAccessible(); @@ -89,13 +89,13 @@ public boolean registerAllConstructors(UnresolvedConfigurationCondition conditio } @Override - public void registerUnsafeAllocated(UnresolvedConfigurationCondition condition, ConfigurationType type) { + public void registerUnsafeAllocated(UnresolvedAccessCondition condition, ConfigurationType type) { checkArguments(condition.equals(type.getCondition()), "condition is already a part of the type"); type.setUnsafeAllocated(); } @Override - public void registerMethod(UnresolvedConfigurationCondition condition, boolean queriedOnly, ConfigurationType type, String methodName, List methodParameterTypes, + public void registerMethod(UnresolvedAccessCondition condition, boolean queriedOnly, ConfigurationType type, String methodName, List methodParameterTypes, boolean jniAccessible) { checkArguments(condition.equals(type.getCondition()), "condition is already a part of the type"); if (jniAccessible) { @@ -106,7 +106,7 @@ public void registerMethod(UnresolvedConfigurationCondition condition, boolean q } @Override - public void registerConstructor(UnresolvedConfigurationCondition condition, boolean queriedOnly, ConfigurationType type, List methodParameterTypes, boolean jniAccessible) { + public void registerConstructor(UnresolvedAccessCondition condition, boolean queriedOnly, ConfigurationType type, List methodParameterTypes, boolean jniAccessible) { checkArguments(condition.equals(type.getCondition()), "condition is already a part of the type"); if (jniAccessible) { type.setJniAccessible(); @@ -116,43 +116,43 @@ public void registerConstructor(UnresolvedConfigurationCondition condition, bool } @Override - public void registerPublicClasses(UnresolvedConfigurationCondition condition, ConfigurationType type) { + public void registerPublicClasses(UnresolvedAccessCondition condition, ConfigurationType type) { checkArguments(condition.isAlwaysTrue() || condition.equals(type.getCondition()), "condition is already a part of the type"); type.setAllPublicClasses(); } @Override - public void registerDeclaredClasses(UnresolvedConfigurationCondition condition, ConfigurationType type) { + public void registerDeclaredClasses(UnresolvedAccessCondition condition, ConfigurationType type) { checkArguments(condition.isAlwaysTrue() || condition.equals(type.getCondition()), "condition is already a part of the type"); type.setAllDeclaredClasses(); } @Override - public void registerRecordComponents(UnresolvedConfigurationCondition condition, ConfigurationType type) { + public void registerRecordComponents(UnresolvedAccessCondition condition, ConfigurationType type) { checkArguments(condition.isAlwaysTrue() || condition.equals(type.getCondition()), "condition is already a part of the type"); type.setAllRecordComponents(); } @Override - public void registerPermittedSubclasses(UnresolvedConfigurationCondition condition, ConfigurationType type) { + public void registerPermittedSubclasses(UnresolvedAccessCondition condition, ConfigurationType type) { checkArguments(condition.isAlwaysTrue() || condition.equals(type.getCondition()), "condition is already a part of the type"); type.setAllPermittedSubclasses(); } @Override - public void registerNestMembers(UnresolvedConfigurationCondition condition, ConfigurationType type) { + public void registerNestMembers(UnresolvedAccessCondition condition, ConfigurationType type) { checkArguments(condition.isAlwaysTrue() || condition.equals(type.getCondition()), "condition is already a part of the type"); type.setAllNestMembers(); } @Override - public void registerSigners(UnresolvedConfigurationCondition condition, ConfigurationType type) { + public void registerSigners(UnresolvedAccessCondition condition, ConfigurationType type) { checkArguments(condition.isAlwaysTrue() || condition.equals(type.getCondition()), "condition is already a part of the type"); type.setAllSigners(); } @Override - public void registerPublicFields(UnresolvedConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, ConfigurationType type) { + public void registerPublicFields(UnresolvedAccessCondition condition, boolean queriedOnly, boolean jniAccessible, ConfigurationType type) { checkArguments(condition.isAlwaysTrue() || condition.equals(type.getCondition()), "condition is already a part of the type"); if (jniAccessible) { type.setJniAccessible(); @@ -161,7 +161,7 @@ public void registerPublicFields(UnresolvedConfigurationCondition condition, boo } @Override - public void registerDeclaredFields(UnresolvedConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, ConfigurationType type) { + public void registerDeclaredFields(UnresolvedAccessCondition condition, boolean queriedOnly, boolean jniAccessible, ConfigurationType type) { checkArguments(condition.isAlwaysTrue() || condition.equals(type.getCondition()), "condition is already a part of the type"); if (jniAccessible) { type.setJniAccessible(); @@ -170,7 +170,7 @@ public void registerDeclaredFields(UnresolvedConfigurationCondition condition, b } @Override - public void registerPublicMethods(UnresolvedConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, ConfigurationType type) { + public void registerPublicMethods(UnresolvedAccessCondition condition, boolean queriedOnly, boolean jniAccessible, ConfigurationType type) { checkArguments(condition.isAlwaysTrue() || condition.equals(type.getCondition()), "condition is already a part of the type"); if (jniAccessible) { type.setJniAccessible(); @@ -179,7 +179,7 @@ public void registerPublicMethods(UnresolvedConfigurationCondition condition, bo } @Override - public void registerDeclaredMethods(UnresolvedConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, ConfigurationType type) { + public void registerDeclaredMethods(UnresolvedAccessCondition condition, boolean queriedOnly, boolean jniAccessible, ConfigurationType type) { checkArguments(condition.isAlwaysTrue() || condition.equals(type.getCondition()), "condition is already a part of the type"); if (jniAccessible) { type.setJniAccessible(); @@ -188,7 +188,7 @@ public void registerDeclaredMethods(UnresolvedConfigurationCondition condition, } @Override - public void registerPublicConstructors(UnresolvedConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, ConfigurationType type) { + public void registerPublicConstructors(UnresolvedAccessCondition condition, boolean queriedOnly, boolean jniAccessible, ConfigurationType type) { checkArguments(condition.isAlwaysTrue() || condition.equals(type.getCondition()), "condition is already a part of the type"); if (jniAccessible) { type.setJniAccessible(); @@ -197,7 +197,7 @@ public void registerPublicConstructors(UnresolvedConfigurationCondition conditio } @Override - public void registerDeclaredConstructors(UnresolvedConfigurationCondition condition, boolean queriedOnly, boolean jniAccessible, ConfigurationType type) { + public void registerDeclaredConstructors(UnresolvedAccessCondition condition, boolean queriedOnly, boolean jniAccessible, ConfigurationType type) { checkArguments(condition.isAlwaysTrue() || condition.equals(type.getCondition()), "condition is already a part of the type"); if (jniAccessible) { type.setJniAccessible(); @@ -206,13 +206,13 @@ public void registerDeclaredConstructors(UnresolvedConfigurationCondition condit } @Override - public void registerAsSerializable(UnresolvedConfigurationCondition condition, ConfigurationType type) { + public void registerAsSerializable(UnresolvedAccessCondition condition, ConfigurationType type) { checkArguments(condition.isAlwaysTrue() || condition.equals(type.getCondition()), "condition is already a part of the type"); type.setSerializable(); } @Override - public void registerAsJniAccessed(UnresolvedConfigurationCondition condition, ConfigurationType type) { + public void registerAsJniAccessed(UnresolvedAccessCondition condition, ConfigurationType type) { checkArguments(condition.isAlwaysTrue() || condition.equals(type.getCondition()), "condition is already a part of the type"); type.setJniAccessible(); } diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/PredefinedClassesConfiguration.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/PredefinedClassesConfiguration.java index 7c563d6ec6b4..0c3c095893ed 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/PredefinedClassesConfiguration.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/PredefinedClassesConfiguration.java @@ -41,7 +41,7 @@ import com.oracle.svm.configure.ConfigurationParser; import com.oracle.svm.configure.ConfigurationParserOption; import com.oracle.svm.configure.PredefinedClassesConfigurationParser; -import com.oracle.svm.configure.UnresolvedConfigurationCondition; +import com.oracle.svm.configure.UnresolvedAccessCondition; import jdk.graal.compiler.phases.common.LazyValue; import jdk.graal.compiler.util.Digest; @@ -89,7 +89,7 @@ protected void removeIf(Predicate predicate) { } @Override - public void mergeConditional(UnresolvedConfigurationCondition condition, PredefinedClassesConfiguration other) { + public void mergeConditional(UnresolvedAccessCondition condition, PredefinedClassesConfiguration other) { /* Not implemented with conditions yet */ classes.putAll(other.classes); } diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ProxyConfiguration.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ProxyConfiguration.java index e9615fb7ddb7..435720e8be49 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ProxyConfiguration.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ProxyConfiguration.java @@ -37,7 +37,7 @@ import com.oracle.svm.configure.ConfigurationParser; import com.oracle.svm.configure.ConfigurationParserOption; import com.oracle.svm.configure.ProxyConfigurationParser; -import com.oracle.svm.configure.UnresolvedConfigurationCondition; +import com.oracle.svm.configure.UnresolvedAccessCondition; import com.oracle.svm.configure.config.conditional.ConfigurationConditionResolver; import jdk.graal.compiler.util.json.JsonWriter; @@ -82,21 +82,21 @@ public void subtract(ProxyConfiguration other) { } @Override - public void mergeConditional(UnresolvedConfigurationCondition condition, ProxyConfiguration other) { + public void mergeConditional(UnresolvedAccessCondition condition, ProxyConfiguration other) { for (ConditionalElement> interfaceList : other.interfaceLists) { add(condition, new ArrayList<>(interfaceList.element())); } } - public void add(UnresolvedConfigurationCondition condition, List interfaceList) { + public void add(UnresolvedAccessCondition condition, List interfaceList) { interfaceLists.add(new ConditionalElement<>(condition, interfaceList)); } - public boolean contains(UnresolvedConfigurationCondition condition, List interfaceList) { + public boolean contains(UnresolvedAccessCondition condition, List interfaceList) { return interfaceLists.contains(new ConditionalElement<>(condition, interfaceList)); } - public boolean contains(UnresolvedConfigurationCondition condition, String... interfaces) { + public boolean contains(UnresolvedAccessCondition condition, String... interfaces) { return contains(condition, Arrays.asList(interfaces)); } diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ResourceConfiguration.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ResourceConfiguration.java index 2bf93e0426dd..84952d4b28e3 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ResourceConfiguration.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ResourceConfiguration.java @@ -50,7 +50,7 @@ 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.conditional.ConfigurationConditionResolver; import com.oracle.svm.util.GlobUtils; import com.oracle.svm.util.NativeImageResourcePathRepresentation; @@ -60,7 +60,7 @@ public final class ResourceConfiguration extends ConfigurationBase { - public static class ParserAdapter implements ResourcesRegistry { + public static class ParserAdapter implements ResourcesRegistry { private final ResourceConfiguration configuration; @@ -69,12 +69,12 @@ public static class ParserAdapter implements ResourcesRegistry(condition, pattern)); } @Override - public void addGlob(UnresolvedConfigurationCondition condition, String module, String glob, Object origin) { + public void addGlob(UnresolvedAccessCondition condition, String module, String glob, Object origin) { configuration.addedGlobs.add(new ConditionalElement<>(condition, new ResourceEntry(glob, module))); } @@ -94,33 +94,33 @@ public void injectResource(Module module, String resourcePath, byte[] resourceCo } @Override - public void ignoreResources(UnresolvedConfigurationCondition condition, String pattern) { + public void ignoreResources(UnresolvedAccessCondition condition, String pattern) { configuration.ignoreResourcePattern(condition, pattern); } @Override - public void addResourceBundles(UnresolvedConfigurationCondition condition, String baseName) { + public void addResourceBundles(UnresolvedAccessCondition condition, String baseName) { configuration.addBundle(condition, baseName); } @Override - public void addResourceBundles(UnresolvedConfigurationCondition condition, String basename, Collection locales) { + public void addResourceBundles(UnresolvedAccessCondition condition, String basename, Collection locales) { configuration.addBundle(condition, basename, locales); } @Override - public void addClassBasedResourceBundle(UnresolvedConfigurationCondition condition, String basename, String className) { + public void addClassBasedResourceBundle(UnresolvedAccessCondition condition, String basename, String className) { configuration.addClassResourceBundle(condition, basename, className); } } public static final class BundleConfiguration { - public final UnresolvedConfigurationCondition condition; + public final UnresolvedAccessCondition condition; public final String baseName; public final Set locales = ConcurrentHashMap.newKeySet(); public final Set classNames = ConcurrentHashMap.newKeySet(); - private BundleConfiguration(UnresolvedConfigurationCondition condition, String baseName) { + private BundleConfiguration(UnresolvedAccessCondition condition, String baseName) { this.condition = condition; this.baseName = baseName; } @@ -194,7 +194,7 @@ protected void removeIf(Predicate predicate) { } @Override - public void mergeConditional(UnresolvedConfigurationCondition condition, ResourceConfiguration other) { + public void mergeConditional(UnresolvedAccessCondition condition, ResourceConfiguration other) { for (ConditionalElement entry : other.addedGlobs) { addedGlobs.add(new ConditionalElement<>(condition, entry.element())); } @@ -209,11 +209,11 @@ public void mergeConditional(UnresolvedConfigurationCondition condition, Resourc } } - public void addResourcePattern(UnresolvedConfigurationCondition condition, String pattern) { + public void addResourcePattern(UnresolvedAccessCondition condition, String pattern) { addedResources.add(new ConditionalElement<>(condition, pattern)); } - public void addGlobPattern(UnresolvedConfigurationCondition condition, String pattern, String module) { + public void addGlobPattern(UnresolvedAccessCondition condition, String pattern, String module) { /* * prevent patterns discovered by the agent to be written in the non-canonical form. Example * canonical path: foo/1.txt; non-canonical path: foo/bar/../1.txt @@ -289,26 +289,26 @@ private void classifyAndAddPattern(ConditionalElement entry) { } } - public void ignoreResourcePattern(UnresolvedConfigurationCondition condition, String pattern) { + public void ignoreResourcePattern(UnresolvedAccessCondition condition, String pattern) { ignoredResources.computeIfAbsent(new ConditionalElement<>(condition, pattern), p -> Pattern.compile(p.element())); } - public void addBundle(UnresolvedConfigurationCondition condition, String basename, Collection locales) { + public void addBundle(UnresolvedAccessCondition condition, String basename, Collection locales) { BundleConfiguration config = getOrCreateBundleConfig(condition, basename); for (Locale locale : locales) { config.locales.add(locale.toLanguageTag()); } } - public void addBundle(UnresolvedConfigurationCondition condition, String baseName) { + public void addBundle(UnresolvedAccessCondition condition, String baseName) { getOrCreateBundleConfig(condition, baseName); } - private void addClassResourceBundle(UnresolvedConfigurationCondition condition, String basename, String className) { + private void addClassResourceBundle(UnresolvedAccessCondition condition, String basename, String className) { getOrCreateBundleConfig(condition, basename).classNames.add(className); } - private BundleConfiguration getOrCreateBundleConfig(UnresolvedConfigurationCondition condition, String baseName) { + private BundleConfiguration getOrCreateBundleConfig(UnresolvedAccessCondition condition, String baseName) { ConditionalElement key = new ConditionalElement<>(condition, baseName); return bundles.computeIfAbsent(key, cond -> new BundleConfiguration(condition, baseName)); } @@ -333,7 +333,7 @@ public boolean anyResourceMatches(String s) { return false; } - public boolean anyBundleMatches(UnresolvedConfigurationCondition condition, String bundleName) { + public boolean anyBundleMatches(UnresolvedAccessCondition condition, String bundleName) { return bundles.containsKey(new ConditionalElement<>(condition, bundleName)); } diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfiguration.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfiguration.java index 936a91fad1ef..245fc9eda5ea 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfiguration.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfiguration.java @@ -40,7 +40,7 @@ import com.oracle.svm.configure.ConfigurationParser; import com.oracle.svm.configure.ConfigurationParserOption; import com.oracle.svm.configure.SerializationConfigurationParser; -import com.oracle.svm.configure.UnresolvedConfigurationCondition; +import com.oracle.svm.configure.UnresolvedAccessCondition; import com.oracle.svm.configure.config.conditional.ConfigurationConditionResolver; import jdk.graal.compiler.java.LambdaUtils; @@ -48,7 +48,7 @@ import jdk.graal.compiler.util.json.JsonWriter; public final class SerializationConfiguration extends ConfigurationBase - implements RuntimeSerializationSupport { + implements RuntimeSerializationSupport { private final Set serializations = ConcurrentHashMap.newKeySet(); private final Set lambdaSerializationCapturingTypes = ConcurrentHashMap.newKeySet(); @@ -99,13 +99,13 @@ protected void removeIf(Predicate predicate) { } @Override - public void mergeConditional(UnresolvedConfigurationCondition condition, SerializationConfiguration other) { + public void mergeConditional(UnresolvedAccessCondition condition, SerializationConfiguration other) { for (SerializationConfigurationType type : other.serializations) { serializations.add(new SerializationConfigurationType(condition, type.getQualifiedJavaName())); } } - public boolean contains(UnresolvedConfigurationCondition condition, String serializationTargetClass) { + public boolean contains(UnresolvedAccessCondition condition, String serializationTargetClass) { return serializations.contains(createConfigurationType(condition, serializationTargetClass)) || lambdaSerializationCapturingTypes.contains(createLambdaCapturingClassConfigurationType(condition, serializationTargetClass)); } @@ -147,27 +147,27 @@ private void printProxies(JsonWriter writer) throws IOException { } @Override - public void registerIncludingAssociatedClasses(UnresolvedConfigurationCondition condition, Class clazz) { + public void registerIncludingAssociatedClasses(UnresolvedAccessCondition condition, Class clazz) { register(condition, clazz); } @Override - public void register(UnresolvedConfigurationCondition condition, Class clazz) { + public void register(UnresolvedAccessCondition condition, Class clazz) { register(condition, clazz.getName()); } @Override - public void register(UnresolvedConfigurationCondition condition, String className) { + public void register(UnresolvedAccessCondition condition, String className) { serializations.add(createConfigurationType(condition, className)); } @Override - public void registerLambdaCapturingClass(UnresolvedConfigurationCondition condition, String lambdaCapturingClassName) { + public void registerLambdaCapturingClass(UnresolvedAccessCondition condition, String lambdaCapturingClassName) { lambdaSerializationCapturingTypes.add(createLambdaCapturingClassConfigurationType(condition, lambdaCapturingClassName.split(LambdaUtils.LAMBDA_SPLIT_PATTERN)[0])); } @Override - public void registerProxyClass(UnresolvedConfigurationCondition condition, List implementedInterfaces) { + public void registerProxyClass(UnresolvedAccessCondition condition, List implementedInterfaces) { interfaceListsSerializableProxies.add(new ConditionalElement<>(condition, implementedInterfaces)); } @@ -176,12 +176,12 @@ public boolean isEmpty() { return serializations.isEmpty() && lambdaSerializationCapturingTypes.isEmpty() && interfaceListsSerializableProxies.isEmpty(); } - private static SerializationConfigurationType createConfigurationType(UnresolvedConfigurationCondition condition, String className) { + private static SerializationConfigurationType createConfigurationType(UnresolvedAccessCondition condition, String className) { String convertedClassName = SignatureUtil.toInternalClassName(className); return new SerializationConfigurationType(condition, convertedClassName); } - private static SerializationConfigurationLambdaCapturingType createLambdaCapturingClassConfigurationType(UnresolvedConfigurationCondition condition, String className) { + private static SerializationConfigurationLambdaCapturingType createLambdaCapturingClassConfigurationType(UnresolvedAccessCondition condition, String className) { String convertedClassName = SignatureUtil.toInternalClassName(className); return new SerializationConfigurationLambdaCapturingType(condition, convertedClassName); } diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfigurationLambdaCapturingType.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfigurationLambdaCapturingType.java index c4b618e7de69..1adec36cab12 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfigurationLambdaCapturingType.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfigurationLambdaCapturingType.java @@ -28,16 +28,16 @@ import java.util.Objects; import com.oracle.svm.configure.SerializationConfigurationParser; -import com.oracle.svm.configure.UnresolvedConfigurationCondition; +import com.oracle.svm.configure.UnresolvedAccessCondition; import jdk.graal.compiler.util.json.JsonPrintable; import jdk.graal.compiler.util.json.JsonWriter; public class SerializationConfigurationLambdaCapturingType implements JsonPrintable, Comparable { - private final UnresolvedConfigurationCondition condition; + private final UnresolvedAccessCondition condition; private final String qualifiedJavaName; - public SerializationConfigurationLambdaCapturingType(UnresolvedConfigurationCondition condition, String qualifiedJavaName) { + public SerializationConfigurationLambdaCapturingType(UnresolvedAccessCondition condition, String qualifiedJavaName) { assert qualifiedJavaName.indexOf('/') == -1 : "Requires qualified Java name, not the internal representation"; Objects.requireNonNull(condition); this.condition = condition; @@ -45,7 +45,7 @@ public SerializationConfigurationLambdaCapturingType(UnresolvedConfigurationCond this.qualifiedJavaName = qualifiedJavaName; } - public UnresolvedConfigurationCondition getCondition() { + public UnresolvedAccessCondition getCondition() { return condition; } diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfigurationType.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfigurationType.java index f4c8c953002c..2d86abf60b8f 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfigurationType.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfigurationType.java @@ -30,16 +30,16 @@ import java.io.IOException; import java.util.Objects; -import com.oracle.svm.configure.UnresolvedConfigurationCondition; +import com.oracle.svm.configure.UnresolvedAccessCondition; import jdk.graal.compiler.util.json.JsonPrintable; import jdk.graal.compiler.util.json.JsonWriter; public class SerializationConfigurationType implements JsonPrintable, Comparable { - private final UnresolvedConfigurationCondition condition; + private final UnresolvedAccessCondition condition; private final String qualifiedJavaName; - public SerializationConfigurationType(UnresolvedConfigurationCondition condition, String qualifiedJavaName) { + public SerializationConfigurationType(UnresolvedAccessCondition condition, String qualifiedJavaName) { assert qualifiedJavaName.indexOf('/') == -1 : "Requires qualified Java name, not the internal representation"; assert !qualifiedJavaName.startsWith("[") : "Requires Java source array syntax, for example java.lang.String[]"; Objects.requireNonNull(condition); @@ -52,7 +52,7 @@ public String getQualifiedJavaName() { return qualifiedJavaName; } - public UnresolvedConfigurationCondition getCondition() { + public UnresolvedAccessCondition getCondition() { return condition; } diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/TypeConfiguration.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/TypeConfiguration.java index 514ebd3602c1..2334f449f0b1 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/TypeConfiguration.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/TypeConfiguration.java @@ -37,7 +37,7 @@ import com.oracle.svm.configure.ConfigurationParserOption; import com.oracle.svm.configure.ConfigurationTypeDescriptor; import com.oracle.svm.configure.ReflectionConfigurationParser; -import com.oracle.svm.configure.UnresolvedConfigurationCondition; +import com.oracle.svm.configure.UnresolvedAccessCondition; import com.oracle.svm.configure.config.conditional.ConfigurationConditionResolver; import jdk.graal.compiler.util.json.JsonPrinter; @@ -95,7 +95,7 @@ protected void removeIf(Predicate predicate) { types.entrySet().removeIf(entry -> predicate.testIncludedType(entry.getKey(), entry.getValue())); } - public ConfigurationType get(UnresolvedConfigurationCondition condition, ConfigurationTypeDescriptor typeDescriptor) { + public ConfigurationType get(UnresolvedAccessCondition condition, ConfigurationTypeDescriptor typeDescriptor) { return types.get(new ConditionalElement<>(condition, typeDescriptor)); } @@ -117,12 +117,12 @@ public void addOrMerge(ConfigurationType type) { }); } - public ConfigurationType getOrCreateType(UnresolvedConfigurationCondition condition, ConfigurationTypeDescriptor typeDescriptor) { + public ConfigurationType getOrCreateType(UnresolvedAccessCondition condition, ConfigurationTypeDescriptor typeDescriptor) { return types.computeIfAbsent(new ConditionalElement<>(condition, typeDescriptor), p -> new ConfigurationType(p.condition(), p.element(), true)); } @Override - public void mergeConditional(UnresolvedConfigurationCondition condition, TypeConfiguration other) { + public void mergeConditional(UnresolvedAccessCondition condition, TypeConfiguration other) { other.types.forEach((key, value) -> { addOrMerge(new ConfigurationType(value, condition)); }); diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/ConditionalConfigurationComputer.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/ConditionalConfigurationComputer.java index 4c0a45344343..815a11419676 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/ConditionalConfigurationComputer.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/ConditionalConfigurationComputer.java @@ -35,7 +35,7 @@ import com.oracle.svm.configure.ConfigurationBase; import com.oracle.svm.configure.ConfigurationFile; import com.oracle.svm.configure.NamedConfigurationTypeDescriptor; -import com.oracle.svm.configure.UnresolvedConfigurationCondition; +import com.oracle.svm.configure.UnresolvedAccessCondition; import com.oracle.svm.configure.config.ConfigurationSet; import com.oracle.svm.configure.filters.ComplexFilter; @@ -199,7 +199,7 @@ private ConfigurationSet inferConditionalConfiguration(Map node.configuration.equals(configurationToAdd)) : "The "; for (MethodCallNode node : list) { String className = node.methodInfo.getJavaDeclaringClassName(); - UnresolvedConfigurationCondition condition = UnresolvedConfigurationCondition.create(NamedConfigurationTypeDescriptor.fromJSONName(className)); + UnresolvedAccessCondition condition = UnresolvedAccessCondition.create(NamedConfigurationTypeDescriptor.fromJSONName(className)); var resolvedCondition = ConfigurationConditionResolver.identityResolver().resolveCondition(condition); addConfigurationWithCondition(configurationSet, node.configuration, resolvedCondition.get()); } @@ -219,14 +219,14 @@ private ConfigurationSet inferConditionalConfiguration(Map> void mergeWithCondition(ConfigurationSet destConfigSet, ConfigurationSet srcConfigSet, UnresolvedConfigurationCondition condition, + private static > void mergeWithCondition(ConfigurationSet destConfigSet, ConfigurationSet srcConfigSet, UnresolvedAccessCondition condition, ConfigurationFile configType) { T destConfig = destConfigSet.getConfiguration(configType); T srcConfig = srcConfigSet.getConfiguration(configType); destConfig.mergeConditional(condition, srcConfig); } - private static void addConfigurationWithCondition(ConfigurationSet destConfigSet, ConfigurationSet srcConfigSet, UnresolvedConfigurationCondition condition) { + private static void addConfigurationWithCondition(ConfigurationSet destConfigSet, ConfigurationSet srcConfigSet, UnresolvedAccessCondition condition) { for (ConfigurationFile configType : ConfigurationFile.agentGeneratedFiles()) { mergeWithCondition(destConfigSet, srcConfigSet, condition, configType); } diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/ConditionalConfigurationPredicate.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/ConditionalConfigurationPredicate.java index cf3094966743..be39fd35a2d7 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/ConditionalConfigurationPredicate.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/ConditionalConfigurationPredicate.java @@ -29,7 +29,7 @@ import com.oracle.svm.configure.ConditionalElement; import com.oracle.svm.configure.ConfigurationTypeDescriptor; -import com.oracle.svm.configure.UnresolvedConfigurationCondition; +import com.oracle.svm.configure.UnresolvedAccessCondition; import com.oracle.svm.configure.config.ConfigurationPredefinedClass; import com.oracle.svm.configure.config.ConfigurationType; import com.oracle.svm.configure.config.ForeignConfiguration; @@ -92,7 +92,7 @@ public boolean testPredefinedClass(ConfigurationPredefinedClass clazz) { return clazz.getNameInfo() != null && !filter.includes(clazz.getNameInfo()); } - private boolean testTypeDescriptor(UnresolvedConfigurationCondition condition, ConfigurationTypeDescriptor typeDescriptor) { + private boolean testTypeDescriptor(UnresolvedAccessCondition condition, ConfigurationTypeDescriptor typeDescriptor) { if (!filter.includes(condition.getTypeName())) { return true; } diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/ConfigurationConditionResolver.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/ConfigurationConditionResolver.java index 5070694d648d..d7594d41b021 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/ConfigurationConditionResolver.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/ConfigurationConditionResolver.java @@ -24,26 +24,26 @@ */ package com.oracle.svm.configure.config.conditional; -import com.oracle.svm.configure.UnresolvedConfigurationCondition; +import com.oracle.svm.configure.UnresolvedAccessCondition; import com.oracle.svm.util.TypeResult; public interface ConfigurationConditionResolver { - static ConfigurationConditionResolver identityResolver() { + static ConfigurationConditionResolver identityResolver() { return new ConfigurationConditionResolver<>() { @Override - public TypeResult resolveCondition(UnresolvedConfigurationCondition unresolvedCondition) { + public TypeResult resolveCondition(UnresolvedAccessCondition unresolvedCondition) { return TypeResult.forType(unresolvedCondition.getTypeName(), unresolvedCondition); } @Override - public UnresolvedConfigurationCondition alwaysTrue() { - return UnresolvedConfigurationCondition.alwaysTrue(); + public UnresolvedAccessCondition alwaysTrue() { + return UnresolvedAccessCondition.alwaysTrue(); } }; } - TypeResult resolveCondition(UnresolvedConfigurationCondition unresolvedCondition); + TypeResult resolveCondition(UnresolvedAccessCondition unresolvedCondition); T alwaysTrue(); } diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/trace/JniProcessor.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/trace/JniProcessor.java index 2b32481f7b99..1758bebf0b8f 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/trace/JniProcessor.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/trace/JniProcessor.java @@ -34,7 +34,7 @@ import com.oracle.svm.configure.ClassNameSupport; 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.ConfigurationMemberInfo.ConfigurationMemberDeclaration; import com.oracle.svm.configure.config.ConfigurationMethod; import com.oracle.svm.configure.config.ConfigurationSet; @@ -54,7 +54,7 @@ class JniProcessor extends AbstractProcessor { @Override @SuppressWarnings("fallthrough") void processEntry(EconomicMap entry, ConfigurationSet configurationSet) { - UnresolvedConfigurationCondition condition = UnresolvedConfigurationCondition.alwaysTrue(); + UnresolvedAccessCondition condition = UnresolvedAccessCondition.alwaysTrue(); boolean invalidResult = Boolean.FALSE.equals(entry.get("result")); if (invalidResult) { return; @@ -176,7 +176,7 @@ void processEntry(EconomicMap entry, ConfigurationSet configurat } } - private static ConfigurationType getOrCreateJniAccessibleType(TypeConfiguration config, UnresolvedConfigurationCondition condition, ConfigurationTypeDescriptor typeName) { + private static ConfigurationType getOrCreateJniAccessibleType(TypeConfiguration config, UnresolvedAccessCondition condition, ConfigurationTypeDescriptor typeName) { ConfigurationType type = config.getOrCreateType(condition, typeName); type.setJniAccessible(); return type; diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/trace/ReflectionProcessor.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/trace/ReflectionProcessor.java index 5d1daa89bbad..cbeddb144a9c 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/trace/ReflectionProcessor.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/trace/ReflectionProcessor.java @@ -36,7 +36,7 @@ import com.oracle.svm.configure.ConfigurationTypeDescriptor; import com.oracle.svm.configure.NamedConfigurationTypeDescriptor; import com.oracle.svm.configure.ProxyConfigurationTypeDescriptor; -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; import com.oracle.svm.configure.config.ConfigurationMethod; @@ -65,7 +65,7 @@ public void setTrackReflectionMetadata(boolean trackReflectionMetadata) { @SuppressWarnings("fallthrough") public void processEntry(EconomicMap entry, ConfigurationSet configurationSet) { boolean invalidResult = Boolean.FALSE.equals(entry.get("result")); - UnresolvedConfigurationCondition condition = UnresolvedConfigurationCondition.alwaysTrue(); + UnresolvedAccessCondition condition = UnresolvedAccessCondition.alwaysTrue(); if (invalidResult) { return; } @@ -311,7 +311,7 @@ private static void addFullyQualifiedDeclaredMethod(String descriptor, TypeConfi String qualifiedClass = descriptor.substring(0, classend); String methodName = descriptor.substring(classend + 1, sigbegin); String signature = descriptor.substring(sigbegin); - configuration.getOrCreateType(UnresolvedConfigurationCondition.alwaysTrue(), NamedConfigurationTypeDescriptor.fromReflectionName(qualifiedClass)) + configuration.getOrCreateType(UnresolvedAccessCondition.alwaysTrue(), NamedConfigurationTypeDescriptor.fromReflectionName(qualifiedClass)) .addMethod(methodName, signature, ConfigurationMemberDeclaration.DECLARED); } @@ -322,7 +322,7 @@ private void addDynamicProxy(List interfaceList, LazyValue callerClas return; } } - configuration.getOrCreateType(UnresolvedConfigurationCondition.alwaysTrue(), typeDescriptor); + configuration.getOrCreateType(UnresolvedAccessCondition.alwaysTrue(), typeDescriptor); } private void addDynamicProxyUnchecked(List checkedInterfaceList, List uncheckedInterfaceList, LazyValue callerClass, TypeConfiguration configuration, @@ -340,7 +340,7 @@ private void addDynamicProxyUnchecked(List checkedInterfaceList, List unch List interfaces = new ArrayList<>(); interfaces.addAll(checkedInterfaces); interfaces.addAll(uncheckedInterfaces); - configuration.getOrCreateType(UnresolvedConfigurationCondition.alwaysTrue(), descriptorForClass(interfaces)); + configuration.getOrCreateType(UnresolvedAccessCondition.alwaysTrue(), descriptorForClass(interfaces)); } } diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/trace/SerializationProcessor.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/trace/SerializationProcessor.java index f0278cd5ecfa..e33fd1ec6892 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/trace/SerializationProcessor.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/trace/SerializationProcessor.java @@ -32,7 +32,7 @@ import org.graalvm.collections.EconomicMap; import com.oracle.svm.configure.NamedConfigurationTypeDescriptor; -import com.oracle.svm.configure.UnresolvedConfigurationCondition; +import com.oracle.svm.configure.UnresolvedAccessCondition; import com.oracle.svm.configure.config.ConfigurationSet; import com.oracle.svm.configure.config.SerializationConfiguration; import com.oracle.svm.configure.config.TypeConfiguration; @@ -53,7 +53,7 @@ void processEntry(EconomicMap entry, ConfigurationSet configurat if (invalidResult) { return; } - UnresolvedConfigurationCondition condition = UnresolvedConfigurationCondition.alwaysTrue(); + UnresolvedAccessCondition condition = UnresolvedAccessCondition.alwaysTrue(); String function = (String) entry.get("function"); List args = (List) entry.get("args"); SerializationConfiguration serializationConfiguration = configurationSet.getSerializationConfiguration(); diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/metadata/MetadataTracer.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/metadata/MetadataTracer.java index a7e8e770b9f6..bbcfde364ad1 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/metadata/MetadataTracer.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/metadata/MetadataTracer.java @@ -40,7 +40,7 @@ import com.oracle.svm.configure.ConfigurationTypeDescriptor; import com.oracle.svm.configure.NamedConfigurationTypeDescriptor; import com.oracle.svm.configure.ProxyConfigurationTypeDescriptor; -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.ConfigurationSet; import com.oracle.svm.configure.config.ConfigurationType; @@ -125,7 +125,7 @@ private ConfigurationType traceReflectionTypeImpl(ConfigurationTypeDescriptor ty assert enabled(); ConfigurationSet configurationSet = config; if (configurationSet != null) { - return configurationSet.getReflectionConfiguration().getOrCreateType(UnresolvedConfigurationCondition.alwaysTrue(), typeDescriptor); + return configurationSet.getReflectionConfiguration().getOrCreateType(UnresolvedAccessCondition.alwaysTrue(), typeDescriptor); } return null; } @@ -152,7 +152,7 @@ public void traceResource(String resourceName, String moduleName) { assert enabled(); ConfigurationSet configurationSet = config; if (configurationSet != null) { - configurationSet.getResourceConfiguration().addGlobPattern(UnresolvedConfigurationCondition.alwaysTrue(), resourceName, moduleName); + configurationSet.getResourceConfiguration().addGlobPattern(UnresolvedAccessCondition.alwaysTrue(), resourceName, moduleName); } } @@ -163,7 +163,7 @@ public void traceResourceBundle(String baseName) { assert enabled(); ConfigurationSet configurationSet = config; if (configurationSet != null) { - configurationSet.getResourceConfiguration().addBundle(UnresolvedConfigurationCondition.alwaysTrue(), baseName, List.of()); + configurationSet.getResourceConfiguration().addBundle(UnresolvedAccessCondition.alwaysTrue(), baseName, List.of()); } } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/NativeImageConditionResolver.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/NativeImageConditionResolver.java index 717f84b21573..677e2f25c9d5 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/NativeImageConditionResolver.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/NativeImageConditionResolver.java @@ -28,7 +28,7 @@ import org.graalvm.nativeimage.impl.TypeReachabilityCondition; import com.oracle.svm.configure.ClassNameSupport; -import com.oracle.svm.configure.UnresolvedConfigurationCondition; +import com.oracle.svm.configure.UnresolvedAccessCondition; import com.oracle.svm.configure.config.conditional.ConfigurationConditionResolver; import com.oracle.svm.hosted.ImageClassLoader; import com.oracle.svm.hosted.classinitialization.ClassInitializationSupport; @@ -44,7 +44,7 @@ public NativeImageConditionResolver(ImageClassLoader classLoader, ClassInitializ } @Override - public TypeResult resolveCondition(UnresolvedConfigurationCondition unresolvedCondition) { + public TypeResult resolveCondition(UnresolvedAccessCondition unresolvedCondition) { String reflectionName = ClassNameSupport.typeNameToReflectionName(unresolvedCondition.getTypeName()); TypeResult> clazz = classLoader.findClass(reflectionName); return clazz.map(type -> {