Skip to content

Commit 474ad8b

Browse files
committed
Parse the predicate in JSON
1 parent b99a0a1 commit 474ad8b

File tree

6 files changed

+23
-42
lines changed

6 files changed

+23
-42
lines changed

substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ParserConfigurationAdapter.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
package com.oracle.svm.configure.config;
2626

2727
import java.util.List;
28-
import java.util.Map;
2928

3029
import com.oracle.svm.core.TypeResult;
3130
import org.graalvm.nativeimage.impl.ConfigurationPredicate;
@@ -40,17 +39,12 @@ public ParserConfigurationAdapter(TypeConfiguration configuration) {
4039
}
4140

4241
@Override
43-
public TypeResult<ConfigurationType> resolveTypeResult(String typeName) {
44-
ConfigurationType type = configuration.get(ConfigurationPredicate.DEFAULT_CONFIGRATION_PREDICATE, typeName);
42+
public TypeResult<ConfigurationType> resolveTypeResult(ConfigurationPredicate predicate, String typeName) {
43+
ConfigurationType type = configuration.get(predicate, typeName);
4544
ConfigurationType result = type != null ? type : new ConfigurationType(typeName);
4645
return TypeResult.forType(typeName, result);
4746
}
4847

49-
@Override
50-
public ConfigurationPredicate resolvePredicate(Map<String, Object> predicate) {
51-
return ConfigurationPredicate.DEFAULT_CONFIGRATION_PREDICATE;
52-
}
53-
5448
@Override
5549
public void registerType(ConfigurationPredicate predicate, ConfigurationType type) {
5650
configuration.add(predicate, type);

substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/TypeConfiguration.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,10 @@ public ConfigurationType getOrCreateType(String qualifiedForNameString) {
9595
}
9696
s = sb.toString();
9797
}
98-
return types.computeIfAbsent(Pair.create(ConfigurationPredicate.DEFAULT_CONFIGRATION_PREDICATE, s), p -> new ConfigurationType(p.getRight()));
98+
99+
// the agent unconditionally includes all types
100+
ConfigurationPredicate predicate = ConfigurationPredicate.DEFAULT_CONFIGRATION_PREDICATE;
101+
return types.computeIfAbsent(Pair.create(predicate, s), p -> new ConfigurationType(p.getRight()));
99102
}
100103

101104
@Override

substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/trace/JniProcessor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import com.oracle.svm.configure.config.TypeConfiguration;
3737

3838
import jdk.vm.ci.meta.MetaUtil;
39+
import org.graalvm.nativeimage.impl.ConfigurationPredicate;
3940

4041
class JniProcessor extends AbstractProcessor {
4142
private final TypeConfiguration configuration;

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

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
/*
23
* Copyright (c) 2017, 2017, Oracle and/or its affiliates. All rights reserved.
34
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -32,10 +33,11 @@
3233
import java.util.Map;
3334
import java.util.stream.Collectors;
3435

36+
import org.graalvm.nativeimage.impl.ConfigurationPredicate;
37+
3538
import com.oracle.svm.core.TypeResult;
3639
import com.oracle.svm.core.util.json.JSONParser;
3740
import com.oracle.svm.core.util.json.JSONParserException;
38-
import org.graalvm.nativeimage.impl.ConfigurationPredicate;
3941

4042
// Checkstyle: allow reflection
4143

@@ -78,12 +80,16 @@ private void parseClass(Map<String, Object> data) {
7880
}
7981
String className = asString(classObject, "name");
8082
ConfigurationPredicate predicate = ConfigurationPredicate.DEFAULT_CONFIGRATION_PREDICATE;
81-
if (data.containsKey("predicate")) {
82-
Map<String, Object> predicateData = asMap(data.get("predicate"), "Attribute 'predicate' must be an object");
83-
predicate = delegate.resolvePredicate(predicateData);
83+
Object predicateData = data.get("predicate");
84+
if (predicateData != null) {
85+
Map<String, Object> predicateObject = asMap(predicateData, "Attribute 'predicate' must be an object");
86+
Object predicateType = predicateObject.get("whenTypeReachable");
87+
if (predicateType instanceof String) {
88+
predicate = ConfigurationPredicate.create((String) predicateType);
89+
}
8490
}
8591

86-
TypeResult<T> result = delegate.resolveTypeResult(className);
92+
TypeResult<T> result = delegate.resolveTypeResult(predicate, className);
8793
if (!result.isPresent()) {
8894
handleError("Could not resolve " + className + " for reflection configuration.", result.getException());
8995
return;
@@ -195,7 +201,7 @@ private void parseMethod(ConfigurationPredicate predicate, Map<String, Object> d
195201
if (propertyName.equals("name")) {
196202
methodName = asString(entry.getValue(), "name");
197203
} else if (propertyName.equals("parameterTypes")) {
198-
methodParameterTypes = parseMethodParameters(clazz, methodName, asList(entry.getValue(),
204+
methodParameterTypes = parseMethodParameters(predicate, clazz, methodName, asList(entry.getValue(),
199205
"Attribute 'parameterTypes' must be a list of type names"));
200206
if (methodParameterTypes == null) {
201207
return;
@@ -237,11 +243,11 @@ private void parseMethod(ConfigurationPredicate predicate, Map<String, Object> d
237243
}
238244
}
239245

240-
private List<T> parseMethodParameters(T clazz, String methodName, List<Object> types) {
246+
private List<T> parseMethodParameters(ConfigurationPredicate predicate, T clazz, String methodName, List<Object> types) {
241247
List<T> result = new ArrayList<>();
242248
for (Object type : types) {
243249
String typeName = asString(type, "types");
244-
TypeResult<T> typeResult = delegate.resolveTypeResult(typeName);
250+
TypeResult<T> typeResult = delegate.resolveTypeResult(predicate, typeName);
245251
if (!typeResult.isPresent()) {
246252
handleError("Could not register method " + formatMethod(clazz, methodName) + " for reflection.", typeResult.getException());
247253
return null;

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

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,13 @@
2525
package com.oracle.svm.core.configure;
2626

2727
import java.util.List;
28-
import java.util.Map;
2928

3029
import com.oracle.svm.core.TypeResult;
3130
import org.graalvm.nativeimage.impl.ConfigurationPredicate;
3231

3332
public interface ReflectionConfigurationParserDelegate<T> {
3433

35-
/**
36-
* @deprecated use {@link #resolveTypeResult(String)} instead.
37-
*/
38-
@Deprecated
39-
default T resolveType(String typeName) {
40-
return resolveTypeResult(typeName).get();
41-
}
42-
43-
ConfigurationPredicate resolvePredicate(Map<String, Object> predicate);
44-
45-
TypeResult<T> resolveTypeResult(String typeName);
34+
TypeResult<T> resolveTypeResult(ConfigurationPredicate predicate, String typeName);
4635

4736
void registerType(ConfigurationPredicate predicate, T type);
4837

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/ReflectionRegistryAdapter.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import java.lang.reflect.Executable;
2828
import java.lang.reflect.Method;
2929
import java.util.List;
30-
import java.util.Map;
3130

3231
import org.graalvm.nativeimage.impl.ConfigurationPredicate;
3332
import org.graalvm.nativeimage.impl.ReflectionRegistry;
@@ -54,18 +53,7 @@ public void registerType(ConfigurationPredicate predicate, Class<?> type) {
5453
}
5554

5655
@Override
57-
public ConfigurationPredicate resolvePredicate(Map<String, Object> predicate) {
58-
return ConfigurationPredicate.DEFAULT_CONFIGRATION_PREDICATE;
59-
}
60-
61-
@Override
62-
@SuppressWarnings("deprecation")
63-
public Class<?> resolveType(String typeName) {
64-
return resolveTypeResult(typeName).get();
65-
}
66-
67-
@Override
68-
public TypeResult<Class<?>> resolveTypeResult(String typeName) {
56+
public TypeResult<Class<?>> resolveTypeResult(ConfigurationPredicate predicate, String typeName) {
6957
String name = typeName;
7058
if (name.indexOf('[') != -1) {
7159
/* accept "int[][]", "java.lang.String[]" */

0 commit comments

Comments
 (0)