159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapackage checkers.quals;
259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.lang.annotation.Documented;
459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport static java.lang.annotation.ElementType.*;
559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.lang.annotation.Retention;
659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.lang.annotation.RetentionPolicy;
759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.lang.annotation.Target;
859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/**
1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Applied to a declaration of a package, type, method, variable, etc.,
1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * specifies that the given annotation should be the default.  The default is
1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * applied to all types within the declaration for which no other
1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * annotation is explicitly written.
1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * If multiple DefaultQualifier annotations are in scope, the innermost one
1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * takes precedence.
1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * DefaultQualifier takes precedence over {@link DefaultQualifierInHierarchy}.
1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p>
1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta *
1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * If you wish to write multiple @DefaultQualifier annotations (for
2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * unrelated type systems, or with different {@code locations} fields) at
2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the same location, use {@link DefaultQualifiers}.
2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta *
2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see DefaultLocation
2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */
2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta@Documented
2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta@Retention(RetentionPolicy.RUNTIME)
2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta@Target({CONSTRUCTOR, METHOD, FIELD, LOCAL_VARIABLE, PARAMETER, TYPE})
2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapublic @interface DefaultQualifier {
2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    /**
3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * The name of the default annotation.  It may be a short name like
3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * "NonNull", if an appropriate import statement exists.  Otherwise, it
3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * should be fully-qualified, like "checkers.nullness.quals.NonNull".
3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * <p>
3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     *
3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * To prevent affecting other type systems, always specify an annotation
3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * in your own type hierarchy.  (For example, do not set
3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * "checkers.quals.Unqualified" as the default.)
3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     */
4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    String value();
4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    /** @return the locations to which the annotation should be applied */
4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    DefaultLocation[] locations() default {DefaultLocation.ALL};
4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta}
45