1package checkers.quals; 2 3import java.lang.annotation.Annotation; 4import java.lang.annotation.Documented; 5import java.lang.annotation.Retention; 6import java.lang.annotation.RetentionPolicy; 7 8/** 9 * Refines the qualified type of the annotated field or variable based on the 10 * qualified type of the receiver. The annotation declares a relationship 11 * between multiple type qualifier hierarchies. 12 * 13 * <p><b>Example:</b> 14 * Consider a field, {@code lock}, that is only initialized if the 15 * enclosing object (the receiver), is marked as {@code ThreadSafe}. 16 * Such a field can be declared as: 17 * 18 * <pre><code> 19 * private @Nullable @Dependent(result=NonNull.class, when=ThreadSafe.class) 20 * Lock lock; 21 * </code></pre> 22 */ 23@Documented 24@Retention(RetentionPolicy.RUNTIME) 25//@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) 26public @interface Dependent { 27 28 /** 29 * The class of the refined qualifier to be applied. 30 */ 31 Class<? extends Annotation> result(); 32 33 /** 34 * The qualifier class of the receiver that causes the {@code result} 35 * qualifier to be applied. 36 */ 37 Class<? extends Annotation> when(); 38} 39