Annotation Interface TargetLocations
A meta-annotation that restricts the type-use locations where a type qualifier may be applied.
When written together with
@Target({ElementType.TYPE_USE})
, the given type qualifier may
be applied only at locations listed in the @TargetLocations(...)
meta-annotation.
@Target({ElementType.TYPE_USE})
together with no @TargetLocations(...)
means that
the qualifier can be applied to any type use. @TargetLocations({})
means that the
qualifier should not be used in source code. The same goal can be achieved by writing
@Target({})
, which is enforced by javac itself. @TargetLocations({...})
is
enforced by the checker. The resulting errors from the checker can either be suppressed using
@SuppressWarnings("type.invalid.annotations.on.location")
or can be ignored by providing
the -AignoreTargetLocations
option.
This enables a type system designer to permit a qualifier to be applied only in certain
locations. For example, some type systems' top and bottom qualifier (such as RegexBottom
) should only be written on an explicit
wildcard upper or lower bound. This meta-annotation is a declarative, coarse-grained approach to
enable that. For finer-grained control, override visit*
methods that visit trees in
BaseTypeVisitor.
@TargetLocations
are used for all appearances of qualifiers regardless of whether they
are provided explicitly or implicitly (inferred or computed). Therefore, only use type-use
locations LOWER_BOUND/UPPER_BOUND
instead of the IMPLICIT_XX/EXPLICIT_XX
alternatives.
-
Required Element Summary
Modifier and TypeRequired ElementDescriptionType uses at which the qualifier is permitted to be applied in source code.
-
Element Details
-
value
TypeUseLocation[] valueType uses at which the qualifier is permitted to be applied in source code.- Returns:
- type-use locations declared in this meta-annotation
-