Add premain for static agent support by ziyilin · Pull Request #8988 · oracle/graal (original) (raw)
I would implement this as follows:
ArrayList<Class<?>> userClasses = new ArrayList<>();
CodeInfo imageCodeInfo = CodeInfoTable.getFirstImageCodeInfo();
while (imageCodeInfo.isNonNull()) {
Class<?>[] classes = NonmovableArrays.heapCopyOfObjectArray(CodeInfoAccess.getClasses(imageCodeInfo));
if (classes != null) {
for (Class<?> clazz : classes) {
if (clazz != null) {
Module module = clazz.getModule();
if (module == null ||
module.getName() == null ||
!isSystemClass(module)) {
userClasses.add(clazz);
}
}
}
}
imageCodeInfo = CodeInfoAccess.getNextImageCodeInfo(imageCodeInfo);
}
userClasses.trimToSize();
return userClasses.toArray(new Class[0]);
where we have
private static final Set<String> systemModules = Set.of("org.graalvm.nativeimage.builder", "org.graalvm.nativeimage", "org.graalvm.nativeimage.base", "com.oracle.svm.svm_enterprise",
"org.graalvm.word", "jdk.internal.vm.ci", "jdk.graal.compiler", "com.oracle.graal.graal_enterprise");
private static boolean isSystemClass(Module module) {
return systemModules.contains(module.getName());
}
Please re-use systemModules
in com.oracle.svm.hosted.classinitialization.ClassInitializationSupport#isAlwaysReached
. @loicottet we can use that list later for the list of types where reflection is prohibited.