Skip to content

Commit 1d0c403

Browse files
committed
Consider all types as registered for JNI
1 parent f999f5c commit 1d0c403

File tree

5 files changed

+23
-11
lines changed

5 files changed

+23
-11
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ final class LegacyReflectionConfigurationParser<C, T> extends ReflectionConfigur
4747

4848
LegacyReflectionConfigurationParser(ConfigurationConditionResolver<C> conditionResolver, ReflectionConfigurationParserDelegate<C, T> delegate, boolean strictConfiguration,
4949
boolean printMissingElements, boolean treatAllNameEntriesAsType) {
50-
super(conditionResolver, delegate, strictConfiguration, printMissingElements);
50+
super(conditionResolver, delegate, strictConfiguration, printMissingElements, "");
5151
this.treatAllNameEntriesAsType = treatAllNameEntriesAsType;
5252
}
5353

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

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,16 @@ public abstract class ReflectionConfigurationParser<C, T> extends ConfigurationP
4747

4848
protected final ConfigurationConditionResolver<C> conditionResolver;
4949
protected final ReflectionConfigurationParserDelegate<C, T> delegate;
50+
protected final String combinedFileKey;
5051
private final boolean printMissingElements;
5152

5253
public ReflectionConfigurationParser(ConfigurationConditionResolver<C> conditionResolver, ReflectionConfigurationParserDelegate<C, T> delegate, boolean strictConfiguration,
53-
boolean printMissingElements) {
54+
boolean printMissingElements, String combinedFileKey) {
5455
super(strictConfiguration);
5556
this.conditionResolver = conditionResolver;
5657
this.printMissingElements = printMissingElements;
5758
this.delegate = delegate;
59+
this.combinedFileKey = combinedFileKey;
5860
}
5961

6062
public static <C, T> ReflectionConfigurationParser<C, T> create(String combinedFileKey, boolean strictMetadata,
@@ -76,8 +78,8 @@ protected void parseClassArray(List<Object> classes) {
7678
protected abstract void parseClass(EconomicMap<String, Object> data);
7779

7880
protected void registerIfNotDefault(EconomicMap<String, Object> data, boolean defaultValue, T clazz, String propertyName, Runnable register) {
79-
if (data.containsKey(propertyName)) {
80-
RuntimeReflectionSupport.increaseCount(false);
81+
if (data.containsKey(propertyName) && delegate.getClass().getName().contains("ReflectionRegistryAdapter")) {
82+
RuntimeReflectionSupport.increaseCount(combinedFileKey.equals(REFLECTION_KEY));
8183
}
8284
if (data.containsKey(propertyName) ? asBoolean(data.get(propertyName), propertyName) : defaultValue) {
8385
try {
@@ -96,7 +98,9 @@ protected void parseFields(C condition, List<Object> fields, T clazz) {
9698

9799
private void parseField(C condition, EconomicMap<String, Object> data, T clazz) {
98100
checkAttributes(data, "reflection field descriptor object", Collections.singleton("name"), Arrays.asList("allowWrite", "allowUnsafeAccess"));
99-
RuntimeReflectionSupport.increaseCount(false);
101+
if (delegate.getClass().getName().contains("ReflectionRegistryAdapter")) {
102+
RuntimeReflectionSupport.increaseCount(combinedFileKey.equals(REFLECTION_KEY));
103+
}
100104
String fieldName = asString(data.get("name"), "name");
101105
boolean allowWrite = data.containsKey("allowWrite") && asBoolean(data.get("allowWrite"), "allowWrite");
102106

@@ -117,7 +121,9 @@ protected void parseMethods(C condition, boolean queriedOnly, List<Object> metho
117121

118122
private void parseMethod(C condition, boolean queriedOnly, EconomicMap<String, Object> data, T clazz) {
119123
checkAttributes(data, "reflection method descriptor object", Collections.singleton("name"), Collections.singleton("parameterTypes"));
120-
RuntimeReflectionSupport.increaseCount(false);
124+
if (delegate.getClass().getName().contains("ReflectionRegistryAdapter")) {
125+
RuntimeReflectionSupport.increaseCount(combinedFileKey.equals(REFLECTION_KEY));
126+
}
121127
String methodName = asString(data.get("name"), "name");
122128
List<T> methodParameterTypes = null;
123129
Object parameterTypes = data.get("parameterTypes");

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,9 @@ class ReflectionMetadataParser<C, T> extends ReflectionConfigurationParser<C, T>
4141
"allDeclaredConstructors", "allPublicConstructors", "allDeclaredMethods", "allPublicMethods", "allDeclaredFields", "allPublicFields",
4242
"methods", "fields", "unsafeAllocated");
4343

44-
private final String combinedFileKey;
45-
4644
ReflectionMetadataParser(String combinedFileKey, ConfigurationConditionResolver<C> conditionResolver, ReflectionConfigurationParserDelegate<C, T> delegate, boolean strictConfiguration,
4745
boolean printMissingElements) {
48-
super(conditionResolver, delegate, strictConfiguration, printMissingElements);
49-
this.combinedFileKey = combinedFileKey;
46+
super(conditionResolver, delegate, strictConfiguration, printMissingElements, combinedFileKey);
5047
}
5148

5249
@Override
@@ -60,7 +57,9 @@ public void parseAndRegister(Object json, URI origin) {
6057
@Override
6158
protected void parseClass(EconomicMap<String, Object> data) {
6259
checkAttributes(data, "reflection class descriptor object", List.of(TYPE_KEY), OPTIONAL_REFLECT_METADATA_ATTRS);
63-
RuntimeReflectionSupport.increaseCount(false);
60+
if (delegate.getClass().getName().contains("ReflectionRegistryAdapter")) {
61+
RuntimeReflectionSupport.increaseCount(combinedFileKey.equals(REFLECTION_KEY));
62+
}
6463

6564
Optional<ConfigurationTypeDescriptor> type = parseTypeContents(data.get(TYPE_KEY));
6665
if (type.isEmpty()) {

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jni/JNIAccessFeature.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
package com.oracle.svm.hosted.jni;
2626

2727
import static com.oracle.svm.core.configure.ConfigurationParser.JNI_KEY;
28+
import static com.oracle.svm.core.configure.ConfigurationParser.REFLECTION_KEY;
2829

2930
import java.lang.reflect.Executable;
3031
import java.lang.reflect.Field;
@@ -209,6 +210,8 @@ public void afterRegistration(AfterRegistrationAccess arg) {
209210
ClassInitializationSupport.singleton());
210211
ReflectionConfigurationParser<ConfigurationCondition, Class<?>> parser = ConfigurationParserUtils.create(JNI_KEY, true, conditionResolver, runtimeSupport, null, access.getImageClassLoader());
211212
loadedConfigurations = ConfigurationParserUtils.parseAndRegisterConfigurationsFromCombinedFile(parser, access.getImageClassLoader(), "JNI");
213+
ReflectionConfigurationParser<ConfigurationCondition, Class<?>> reflectParser = ConfigurationParserUtils.create(REFLECTION_KEY, true, conditionResolver, runtimeSupport, null, access.getImageClassLoader());
214+
loadedConfigurations += ConfigurationParserUtils.parseAndRegisterConfigurationsFromCombinedFile(reflectParser, access.getImageClassLoader(), "Reflection");
212215
ReflectionConfigurationParser<ConfigurationCondition, Class<?>> legacyParser = ConfigurationParserUtils.create(null, false, conditionResolver, runtimeSupport, null,
213216
access.getImageClassLoader());
214217
loadedConfigurations += ConfigurationParserUtils.parseAndRegisterConfigurations(legacyParser, access.getImageClassLoader(), "JNI",

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/ReflectionFeature.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
*/
2525
package com.oracle.svm.hosted.reflect;
2626

27+
import static com.oracle.svm.core.configure.ConfigurationParser.JNI_KEY;
2728
import static com.oracle.svm.core.configure.ConfigurationParser.REFLECTION_KEY;
2829

2930
import java.lang.invoke.MethodHandle;
@@ -283,6 +284,9 @@ public void duringSetup(DuringSetupAccess a) {
283284
ReflectionConfigurationParser<ConfigurationCondition, Class<?>> parser = ConfigurationParserUtils.create(REFLECTION_KEY, true, conditionResolver, reflectionData, proxyRegistry,
284285
access.getImageClassLoader());
285286
loadedConfigurations = ConfigurationParserUtils.parseAndRegisterConfigurationsFromCombinedFile(parser, access.getImageClassLoader(), "reflection");
287+
ReflectionConfigurationParser<ConfigurationCondition, Class<?>> jniParser = ConfigurationParserUtils.create(JNI_KEY, true, conditionResolver, reflectionData, proxyRegistry,
288+
access.getImageClassLoader());
289+
loadedConfigurations += ConfigurationParserUtils.parseAndRegisterConfigurationsFromCombinedFile(jniParser, access.getImageClassLoader(), "JNI");
286290
ReflectionConfigurationParser<ConfigurationCondition, Class<?>> legacyParser = ConfigurationParserUtils.create(null, false, conditionResolver, reflectionData, proxyRegistry,
287291
access.getImageClassLoader());
288292
loadedConfigurations += ConfigurationParserUtils.parseAndRegisterConfigurations(legacyParser, access.getImageClassLoader(), "reflection",

0 commit comments

Comments
 (0)