Skip to content

Commit 05c2fd1

Browse files
committed
[GR-58490] Adapt PartialConfigurationWithOrigins to reachability-metadata.json
PullRequest: graal/18892
2 parents 2de29a9 + ddbeaae commit 05c2fd1

File tree

5 files changed

+73
-29
lines changed

5 files changed

+73
-29
lines changed

substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/conditionalconfig/ConfigurationVerifier.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.junit.Assert;
3333
import org.junit.Test;
3434

35+
import com.oracle.svm.configure.ConfigurationBase;
3536
import com.oracle.svm.configure.config.ConfigurationFileCollection;
3637
import com.oracle.svm.configure.config.ConfigurationSet;
3738
import com.oracle.svm.core.configure.ConfigurationFile;
@@ -70,9 +71,14 @@ private static String getConfigurationJSON(ConfigurationSet config) throws IOExc
7071
StringWriter sw = new StringWriter();
7172
try (JsonWriter writer = new JsonWriter(sw)) {
7273
for (ConfigurationFile file : ConfigurationFile.agentGeneratedFiles()) {
73-
if (!config.getConfiguration(file).isEmpty()) {
74+
ConfigurationBase<?, ?> configuration = config.getConfiguration(file);
75+
if (!configuration.isEmpty()) {
7476
sw.append("\n").append(file.getName()).append("\n");
75-
config.getConfiguration(file).printJson(writer);
77+
if (configuration.supportsCombinedFile()) {
78+
configuration.printJson(writer);
79+
} else {
80+
configuration.printLegacyJson(writer);
81+
}
7682
}
7783
}
7884
return sw.toString();

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

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -189,14 +189,7 @@ public static List<Path> writeConfigurationToAllPaths(Function<ConfigurationFile
189189
} else {
190190
writer.appendSeparator();
191191
}
192-
if (!configFile.equals(ConfigurationFile.RESOURCES)) {
193-
/*
194-
* Resources are printed at the top level of the object, not in a defined
195-
* field
196-
*/
197-
writer.quote(configFile.getFieldName()).appendFieldSeparator();
198-
}
199-
configSupplier.apply(configFile).printJson(writer);
192+
printConfigurationToCombinedFile(configSupplier.apply(configFile), configFile, writer);
200193
}
201194
}
202195
writer.appendObjectEnd();
@@ -205,6 +198,16 @@ public static List<Path> writeConfigurationToAllPaths(Function<ConfigurationFile
205198
return writtenFiles;
206199
}
207200

201+
public static void printConfigurationToCombinedFile(JsonPrintable config, ConfigurationFile configFile, JsonWriter writer) throws IOException {
202+
if (!configFile.equals(ConfigurationFile.RESOURCES)) {
203+
/*
204+
* Resources are printed at the top level of the object, not in a defined field
205+
*/
206+
writer.quote(configFile.getFieldName()).appendFieldSeparator();
207+
}
208+
config.printJson(writer);
209+
}
210+
208211
public List<Path> writeConfiguration(Function<ConfigurationFile, Path> configFilePathResolver) throws IOException {
209212
return writeConfiguration(configFilePathResolver, this::getConfiguration);
210213
}

substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/HumanReadableConfigurationWithOrigins.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.List;
3030
import java.util.Set;
3131

32+
import com.oracle.svm.configure.ConfigurationBase;
3233
import com.oracle.svm.core.configure.ConfigurationFile;
3334

3435
import jdk.graal.compiler.util.json.JsonPrintable;
@@ -65,8 +66,14 @@ private void printNode(JsonWriter writer, String prefix, MethodCallNode node) th
6566
writer.append(prefix).append(node.methodInfo.toString());
6667
if (node.hasConfig(configFile)) {
6768
writer.append(" - ");
69+
ConfigurationBase<?, ?> config = node.configuration.getConfiguration(configFile);
6870
StringWriter sw = new StringWriter();
69-
node.configuration.getConfiguration(configFile).printJson(new JsonWriter(sw));
71+
JsonWriter jw = new JsonWriter(sw);
72+
if (config.supportsCombinedFile()) {
73+
config.printJson(jw);
74+
} else {
75+
config.printLegacyJson(jw);
76+
}
7077
writer.append(sw.toString().replace("\n", " "));
7178
}
7279
writer.newline();

substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/PartialConfigurationWithOrigins.java

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.graalvm.collections.EconomicMap;
3232
import org.graalvm.collections.MapCursor;
3333

34+
import com.oracle.svm.configure.ConfigurationBase;
3435
import com.oracle.svm.configure.config.ConfigurationSet;
3536
import com.oracle.svm.core.configure.ConfigurationFile;
3637
import com.oracle.svm.core.configure.ConfigurationParser;
@@ -143,22 +144,34 @@ private void parseMethodEntry(MethodCallNode parent, EconomicMap<String, ?> meth
143144

144145
private static void printConfigurationSet(JsonWriter writer, ConfigurationSet configurationSet) throws IOException {
145146
if (!configurationSet.isEmpty()) {
146-
writer.quote("config").append(": {").indent().newline();
147+
writer.quote("config").appendFieldSeparator().appendObjectStart();
148+
149+
/* Print combined file */
150+
writer.quote(ConfigurationFile.REACHABILITY_METADATA.getName()).appendFieldSeparator().appendObjectStart();
147151
boolean first = true;
148152
for (ConfigurationFile file : ConfigurationFile.agentGeneratedFiles()) {
149-
if (!configurationSet.getConfiguration(file).isEmpty()) {
153+
ConfigurationBase<?, ?> config = configurationSet.getConfiguration(file);
154+
if (!config.isEmpty() && config.supportsCombinedFile()) {
150155
if (first) {
151156
first = false;
152157
} else {
153-
writer.append(",").newline();
158+
writer.appendSeparator();
154159
}
160+
ConfigurationSet.printConfigurationToCombinedFile(config, file, writer);
161+
}
162+
}
163+
writer.appendObjectEnd();
155164

156-
writer.quote(file.getName()).append(": ");
157-
configurationSet.getConfiguration(file).printJson(writer);
165+
/* Print legacy files */
166+
for (ConfigurationFile file : ConfigurationFile.agentGeneratedFiles()) {
167+
ConfigurationBase<?, ?> config = configurationSet.getConfiguration(file);
168+
if (!config.isEmpty() && !config.supportsCombinedFile()) {
169+
writer.appendSeparator();
170+
writer.quote(file.getName()).appendFieldSeparator();
171+
config.printLegacyJson(writer);
158172
}
159173
}
160-
writer.unindent().newline()
161-
.append("}");
174+
writer.appendObjectEnd();
162175
}
163176
}
164177

@@ -170,7 +183,13 @@ private static void parseConfigurationSet(EconomicMap<String, ?> configJson, Con
170183
if (configType == null) {
171184
throw new JsonParserException("Invalid configuration type: " + configName);
172185
}
173-
configurationSet.getConfiguration(configType).createParser(false).parseAndRegister(cursor.getValue(), origin);
186+
if (configType == ConfigurationFile.REACHABILITY_METADATA) {
187+
for (ConfigurationFile file : ConfigurationFile.combinedFileConfigurations()) {
188+
configurationSet.getConfiguration(file).createParser(true).parseAndRegister(cursor.getValue(), origin);
189+
}
190+
} else {
191+
configurationSet.getConfiguration(configType).createParser(false).parseAndRegister(cursor.getValue(), origin);
192+
}
174193
}
175194
}
176195
}

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

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@
3333

3434
public enum ConfigurationFile {
3535
/* Combined file */
36-
REACHABILITY_METADATA("reachability-metadata", null, true, true),
36+
REACHABILITY_METADATA("reachability-metadata", null, true, false),
3737
/* Main metadata categories (order matters) */
38-
REFLECTION("reflect", REFLECTION_KEY, true, false),
39-
RESOURCES("resource", RESOURCES_KEY, true, false),
40-
SERIALIZATION("serialization", SERIALIZATION_KEY, true, false),
41-
JNI("jni", JNI_KEY, true, false),
38+
REFLECTION("reflect", REFLECTION_KEY, true, true),
39+
RESOURCES("resource", RESOURCES_KEY, true, true),
40+
SERIALIZATION("serialization", SERIALIZATION_KEY, true, true),
41+
JNI("jni", JNI_KEY, true, true),
4242
/* Deprecated metadata categories */
4343
DYNAMIC_PROXY("proxy", null, true, false),
4444
PREDEFINED_CLASSES_NAME("predefined-classes", null, true, false),
@@ -51,20 +51,21 @@ public enum ConfigurationFile {
5151
private final String name;
5252
private final String fieldName;
5353
private final boolean canAgentGenerate;
54-
private final boolean combinedFile;
54+
private final boolean inCombinedFile;
5555

5656
public static final String LOCK_FILE_NAME = ".lock";
5757
public static final String PREDEFINED_CLASSES_AGENT_EXTRACTED_SUBDIR = "agent-extracted-predefined-classes";
5858
public static final String PREDEFINED_CLASSES_AGENT_EXTRACTED_NAME_SUFFIX = ".classdata";
5959
public static final String PARTIAL_CONFIGURATION_WITH_ORIGINS = "partial-config-with-origins.json";
6060

6161
private static final ConfigurationFile[] agentGeneratedFiles = computeAgentGeneratedFiles();
62+
private static final ConfigurationFile[] combinedFileConfigurations = computeCombinedFileConfigurations();
6263

63-
ConfigurationFile(String name, String fieldName, boolean canAgentGenerate, boolean combinedFile) {
64+
ConfigurationFile(String name, String fieldName, boolean canAgentGenerate, boolean inCombinedFile) {
6465
this.name = name;
6566
this.fieldName = fieldName;
6667
this.canAgentGenerate = canAgentGenerate;
67-
this.combinedFile = combinedFile;
68+
this.inCombinedFile = inCombinedFile;
6869
}
6970

7071
public String getName() {
@@ -76,15 +77,15 @@ public String getFieldName() {
7677
}
7778

7879
public String getFileName() {
79-
return name + (combinedFile ? COMBINED_FILE_NAME_SUFFIX : LEGACY_FILE_NAME_SUFFIX);
80+
return name + (this == REACHABILITY_METADATA ? COMBINED_FILE_NAME_SUFFIX : LEGACY_FILE_NAME_SUFFIX);
8081
}
8182

8283
public String getFileName(String suffix) {
8384
return name + suffix;
8485
}
8586

8687
public boolean canBeGeneratedByAgent() {
87-
return canAgentGenerate && !combinedFile;
88+
return canAgentGenerate && this != REACHABILITY_METADATA;
8889
}
8990

9091
public static ConfigurationFile getByName(String name) {
@@ -103,4 +104,12 @@ public static ConfigurationFile[] agentGeneratedFiles() {
103104
private static ConfigurationFile[] computeAgentGeneratedFiles() {
104105
return Arrays.stream(values()).filter(f -> f.canBeGeneratedByAgent()).toArray(ConfigurationFile[]::new);
105106
}
107+
108+
public static ConfigurationFile[] combinedFileConfigurations() {
109+
return combinedFileConfigurations;
110+
}
111+
112+
private static ConfigurationFile[] computeCombinedFileConfigurations() {
113+
return Arrays.stream(values()).filter(f -> f.inCombinedFile).toArray(ConfigurationFile[]::new);
114+
}
106115
}

0 commit comments

Comments
 (0)