Slide 30
Slide 30 text
Micronaut AOT extensibility
Copyright © 2022, Oracle and/or its affiliates
31
@Override
public void generate(@NonNull AOTContext context) {
context.registerStaticOptimization("KnownMissingTypesOptimizationLoader", ClassUtils.Optimizations.class, body -> {
List classNames = context.getConfiguration().stringList(OPTION.key());
body.addStatement("$T knownMissingTypes = new $T()", ParameterizedTypeName.get(Set.class, String.class),
for (String knownMissingClass : findMissingClasses(classNames)) {
body.addStatement("knownMissingTypes.add($S)", knownMissingClass);
}
body.addStatement("return new $T(knownMissingTypes)", ClassUtils.Optimizations.class);
});
}
private List findMissingClasses(List classNames) {
List knownMissingClasses = new ArrayList<>();
ClassLoader cl = this.getClass().getClassLoader();
for (String name : classNames) {
try {
cl.loadClass(name);
} catch (ClassNotFoundException | NoClassDefFoundError e) {
knownMissingClasses.add(name);
}
}
return knownMissingClasses;
}
This happens in user application
context