avaje-inject
avaje-inject copied to clipboard
Add a switch to determine module wiring order at compile time.
So the thought here is that we can directly read the requires
and provides
via the external provider and determine the wiring order in the generator.
Then we can generate a class like this:
public final class CompiledOrder implements ModuleOrdering {
private final Module[] sortedModules = new Module[2];
private static final Map<String, Integer> INDEXES =
Map.ofEntries(
entry("org.example.external.aspect.sub.ExampleExternalAspectModule", 0),
entry("org.other.one.OneModule", 1));
@Override
public List<Module> factories() {
return List.of(sortedModules);
}
@Override
public Set<String> orderModules() {
return INDEXES.keySet();
}
@Override
public void add(Module module) {
final var index = INDEXES.get(module.getClass().getTypeName());
if (index != null) {
sortedModules[index] = module;
}
}
@Override
public boolean isEmpty() {
return sortedModules.length == 0;
}
}
which knows ahead of time what goes where.
- adds a new attribute to InjectModule to toggle this mode
- generator will perform wiring checks and warn if no modules that satisfy conditions are in the class/module path
- adds new interface for determining wiring order
- adds new functions to the maven plugin to provide the module and their dependency information
should fix #478