Open igor-makarov opened 1 year ago
@sentinelt this is my best attempt at a repro, hope it helps!
@sentinelt Update: I've managed to figure out the fix but it only works on Java 9 and up because of a new method.
Please let me know if you can find a way to make it work with Java 8 since that's what the project I'm working on is using.
Important note: I've added @Inherited
to the @IndexSubclasses
annotation, otherwise the subclasses did not get picked up in an incremental build.
@sentinelt Update - seems like it might be relatively easy to change the annotation processor to be isolating - which means generating a single file for each discovered element.
The problem with this approach is that it makes the class loader incompatible with the ClassLoader
format.
What's the status of this issue? Is there something that can be done?
I've created a branch where I build the project with Gradle and included a demo project.
Link: link
Seems like there are 2 interrelated problems:
*
match on the annotation type causes the build system to match annotations that are incompatible with an aggregate processor type.There could be two solutions in theory:
To reproduce, run the build of the demo project:
Then, modify one of the demo project files and run again.
If you run with the wildcard as is, you will get the following message:
This is because the wildcard matches a Lombok annotation that has the wrong retention attribute.
If you run it with the list narrowed down, the generated indices can be incomplete or missing, depending on the files modified. I've tried to debug it and it seems that this is due to the logic in
ClassIndexProcessor#process
making some assumptions about the root object. The other types are seem accessible but I don't understand the logic enough to rewrite it.Hope this helps debugging.