Skip to content

Gradle incremental - the final problem #74

@igor-makarov

Description

@igor-makarov

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:

  1. The wildcard * match on the annotation type causes the build system to match annotations that are incompatible with an aggregate processor type.
  2. 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:

  1. Figure out the incremental build troubles and the non-wildcard match (hard).
  2. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions