Skip to content

Commit cda7210

Browse files
author
Aleksandar Gradinac
committed
General code cleanup. Introduce new format for human readable configuration with origins.
1 parent ea96f53 commit cda7210

22 files changed

+749
-714
lines changed

substratevm/src/com.oracle.svm.agent/src/com/oracle/svm/agent/NativeImageAgent.java

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import java.util.ArrayList;
4141
import java.util.Arrays;
4242
import java.util.ConcurrentModificationException;
43-
import java.util.Collections;
4443
import java.util.Date;
4544
import java.util.HashSet;
4645
import java.util.List;
@@ -57,10 +56,10 @@
5756
import org.graalvm.nativeimage.ProcessProperties;
5857
import org.graalvm.nativeimage.hosted.Feature;
5958

60-
import com.oracle.svm.agent.configwithorigins.ConfigurationWithOriginsResultWriter;
59+
import com.oracle.svm.agent.configwithorigins.ConfigurationWithOriginsWriter;
6160
import com.oracle.svm.agent.configwithorigins.MethodInfoRecordKeeper;
6261
import com.oracle.svm.agent.ignoredconfig.AgentMetaInfProcessor;
63-
import com.oracle.svm.agent.predicatedconfig.ConditionalConfigurationWriter;
62+
import com.oracle.svm.agent.conditionalconfig.ConditionalConfigurationWriter;
6463
import com.oracle.svm.agent.stackaccess.EagerlyLoadedJavaStackAccess;
6564
import com.oracle.svm.agent.stackaccess.InterceptedState;
6665
import com.oracle.svm.agent.stackaccess.OnDemandJavaStackAccess;
@@ -70,6 +69,7 @@
7069
import com.oracle.svm.agent.tracing.core.TracingResultWriter;
7170
import com.oracle.svm.configure.config.ConditionalConfigurationPredicate;
7271
import com.oracle.svm.configure.config.ConfigurationFileCollection;
72+
import com.oracle.svm.configure.config.ConfigurationSet;
7373
import com.oracle.svm.configure.filters.FilterConfigurationParser;
7474
import com.oracle.svm.configure.filters.RuleNode;
7575
import com.oracle.svm.configure.trace.AccessAdvisor;
@@ -130,8 +130,8 @@ protected int onLoadCallback(JNIJavaVM vm, JvmtiEnv jvmti, JvmtiEventCallbacks c
130130
boolean experimentalOmitClasspathConfig = false;
131131
boolean build = false;
132132
boolean configurationWithOrigins = false;
133-
Set<String> conditionalConfigurationUserCodePackagePrefixes = new HashSet<>();
134-
Set<Pattern> conditionalConfigurationClassNameExcludePatterns = new HashSet<>();
133+
Set<String> conditionalConfigUserPackagePrefixes = new HashSet<>();
134+
Set<Pattern> conditionalConfigClassNameExcludePatterns = new HashSet<>();
135135
int configWritePeriod = -1; // in seconds
136136
int configWritePeriodInitialDelay = 1; // in seconds
137137
boolean trackReflectionMetadata = true;
@@ -203,12 +203,12 @@ protected int onLoadCallback(JNIJavaVM vm, JvmtiEnv jvmti, JvmtiEventCallbacks c
203203
build = Boolean.parseBoolean(getTokenValue(token));
204204
} else if (token.equals("experimental-configuration-with-origins")) {
205205
configurationWithOrigins = true;
206-
} else if (token.startsWith("experimental-conditional-configuration-for-packages=")) {
207-
String userPackagePrefixes = getTokenValue(token);
208-
Collections.addAll(conditionalConfigurationUserCodePackagePrefixes, userPackagePrefixes.split(","));
209-
} else if (token.startsWith("conditional-configuration-class-name-exclude-patterns=")) {
206+
} else if (token.startsWith("experimental-conditional-config-for-package=")) {
207+
String userPackagePrefix = getTokenValue(token);
208+
conditionalConfigUserPackagePrefixes.add(userPackagePrefix);
209+
} else if (token.startsWith("conditional-config-class-name-exclude-pattern=")) {
210210
String classNamePattern = getTokenValue(token);
211-
Arrays.stream(classNamePattern.split(",")).map(Pattern::compile).forEach(conditionalConfigurationClassNameExcludePatterns::add);
211+
conditionalConfigClassNameExcludePatterns.add(Pattern.compile(classNamePattern));
212212
} else if (token.equals("track-reflection-metadata")) {
213213
trackReflectionMetadata = true;
214214
} else if (token.startsWith("track-reflection-metadata=")) {
@@ -223,7 +223,7 @@ protected int onLoadCallback(JNIJavaVM vm, JvmtiEnv jvmti, JvmtiEventCallbacks c
223223
inform("no output/build options provided, tracking dynamic accesses and writing configuration to directory: " + configOutputDir);
224224
}
225225

226-
if (configurationWithOrigins && !conditionalConfigurationUserCodePackagePrefixes.isEmpty()) {
226+
if (configurationWithOrigins && !conditionalConfigUserPackagePrefixes.isEmpty()) {
227227
return error(5, "The agent can only be used in either the configuration with origins mode or the predefined classes mode.");
228228
}
229229

@@ -258,7 +258,7 @@ protected int onLoadCallback(JNIJavaVM vm, JvmtiEnv jvmti, JvmtiEventCallbacks c
258258
}
259259
}
260260

261-
boolean shouldTraceOriginInformation = configurationWithOrigins || !conditionalConfigurationUserCodePackagePrefixes.isEmpty();
261+
boolean shouldTraceOriginInformation = configurationWithOrigins || !conditionalConfigUserPackagePrefixes.isEmpty();
262262
final MethodInfoRecordKeeper recordKeeper = new MethodInfoRecordKeeper(shouldTraceOriginInformation);
263263
final Supplier<InterceptedState> interceptedStateSupplier = shouldTraceOriginInformation ? EagerlyLoadedJavaStackAccess.stackAccessSupplier()
264264
: OnDemandJavaStackAccess.stackAccessSupplier();
@@ -291,26 +291,25 @@ protected int onLoadCallback(JNIJavaVM vm, JvmtiEnv jvmti, JvmtiEventCallbacks c
291291
ignoreConfigFromClasspath(jvmti, omittedConfigs);
292292
}
293293
AccessAdvisor advisor = createAccessAdvisor(builtinHeuristicFilter, callerFilter, accessFilter);
294-
TraceProcessor omittedConfigProcessor = null;
294+
TraceProcessor processor = new TraceProcessor(advisor);
295+
ConfigurationSet omittedConfiguration = new ConfigurationSet();
295296
Predicate<String> shouldExcludeClassesWithHash = null;
296297
if (!omittedConfigs.isEmpty()) {
297298
Function<IOException, Exception> ignore = e -> {
298299
warn("Failed to load omitted config: " + e);
299300
return null;
300301
};
301-
omittedConfigProcessor = new TraceProcessor(advisor, omittedConfigs.loadJniConfig(ignore), omittedConfigs.loadReflectConfig(ignore),
302-
omittedConfigs.loadProxyConfig(ignore), omittedConfigs.loadResourceConfig(ignore), omittedConfigs.loadSerializationConfig(ignore),
303-
omittedConfigs.loadPredefinedClassesConfig(null, null, ignore), null);
304-
shouldExcludeClassesWithHash = omittedConfigProcessor.getPredefinedClassesConfiguration()::containsClassWithHash;
302+
omittedConfiguration = omittedConfigs.loadConfigurationSet(ignore, null, null);
303+
shouldExcludeClassesWithHash = omittedConfiguration.getPredefinedClassesConfiguration()::containsClassWithHash;
305304
}
306305

307306
if (configurationWithOrigins) {
308-
ConfigurationWithOriginsResultWriter writer = new ConfigurationWithOriginsResultWriter(advisor, recordKeeper);
307+
ConfigurationWithOriginsWriter writer = new ConfigurationWithOriginsWriter(processor, recordKeeper);
309308
tracer = writer;
310309
tracingResultWriter = writer;
311-
} else if (!conditionalConfigurationUserCodePackagePrefixes.isEmpty()) {
312-
ConditionalConfigurationPredicate filter = new ConditionalConfigurationPredicate(conditionalConfigurationClassNameExcludePatterns);
313-
ConditionalConfigurationWriter writer = new ConditionalConfigurationWriter(advisor, recordKeeper, conditionalConfigurationUserCodePackagePrefixes, filter);
310+
} else if (!conditionalConfigUserPackagePrefixes.isEmpty()) {
311+
ConditionalConfigurationPredicate filter = new ConditionalConfigurationPredicate(conditionalConfigClassNameExcludePatterns);
312+
ConditionalConfigurationWriter writer = new ConditionalConfigurationWriter(processor, recordKeeper, conditionalConfigUserPackagePrefixes, filter);
314313
tracer = writer;
315314
tracingResultWriter = writer;
316315
} else {
@@ -325,10 +324,9 @@ protected int onLoadCallback(JNIJavaVM vm, JvmtiEnv jvmti, JvmtiEventCallbacks c
325324
}
326325
return e; // rethrow
327326
};
328-
TraceProcessor processor = new TraceProcessor(advisor, mergeConfigs.loadJniConfig(handler), mergeConfigs.loadReflectConfig(handler),
329-
mergeConfigs.loadProxyConfig(handler), mergeConfigs.loadResourceConfig(handler), mergeConfigs.loadSerializationConfig(handler),
330-
mergeConfigs.loadPredefinedClassesConfig(predefinedClassDestDirs, shouldExcludeClassesWithHash, handler), omittedConfigProcessor);
331-
ConfigurationResultWriter writer = new ConfigurationResultWriter(processor);
327+
328+
ConfigurationSet configuration = mergeConfigs.loadConfigurationSet(handler, predefinedClassDestDirs, shouldExcludeClassesWithHash);
329+
ConfigurationResultWriter writer = new ConfigurationResultWriter(processor, configuration, omittedConfiguration);
332330
tracer = writer;
333331
tracingResultWriter = writer;
334332
}

0 commit comments

Comments
 (0)