package org.checkerframework.framework.qual;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.LOCAL_VARIABLE;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PACKAGE;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Specifies the annotations to be included in a type without having to provide them explicitly.
*
* <p>This annotation permits specifying multiple default qualifiers for more than one type system.
* It is necessary because Java forbids multiple annotations of the same name at a single location.
*
* <p>Example:
* <!-- is a hack that prevents @ from being the first character on the line, which confuses Javadoc -->
*
* <pre>
* @DefaultQualifiers({
* @DefaultQualifier(NonNull.class),
* @DefaultQualifier(value = Interned.class, locations = ALL_EXCEPT_LOCALS),
* @DefaultQualifier(Tainted.class)
* })
* </pre>
*
* @see DefaultQualifier
*/
// TODO: use repeating annotations (will make source depend on Java 8).
@Documented
@Retention(RetentionPolicy.SOURCE)
@Target({PACKAGE, TYPE, CONSTRUCTOR, METHOD, FIELD, LOCAL_VARIABLE, PARAMETER})
public @interface DefaultQualifiers {
/** The default qualifier settings */
DefaultQualifier[] value() default {};
}