001 package edu.rice.cs.cunit.threadCheck; 002 003 import java.lang.annotation.RetentionPolicy; 004 import java.lang.annotation.Target; 005 import java.lang.annotation.ElementType; 006 import java.lang.annotation.Retention; 007 008 /** 009 * Meta-annotation that provides a link to a class and method that serve as predicate. 010 * That method has to be accessible from a static context, return boolean, accept Object 011 * as first parameter, and have parameters with the types and names of each of the 012 * members contained in the annotation annotated by @PredicateLink, except for members 013 * that are annotations or arrays of annotations. 014 * 015 * The @PredicateLink meta-annotation lets the Thread Checker know that the annotation 016 * interface annotated with it is intended to be processed by the Thread Checker. 017 * 018 * An annotation interface annotated with @PredicateLink may not contain other 019 * annotations or arrays of annotations as members. 020 * 021 * The @PredicateLink and @Combine meta-annotations are mutually exclusive. 022 * @author Mathias Ricken 023 */ 024 @Retention(RetentionPolicy.RUNTIME) 025 @Target({ElementType.ANNOTATION_TYPE}) 026 public @interface PredicateLink { 027 /** 028 * Class containing the predicate method. 029 * @return class containing the predicate method. 030 */ 031 Class value(); 032 033 /** 034 * Name of the predicate method. If not specified, the name "check" is assumed. 035 * @return name of the predicate method. 036 */ 037 String method() default "check"; 038 039 /** 040 * True if method arguments should be passed to the predicate method. If not specified, false is assumed. 041 * @return true if method arguments should be passed 042 */ 043 boolean arguments() default false; 044 }