@Target(value={TYPE,PACKAGE,ANNOTATION_TYPE}) @Retention(value=RUNTIME) public @interface BuckStyleValue
The generated immutable will be package private only so that the immutable generated class is not used. The declaring interface/abstract class should re-expose constructors as appropriate (like auto-value). It is intended that all users of the immutable ever only refer to the interface/abstract class so that the underlying immmutable implementation can change freely.
Value-style objects have all attributes as "of" constructor parameters, do not have builders, "with" methods, "copy" methods.
When using this annotation, it's unnecessary to explicitly use @Value.Immutable.
If the Value.Immutable behavior needs to be customized, you must explicitly set the values set in the defaults here (otherwise a linter will yell at you).