-
Notifications
You must be signed in to change notification settings - Fork 40
Description
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:
- The wildcard
*match on the annotation type causes the build system to match annotations that are incompatible with an aggregate processor type. - Narrowing down the list to just the two annotations causes subsequent incremental builds to delete the index files. This might be related to one of the annotations being a meta-annotation (inheritance?).
There could be two solutions in theory:
- Figure out the incremental build troubles and the non-wildcard match (hard).
- Rewrite the index format to enable the processor to run in isolation (each input produces an independent output) this would avoid problem 1, I think.
To reproduce, run the build of the demo project:
./gradlew :examples:gradle-build:jar --info
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:
Full recompilation is required because '@AllArgsConstructor' has source retention. Aggregating annotation processors require class or runtime retention.
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.