Skip to content

Commit b2ca310

Browse files
committed
Adapt configuration parser to 23.1
1 parent 9ecf8bf commit b2ca310

File tree

45 files changed

+660
-760
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+660
-760
lines changed

substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/OmitPreviousConfigTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,8 @@ class TypeMethodsWithFlagsTest {
229229
final Map<ConfigurationMethod, ConfigurationMemberDeclaration> methodsThatMustExist = new HashMap<>();
230230
final Map<ConfigurationMethod, ConfigurationMemberDeclaration> methodsThatMustNotExist = new HashMap<>();
231231

232-
final TypeConfiguration previousConfig = new TypeConfiguration();
233-
final TypeConfiguration currentConfig = new TypeConfiguration();
232+
final TypeConfiguration previousConfig = new TypeConfiguration("");
233+
final TypeConfiguration currentConfig = new TypeConfiguration("");
234234

235235
TypeMethodsWithFlagsTest(ConfigurationMemberDeclaration methodKind) {
236236
this.methodKind = methodKind;

substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/ResourceConfigurationTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@
3838
import org.junit.Test;
3939

4040
import com.oracle.svm.configure.config.ResourceConfiguration;
41-
import com.oracle.svm.core.util.json.JsonWriter;
4241
import com.oracle.svm.core.configure.ResourceConfigurationParser;
4342
import com.oracle.svm.core.configure.ResourcesRegistry;
43+
import com.oracle.svm.core.util.json.JsonWriter;
4444

4545
public class ResourceConfigurationTest {
4646

@@ -117,7 +117,7 @@ public void addClassBasedResourceBundle(ConfigurationCondition condition, String
117117
}
118118
};
119119

120-
ResourceConfigurationParser rcp = new ResourceConfigurationParser(registry, true);
120+
ResourceConfigurationParser rcp = ResourceConfigurationParser.create(false, registry, true);
121121
writerThread.start();
122122
rcp.parseAndRegister(pr);
123123

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,11 @@
2626

2727
import java.util.function.Consumer;
2828

29-
import com.oracle.svm.core.util.json.JsonPrintable;
30-
import com.oracle.svm.core.configure.ConfigurationParser;
3129
import org.graalvm.nativeimage.impl.ConfigurationCondition;
3230

31+
import com.oracle.svm.core.configure.ConfigurationParser;
32+
import com.oracle.svm.core.util.json.JsonPrintable;
33+
3334
public abstract class ConfigurationBase<T extends ConfigurationBase<T, P>, P> implements JsonPrintable {
3435

3536
public abstract boolean isEmpty();
@@ -68,5 +69,5 @@ public T copyAndFilter(P predicate) {
6869
return copyAnd(copy -> copy.removeIf(predicate));
6970
}
7071

71-
public abstract ConfigurationParser createParser();
72+
public abstract ConfigurationParser createParser(boolean strictMetadata);
7273
}

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

Lines changed: 54 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,31 @@
2424
*/
2525
package com.oracle.svm.configure.config;
2626

27+
import static com.oracle.svm.core.configure.ConfigurationParser.JNI_KEY;
28+
import static com.oracle.svm.core.configure.ConfigurationParser.REFLECTION_KEY;
29+
2730
import java.io.IOException;
2831
import java.net.URI;
2932
import java.nio.file.Files;
3033
import java.nio.file.Path;
34+
import java.nio.file.Paths;
3135
import java.util.Collection;
3236
import java.util.Collections;
3337
import java.util.LinkedHashSet;
3438
import java.util.Objects;
3539
import java.util.Set;
3640
import java.util.function.Function;
3741
import java.util.function.Predicate;
42+
import java.util.stream.Collectors;
3843

3944
import com.oracle.svm.core.configure.ConfigurationFile;
4045
import com.oracle.svm.core.configure.ConfigurationParser;
46+
import com.oracle.svm.core.util.VMError;
4147

4248
public class ConfigurationFileCollection {
4349
public static final Function<IOException, Exception> FAIL_ON_EXCEPTION = e -> e;
4450

51+
private final Set<URI> reachabilityMetadataPaths = new LinkedHashSet<>();
4552
private final Set<URI> jniConfigPaths = new LinkedHashSet<>();
4653
private final Set<URI> reflectConfigPaths = new LinkedHashSet<>();
4754
private final Set<URI> proxyConfigPaths = new LinkedHashSet<>();
@@ -51,6 +58,7 @@ public class ConfigurationFileCollection {
5158
private Set<URI> lockFilePaths;
5259

5360
public void addDirectory(Path path) {
61+
reachabilityMetadataPaths.add(path.resolve(ConfigurationFile.REACHABILITY_METADATA.getFileName()).toUri());
5462
jniConfigPaths.add(path.resolve(ConfigurationFile.JNI.getFileName()).toUri());
5563
reflectConfigPaths.add(path.resolve(ConfigurationFile.REFLECTION.getFileName()).toUri());
5664
proxyConfigPaths.add(path.resolve(ConfigurationFile.DYNAMIC_PROXY.getFileName()).toUri());
@@ -70,24 +78,51 @@ private <T> void detectAgentLock(T location, Predicate<T> exists, Function<T, UR
7078
}
7179

7280
public void addDirectory(Function<String, URI> fileResolver) {
73-
jniConfigPaths.add(fileResolver.apply(ConfigurationFile.JNI.getFileName()));
74-
reflectConfigPaths.add(fileResolver.apply(ConfigurationFile.REFLECTION.getFileName()));
75-
proxyConfigPaths.add(fileResolver.apply(ConfigurationFile.DYNAMIC_PROXY.getFileName()));
76-
resourceConfigPaths.add(fileResolver.apply(ConfigurationFile.RESOURCES.getFileName()));
77-
serializationConfigPaths.add(fileResolver.apply(ConfigurationFile.SERIALIZATION.getFileName()));
78-
predefinedClassesConfigPaths.add(fileResolver.apply(ConfigurationFile.PREDEFINED_CLASSES_NAME.getFileName()));
81+
addFile(reachabilityMetadataPaths, fileResolver, ConfigurationFile.REACHABILITY_METADATA);
82+
addFile(jniConfigPaths, fileResolver, ConfigurationFile.JNI);
83+
addFile(reflectConfigPaths, fileResolver, ConfigurationFile.REFLECTION);
84+
addFile(proxyConfigPaths, fileResolver, ConfigurationFile.DYNAMIC_PROXY);
85+
addFile(resourceConfigPaths, fileResolver, ConfigurationFile.RESOURCES);
86+
addFile(serializationConfigPaths, fileResolver, ConfigurationFile.SERIALIZATION);
87+
addFile(predefinedClassesConfigPaths, fileResolver, ConfigurationFile.PREDEFINED_CLASSES_NAME);
7988
detectAgentLock(fileResolver.apply(ConfigurationFile.LOCK_FILE_NAME), Objects::nonNull, Function.identity());
8089
}
8190

91+
private static void addFile(Set<URI> metadataPaths, Function<String, URI> fileResolver, ConfigurationFile configurationFile) {
92+
URI uri = fileResolver.apply(configurationFile.getFileName());
93+
if (uri != null) {
94+
metadataPaths.add(uri);
95+
}
96+
}
97+
8298
public Set<URI> getDetectedAgentLockPaths() {
8399
return (lockFilePaths != null) ? lockFilePaths : Collections.emptySet();
84100
}
85101

86102
public boolean isEmpty() {
87-
return jniConfigPaths.isEmpty() && reflectConfigPaths.isEmpty() && proxyConfigPaths.isEmpty() &&
103+
return reachabilityMetadataPaths.isEmpty() && jniConfigPaths.isEmpty() && reflectConfigPaths.isEmpty() && proxyConfigPaths.isEmpty() &&
88104
resourceConfigPaths.isEmpty() && serializationConfigPaths.isEmpty() && predefinedClassesConfigPaths.isEmpty();
89105
}
90106

107+
public Set<Path> getPaths(ConfigurationFile configurationFile) {
108+
Set<URI> uris;
109+
switch (configurationFile) {
110+
case REACHABILITY_METADATA -> uris = getReachabilityMetadataPaths();
111+
case DYNAMIC_PROXY -> uris = getProxyConfigPaths();
112+
case RESOURCES -> uris = getResourceConfigPaths();
113+
case JNI -> uris = getJniConfigPaths();
114+
case REFLECTION -> uris = getReflectConfigPaths();
115+
case SERIALIZATION -> uris = getSerializationConfigPaths();
116+
case PREDEFINED_CLASSES_NAME -> uris = getPredefinedClassesConfigPaths();
117+
default -> throw VMError.shouldNotReachHere("Cannot get paths for configuration file " + configurationFile);
118+
}
119+
return uris.stream().map(Paths::get).collect(Collectors.toSet());
120+
}
121+
122+
public Set<URI> getReachabilityMetadataPaths() {
123+
return reachabilityMetadataPaths;
124+
}
125+
91126
public Set<URI> getJniConfigPaths() {
92127
return jniConfigPaths;
93128
}
@@ -113,35 +148,37 @@ public Set<URI> getPredefinedClassesConfigPaths() {
113148
}
114149

115150
public TypeConfiguration loadJniConfig(Function<IOException, Exception> exceptionHandler) throws Exception {
116-
return loadTypeConfig(jniConfigPaths, exceptionHandler);
151+
return loadTypeConfig(JNI_KEY, jniConfigPaths, exceptionHandler);
117152
}
118153

119154
public TypeConfiguration loadReflectConfig(Function<IOException, Exception> exceptionHandler) throws Exception {
120-
return loadTypeConfig(reflectConfigPaths, exceptionHandler);
155+
return loadTypeConfig(REFLECTION_KEY, reflectConfigPaths, exceptionHandler);
121156
}
122157

123158
public ProxyConfiguration loadProxyConfig(Function<IOException, Exception> exceptionHandler) throws Exception {
124159
ProxyConfiguration proxyConfiguration = new ProxyConfiguration();
125-
loadConfig(proxyConfigPaths, proxyConfiguration.createParser(), exceptionHandler);
160+
loadConfig(proxyConfigPaths, proxyConfiguration.createParser(false), exceptionHandler);
126161
return proxyConfiguration;
127162
}
128163

129164
public PredefinedClassesConfiguration loadPredefinedClassesConfig(Path[] classDestinationDirs, Predicate<String> shouldExcludeClassesWithHash,
130165
Function<IOException, Exception> exceptionHandler) throws Exception {
131166
PredefinedClassesConfiguration predefinedClassesConfiguration = new PredefinedClassesConfiguration(classDestinationDirs, shouldExcludeClassesWithHash);
132-
loadConfig(predefinedClassesConfigPaths, predefinedClassesConfiguration.createParser(), exceptionHandler);
167+
loadConfig(predefinedClassesConfigPaths, predefinedClassesConfiguration.createParser(false), exceptionHandler);
133168
return predefinedClassesConfiguration;
134169
}
135170

136171
public ResourceConfiguration loadResourceConfig(Function<IOException, Exception> exceptionHandler) throws Exception {
137172
ResourceConfiguration resourceConfiguration = new ResourceConfiguration();
138-
loadConfig(resourceConfigPaths, resourceConfiguration.createParser(), exceptionHandler);
173+
loadConfig(reachabilityMetadataPaths, resourceConfiguration.createParser(true), exceptionHandler);
174+
loadConfig(resourceConfigPaths, resourceConfiguration.createParser(false), exceptionHandler);
139175
return resourceConfiguration;
140176
}
141177

142178
public SerializationConfiguration loadSerializationConfig(Function<IOException, Exception> exceptionHandler) throws Exception {
143179
SerializationConfiguration serializationConfiguration = new SerializationConfiguration();
144-
loadConfig(serializationConfigPaths, serializationConfiguration.createParser(), exceptionHandler);
180+
loadConfig(reachabilityMetadataPaths, serializationConfiguration.createParser(true), exceptionHandler);
181+
loadConfig(serializationConfigPaths, serializationConfiguration.createParser(false), exceptionHandler);
145182
return serializationConfiguration;
146183
}
147184

@@ -152,9 +189,10 @@ public ConfigurationSet loadConfigurationSet(Function<IOException, Exception> ex
152189
loadPredefinedClassesConfig(predefinedConfigClassDestinationDirs, predefinedConfigClassWithHashExclusionPredicate, exceptionHandler));
153190
}
154191

155-
private static TypeConfiguration loadTypeConfig(Collection<URI> uris, Function<IOException, Exception> exceptionHandler) throws Exception {
156-
TypeConfiguration configuration = new TypeConfiguration();
157-
loadConfig(uris, configuration.createParser(), exceptionHandler);
192+
private TypeConfiguration loadTypeConfig(String combinedFileKey, Collection<URI> uris, Function<IOException, Exception> exceptionHandler) throws Exception {
193+
TypeConfiguration configuration = new TypeConfiguration(combinedFileKey);
194+
loadConfig(reachabilityMetadataPaths, configuration.createParser(true), exceptionHandler);
195+
loadConfig(uris, configuration.createParser(false), exceptionHandler);
158196
return configuration;
159197
}
160198

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
*/
2525
package com.oracle.svm.configure.config;
2626

27+
import static com.oracle.svm.core.configure.ConfigurationParser.JNI_KEY;
28+
import static com.oracle.svm.core.configure.ConfigurationParser.REFLECTION_KEY;
29+
2730
import java.io.IOException;
2831
import java.nio.file.Path;
2932
import java.util.ArrayList;
@@ -32,10 +35,10 @@
3235

3336
import com.oracle.svm.configure.ConfigurationBase;
3437
import com.oracle.svm.configure.config.conditional.ConditionalConfigurationPredicate;
35-
import com.oracle.svm.core.util.json.JsonPrintable;
36-
import com.oracle.svm.core.util.json.JsonWriter;
3738
import com.oracle.svm.core.configure.ConfigurationFile;
3839
import com.oracle.svm.core.util.VMError;
40+
import com.oracle.svm.core.util.json.JsonPrintable;
41+
import com.oracle.svm.core.util.json.JsonWriter;
3942

4043
public class ConfigurationSet {
4144
@FunctionalInterface
@@ -66,7 +69,7 @@ public ConfigurationSet(ConfigurationSet other) {
6669
}
6770

6871
public ConfigurationSet() {
69-
this(new TypeConfiguration(), new TypeConfiguration(), new ResourceConfiguration(), new ProxyConfiguration(), new SerializationConfiguration(),
72+
this(new TypeConfiguration(REFLECTION_KEY), new TypeConfiguration(JNI_KEY), new ResourceConfiguration(), new ProxyConfiguration(), new SerializationConfiguration(),
7073
new PredefinedClassesConfiguration(new Path[0], hash -> false));
7174
}
7275

0 commit comments

Comments
 (0)