package org.checkerframework.framework.qual;
import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* A meta-annotation that indicates that an annotation is a conditional postcondition annotation,
* i.e., a type-specialized version of {@link EnsuresQualifierIf}. The annotation that is annotated
* as {@link ConditionalPostconditionAnnotation} must have a value called {@code expression} that is
* an array of {@code String}s of the same format and with the same meaning as the value {@code
* expression} in {@link EnsuresQualifierIf}, as well as a value {@code result} with the same
* meaning as the value {@code result} in {@link EnsuresQualifierIf}.
*
* <p>The value {@code qualifier} that is necessary for a conditional postcondition specified with
* {@link EnsuresQualifier} is hard-coded here with the value {@code qualifier}.
*
* @author Stefan Heule
* @see EnsuresQualifier
*/
@Target({ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ConditionalPostconditionAnnotation {
/** The hard-coded qualifier for the postcondition. */
Class<? extends Annotation> qualifier();
}