001    package edu.rice.cs.cunit.threadCheck.subAnnot.predicates;
002    
003    import edu.rice.cs.cunit.threadCheck.subAnnot.PredicateLink;
004    import edu.rice.cs.cunit.threadCheck.subAnnot.Predicates;
005    import edu.rice.cs.cunit.threadCheck.subAnnot.InvariantAnnotation;
006    
007    import java.lang.annotation.ElementType;
008    import java.lang.annotation.Retention;
009    import java.lang.annotation.RetentionPolicy;
010    import java.lang.annotation.Target;
011    
012    /**
013     * An annotation used to designate methods that are only allowed to be run by the event thread.
014     * @author Mathias Ricken
015     */
016    @Retention(RetentionPolicy.RUNTIME)
017    @Target({ElementType.CONSTRUCTOR,ElementType.METHOD,ElementType.TYPE})
018    
019    @PredicateLink(value = Predicates.class, method = "checkEventThread")
020    public @interface EventThread extends InvariantAnnotation {
021    
022        //
023        // nested interfaces
024        //
025    
026        /**
027         * An annotation used to designate methods that are only allowed to be run by the event thread
028         * after the component has been realized. Before that, any thread is allowed.
029         * @author Mathias Ricken
030         */
031        @Retention(RetentionPolicy.RUNTIME)
032        @Target({ElementType.CONSTRUCTOR,ElementType.METHOD,ElementType.TYPE})
033        
034        @PredicateLink(value = Predicates.class, method = "checkEventThreadAfterRealized")
035        public @interface AfterRealized extends InvariantAnnotation {
036        }
037    }