Signifies that the annotated entity is a public API for extension authors. Public APIs may change in breaking ways
only between major Druid release lines (e.g. 0.10.x -> 0.11.0), but otherwise must remain stable. Public APIs may
change at any time in non-breaking ways, however, such as by adding new fields, methods, or constructors.
Note that interfaces annotated with
PublicApi
but not with
ExtensionPoint
are not meant to be
subclassed in extensions. In this case, the annotation simply signifies that the interface is stable for callers.
In particular, since it is not meant to be subclassed, new non-default methods may be added to an interface and
new abstract methods may be added to a class.
If a class or interface is annotated, then all public and protected fields, methods, and constructors that class
or interface are considered stable in this sense. If a class is not annotated, but an individual field, method, or
constructor is annotated, then only that particular field, method, or constructor is considered a public API.
Classes, fields, method, and constructors _not_ annotated with
@PublicApi
may be modified or removed
in any Druid release, unless they are annotated with
ExtensionPoint
(which implies they are a public API
as well).