1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
package compbio.util.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 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 java.util.concurrent.Lock.
*
* The argument determines which lock guards the annotated field or method:
* <ul>
* <li>
* <code>this</code> : The intrinsic lock of the object in whose class the field
* is defined.</li>
* <li>
* <code>class-name.this</code> : For inner classes, it may be necessary to
* disambiguate 'this'; the <em>class-name.this</em> designation allows you to
* specify which 'this' reference is intended</li>
* <li>
* <code>itself</code> : For reference fields only; the object to which the
* field refers.</li>
* <li>
* <code>field-name</code> : The lock object is referenced by the (instance or
* static) field specified by <em>field-name</em>.</li>
* <li>
* <code>class-name.field-name</code> : The lock object is reference by the
* static field specified by <em>class-name.field-name</em>.</li>
* <li>
* <code>method-name()</code> : The lock object is returned by calling the named
* method.</li>
* <li>
* <code>class-name.class</code> : The Class object for the specified class
* should be used as the lock object.</li>
*
* @version 1.0 October 2009
*/
@Target({ ElementType.FIELD, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface GuardedBy {
String value();
}
|