Why not making all Annotated* mutable during boot lifecycle?
Would allow to get rid of the annotated root in the modification code, for instance we could convert:
type.getMethods().stream().filter(m -> m.isAnnotationPresent(Foo.class)).forEach(m ->event.setAnnotatedType().addToMethod(m, MyInterceptor.BINDING));
to
type.getMethods().stream().filter(m -> m.isAnnotationPresent(Foo.class)).forEach(m -> m.mutate().add(MyInterceptor.BINDING));
or if we don't want to add mutate in the existing types we could use configurator as root for type type and recreate a Configurator graph matching annotated graph.
Advatage is first code i a bit awkward in the sense you can call setAnnotatedType() multiple type (what would happen? only last modification will be saved? or you have to keep a reference to the configurator once called which breaks the fluent API provded by streams IMO.
wdyt?