Here's the basic gist of why we think this is a bad idea / impossible to deliver in a fashion that fits what lombok is for:
`@NonNull` is about the reference itself, whereas anything else you care to think about isn't about the thing the reference is pointing at.
And therein lies the rub. Whatever does `@NonEmpty` mean? I guess you could make a list. Perhaps:
* If on a `java.lang.String`, then it means the string's length is more than 0.
* If on a `java.lang.Collection`, then it means: its `.size()` returns non-zero.
* If on anything else, it's a compile-time error.
OR perhaps:
* Whatever if it is, it must have an `isEmpty()` method, it will be checked, and it must return `false`.
OR perhaps:
* If on a `java.lang.String`, then it means the string's length __after trimming__ is more than 0. The string " " also fails the test.
* If on a `java.lang.Iterable`, make an iterator and invoke its `hasNext()` method. It must not be false.
Now, reading all that, tell me: Have you even considered that the first and third option are in any universe the wrong answer, because we forgot about `java.util.Map` which is neither Iterable nor a Collection and yet is obviously something one would consider eligible for a `@NonEmpty` annotation? I bet many wouldn't have, which goes some way to prove that it is actually far more complicated than you think this is. What about `java.nio.file.Path` or `java.io.File` objects and what it should mean for those, or perhaps Stream, InputStream, or Reader? One might expect something there, but it is not possible to non-destructively check for emptiness on these.
Should it be an extensible system where you can register 'handlers' for types and such annotations? How would one go about registering these?
Read up on resolution (
https://github.com/projectlombok/lombok/wiki/LOMBOK-CONCEPT:-Resolution ) - that explains this maxim: Lombok doesn't actually know what `String` might be, at least, not easily. At best you can ask: Is this node `String` in this sourcecode highly likely to be `java.lang.String`? - This thoroughly complicates any attempt at an extensible design.
So, none of these have a clear meaning (e.g. does `@NonEmpty` apply to files? What about all-whitespace strings?) - and even if you accept that significant downside, the system is either non-extensible or requires a sizable manual to read first. None of this is good for lombok.