Annotation Type GuardedBy


@Target({FIELD,METHOD}) @Retention(SOURCE) public @interface GuardedBy
The field or method to which this annotation is applied can only be accessed when holding a particular lock, which may be a built-in (synchronization) lock, or may be an explicit Lock.

The argument determines which lock guards the annotated field or method:

  • this : The string literal "this" means that this field is guarded by the class in which it is defined.
  • class-name.this : For inner classes, it may be necessary to disambiguate 'this'; the class-name.this designation allows you to specify which 'this' reference is intended
  • itself : For reference fields only; the object to which the field refers.
  • field-name : The lock object is referenced by the (instance or static) field specified by field-name.
  • class-name.field-name : The lock object is reference by the static field specified by class-name.field-name.
  • method-name() : The lock object is returned by calling the named nil-ary method.
  • class-name.class : The Class object for the specified class should be used as the lock object.

This annotation is similar to GuardedBy but has RetentionPolicy.SOURCE so it is not in published artifacts. We only apply this to private members, so there is no reason to publish them and we avoid requiring end users to have to depend on the annotations in their own build. See the original issue for more info.

This class is internal and is hence not for public use. Its APIs are unstable and can change at any time.

  • Required Element Summary

    Required Elements
    Modifier and Type
    Required Element
    Description
    The name of the object guarding the target.
  • Element Details

    • value

      String value
      The name of the object guarding the target.