@Documented
@Target({TYPE, METHOD, CONSTRUCTOR, FIELD})
@Retention(CLASS)
public @interface GroovyABI
Marks a program element as part of Groovy's binary ABI.
Elements annotated with @GroovyABI may be referenced directly by
bytecode generated by the Groovy compiler. Their signatures and semantics
therefore form part of the compatibility contract between compiled Groovy
classes and the Groovy runtime.
Changes to annotated elements must preserve binary compatibility with previously compiled Groovy code unless the corresponding compatibility guarantee is intentionally dropped.
This annotation is intended only for members that are referenced by bytecode which may outlive the compiler version that produced it. Members used exclusively by bytecode generated at runtime by the current Groovy version should not be annotated.
Prefer annotating the type when every reachable member shares the same
since() value; annotate members individually only when their
since differs or only part of the type is part of the ABI.
Do not apply @GroovyABI to private fields or methods. The
compiler-emitted bytecode that makes up this contract lives in a separate
class, so it can never reference a private member of the runtime type; such
members are not part of the binary ABI surface.
since records the first Groovy release in which the element
became part of the binary ABI. It is mandatory and must use the full
three-part version form, e.g. "1.0.0".
Retention. This marker has RetentionPolicy.CLASS retention: it survives into published class files so the build's binary compatibility tooling can rely on it.
Notes: