1 package javax.annotation.meta;
2 
3 import java.lang.annotation.Documented;
4 import java.lang.annotation.Retention;
5 import java.lang.annotation.RetentionPolicy;
6 
7 /**
8  * This annotation can be applied to the value() element of an annotation that
9  * is annotated as a TypeQualifier. This is only appropriate if the value field
10  * returns a value that is an Enumeration.
11  *
12  * Applications of the type qualifier with different values are exclusive, and
13  * the enumeration is an exhaustive list of the possible values.
14  *
15  * For example, the following defines a type qualifier such that if you know a
16  * value is neither {@literal @Foo(Color.Red)} or {@literal @Foo(Color.Blue)},
17  * then the value must be {@literal @Foo(Color.Green)}. And if you know it is
18  * {@literal @Foo(Color.Green)}, you know it cannot be
19  * {@literal @Foo(Color.Red)} or {@literal @Foo(Color.Blue)}
20  *
21  * <code>
22  * @TypeQualifier  @interface Foo {
23  *     enum Color {RED, BLUE, GREEN};
24  *     @Exhaustive Color value();
25  *     }
26  *  </code>
27  */
28 
29 @Documented
30 @Retention(RetentionPolicy.RUNTIME)
31 public @interface Exhaustive {
32 
33 }
34