Skip to content

Commit 8e0542b

Browse files
committed
Treat "name" entries in legacy configuration files like "type" in reachability-metadata.json
1 parent 19d6503 commit 8e0542b

File tree

3 files changed

+32
-26
lines changed

3 files changed

+32
-26
lines changed

substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/LegacyReflectionConfigurationParser.java

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -76,19 +76,19 @@ protected void parseClass(EconomicMap<String, Object> data) {
7676
*/
7777
boolean isType = type.get().definedAsType();
7878

79-
UnresolvedConfigurationCondition unresolvedCondition = parseCondition(data, isType);
79+
UnresolvedConfigurationCondition unresolvedCondition = parseCondition(data, false);
8080
TypeResult<C> conditionResult = conditionResolver.resolveCondition(unresolvedCondition);
8181
if (!conditionResult.isPresent()) {
8282
return;
8383
}
8484

85-
boolean jniAccessible = checkOption(ConfigurationParserOption.JNI_PARSER);
85+
boolean jniParser = checkOption(ConfigurationParserOption.JNI_PARSER);
8686
/*
8787
* Even if primitives cannot be queried through Class.forName, they can be registered to
8888
* allow getDeclaredMethods() and similar bulk queries at run time.
8989
*/
9090
C condition = conditionResult.get();
91-
TypeResult<T> result = delegate.resolveType(condition, typeDescriptor, true, jniAccessible);
91+
TypeResult<T> result = delegate.resolveType(condition, typeDescriptor, true, jniParser);
9292
if (!result.isPresent()) {
9393
handleMissingElement("Could not resolve " + typeDescriptor + " for reflection configuration.", result.getException());
9494
return;
@@ -98,29 +98,29 @@ protected void parseClass(EconomicMap<String, Object> data) {
9898
T clazz = result.get();
9999
delegate.registerType(conditionResult.get(), clazz);
100100

101-
registerIfNotDefault(data, false, clazz, "allDeclaredConstructors", () -> delegate.registerDeclaredConstructors(condition, false, jniAccessible, clazz));
102-
registerIfNotDefault(data, false, clazz, "allPublicConstructors", () -> delegate.registerPublicConstructors(condition, false, jniAccessible, clazz));
103-
registerIfNotDefault(data, false, clazz, "allDeclaredMethods", () -> delegate.registerDeclaredMethods(condition, false, jniAccessible, clazz));
104-
registerIfNotDefault(data, false, clazz, "allPublicMethods", () -> delegate.registerPublicMethods(condition, false, jniAccessible, clazz));
105-
registerIfNotDefault(data, false, clazz, "allDeclaredFields", () -> delegate.registerDeclaredFields(condition, false, jniAccessible, clazz));
106-
registerIfNotDefault(data, false, clazz, "allPublicFields", () -> delegate.registerPublicFields(condition, false, jniAccessible, clazz));
107-
registerIfNotDefault(data, isType, clazz, "allDeclaredClasses", () -> delegate.registerDeclaredClasses(queryCondition, clazz));
108-
registerIfNotDefault(data, isType, clazz, "allRecordComponents", () -> delegate.registerRecordComponents(queryCondition, clazz));
109-
registerIfNotDefault(data, isType, clazz, "allPermittedSubclasses", () -> delegate.registerPermittedSubclasses(queryCondition, clazz));
110-
registerIfNotDefault(data, isType, clazz, "allNestMembers", () -> delegate.registerNestMembers(queryCondition, clazz));
111-
registerIfNotDefault(data, isType, clazz, "allSigners", () -> delegate.registerSigners(queryCondition, clazz));
112-
registerIfNotDefault(data, isType, clazz, "allPublicClasses", () -> delegate.registerPublicClasses(queryCondition, clazz));
113-
registerIfNotDefault(data, isType, clazz, "queryAllDeclaredConstructors", () -> delegate.registerDeclaredConstructors(queryCondition, true, jniAccessible, clazz));
114-
registerIfNotDefault(data, isType, clazz, "queryAllPublicConstructors", () -> delegate.registerPublicConstructors(queryCondition, true, jniAccessible, clazz));
115-
registerIfNotDefault(data, isType, clazz, "queryAllDeclaredMethods", () -> delegate.registerDeclaredMethods(queryCondition, true, jniAccessible, clazz));
116-
registerIfNotDefault(data, isType, clazz, "queryAllPublicMethods", () -> delegate.registerPublicMethods(queryCondition, true, jniAccessible, clazz));
101+
registerIfNotDefault(data, false, clazz, "allDeclaredConstructors", () -> delegate.registerDeclaredConstructors(condition, false, jniParser, clazz));
102+
registerIfNotDefault(data, false, clazz, "allPublicConstructors", () -> delegate.registerPublicConstructors(condition, false, jniParser, clazz));
103+
registerIfNotDefault(data, false, clazz, "allDeclaredMethods", () -> delegate.registerDeclaredMethods(condition, false, jniParser, clazz));
104+
registerIfNotDefault(data, false, clazz, "allPublicMethods", () -> delegate.registerPublicMethods(condition, false, jniParser, clazz));
105+
registerIfNotDefault(data, false, clazz, "allDeclaredFields", () -> delegate.registerDeclaredFields(condition, false, jniParser, clazz));
106+
registerIfNotDefault(data, false, clazz, "allPublicFields", () -> delegate.registerPublicFields(condition, false, jniParser, clazz));
107+
registerIfNotDefault(data, !jniParser && isType, clazz, "allDeclaredClasses", () -> delegate.registerDeclaredClasses(queryCondition, clazz));
108+
registerIfNotDefault(data, !jniParser && isType, clazz, "allRecordComponents", () -> delegate.registerRecordComponents(queryCondition, clazz));
109+
registerIfNotDefault(data, !jniParser && isType, clazz, "allPermittedSubclasses", () -> delegate.registerPermittedSubclasses(queryCondition, clazz));
110+
registerIfNotDefault(data, !jniParser && isType, clazz, "allNestMembers", () -> delegate.registerNestMembers(queryCondition, clazz));
111+
registerIfNotDefault(data, !jniParser && isType, clazz, "allSigners", () -> delegate.registerSigners(queryCondition, clazz));
112+
registerIfNotDefault(data, !jniParser && isType, clazz, "allPublicClasses", () -> delegate.registerPublicClasses(queryCondition, clazz));
113+
registerIfNotDefault(data, isType, clazz, "queryAllDeclaredConstructors", () -> delegate.registerDeclaredConstructors(queryCondition, true, jniParser, clazz));
114+
registerIfNotDefault(data, isType, clazz, "queryAllPublicConstructors", () -> delegate.registerPublicConstructors(queryCondition, true, jniParser, clazz));
115+
registerIfNotDefault(data, isType, clazz, "queryAllDeclaredMethods", () -> delegate.registerDeclaredMethods(queryCondition, true, jniParser, clazz));
116+
registerIfNotDefault(data, isType, clazz, "queryAllPublicMethods", () -> delegate.registerPublicMethods(queryCondition, true, jniParser, clazz));
117117
if (isType) {
118118
/*
119119
* Fields cannot be registered as queried only by the user, we register them
120120
* unconditionally if the class is registered via "type".
121121
*/
122-
delegate.registerDeclaredFields(queryCondition, true, jniAccessible, clazz);
123-
delegate.registerPublicFields(queryCondition, true, jniAccessible, clazz);
122+
delegate.registerDeclaredFields(queryCondition, true, jniParser, clazz);
123+
delegate.registerPublicFields(queryCondition, true, jniParser, clazz);
124124
}
125125
registerIfNotDefault(data, false, clazz, "unsafeAllocated", () -> delegate.registerUnsafeAllocated(condition, clazz));
126126
MapCursor<String, Object> cursor = data.getEntries();
@@ -130,13 +130,13 @@ protected void parseClass(EconomicMap<String, Object> data) {
130130
try {
131131
switch (name) {
132132
case "methods":
133-
parseMethods(condition, false, asList(value, "Attribute 'methods' must be an array of method descriptors"), clazz, jniAccessible);
133+
parseMethods(condition, false, asList(value, "Attribute 'methods' must be an array of method descriptors"), clazz, jniParser);
134134
break;
135135
case "queriedMethods":
136-
parseMethods(condition, true, asList(value, "Attribute 'queriedMethods' must be an array of method descriptors"), clazz, jniAccessible);
136+
parseMethods(condition, true, asList(value, "Attribute 'queriedMethods' must be an array of method descriptors"), clazz, jniParser);
137137
break;
138138
case "fields":
139-
parseFields(condition, asList(value, "Attribute 'fields' must be an array of field descriptors"), clazz, jniAccessible);
139+
parseFields(condition, asList(value, "Attribute 'fields' must be an array of field descriptors"), clazz, jniParser);
140140
break;
141141
}
142142
} catch (LinkageError e) {

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/FutureDefaultsOptions.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,11 @@ public class FutureDefaultsOptions {
5353
private static final String ALL_NAME = "all";
5454
private static final String NONE_NAME = "none";
5555
private static final String RUN_TIME_INITIALIZE_JDK_NAME = "run-time-initialized-jdk";
56+
private static final String TREAT_NAME_AS_TYPE_NAME = "treat-name-as-type";
5657

5758
public static final String RUN_TIME_INITIALIZE_JDK_REASON = "Initialize JDK classes at run time (--" + OPTION_NAME + " includes " + RUN_TIME_INITIALIZE_JDK_NAME + ")";
5859

59-
private static final Set<String> ALL_VALUES = Set.of(RUN_TIME_INITIALIZE_JDK_NAME, ALL_NAME, NONE_NAME);
60+
private static final Set<String> ALL_VALUES = Set.of(RUN_TIME_INITIALIZE_JDK_NAME, TREAT_NAME_AS_TYPE_NAME, ALL_NAME, NONE_NAME);
6061

6162
private static String futureDefaultsAllValues() {
6263
return StringUtil.joinSingleQuoted(ALL_VALUES);
@@ -118,4 +119,8 @@ public static boolean allFutureDefaults() {
118119
public static boolean isJDKInitializedAtRunTime() {
119120
return allFutureDefaults() || getFutureDefaults().contains(RUN_TIME_INITIALIZE_JDK_NAME);
120121
}
122+
123+
public static boolean treatNameAsType() {
124+
return allFutureDefaults() || getFutureDefaults().contains(TREAT_NAME_AS_TYPE_NAME);
125+
}
121126
}

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/configure/ConfigurationFiles.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141

4242
import com.oracle.svm.configure.ConfigurationFile;
4343
import com.oracle.svm.configure.ConfigurationParserOption;
44+
import com.oracle.svm.core.FutureDefaultsOptions;
4445
import com.oracle.svm.core.option.AccumulatingLocatableMultiOptionValue;
4546
import com.oracle.svm.core.option.BundleMember;
4647
import com.oracle.svm.core.option.HostedOptionKey;
@@ -190,7 +191,7 @@ public static EnumSet<ConfigurationParserOption> getConfigurationParserOptions()
190191
if (TreatAllTypeReachableConditionsAsTypeReached.getValue()) {
191192
result.add(ConfigurationParserOption.TREAT_ALL_TYPE_REACHABLE_CONDITIONS_AS_TYPE_REACHED);
192193
}
193-
if (TreatAllNameEntriesAsType.getValue()) {
194+
if (TreatAllNameEntriesAsType.getValue() || FutureDefaultsOptions.treatNameAsType()) {
194195
result.add(ConfigurationParserOption.TREAT_ALL_NAME_ENTRIES_AS_TYPE);
195196
}
196197
return result;

0 commit comments

Comments
 (0)