I wrote an annotation processor for [0].
If you use Kotlin instead of Java it's way better because no nullability-issues and it's super-useful standard-library.
And once you've figured out how to hook it into gradle, IDEA etc., which admittedly cost me an hour or so, you can reuse that knowledge for every annotation-processor to come.
I made it a habit to set myself a time-limit EVERY time I start touching the build-process. After the limit has passed it must be faster, more automated, or in any other way more useful, or I will revert the changes.
[0] https://medium.com/@spitzwegerich/generated-json-serialisati...