166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonpackage javax.annotation.meta;
266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport java.lang.annotation.Documented;
466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport java.lang.annotation.Retention;
566e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport java.lang.annotation.RetentionPolicy;
666e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson/**
866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * This annotation can be applied to the value() element of an annotation that
966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * is annotated as a TypeQualifier. This is only appropriate if the value field
1066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * returns a value that is an Enumeration.
1166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson *
1266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * Applications of the type qualifier with different values are exclusive, and
1366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * the enumeration is an exhaustive list of the possible values.
1466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson *
1566e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * For example, the following defines a type qualifier such that if you know a
1666e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * value is neither {@literal @Foo(Color.Red)} or {@literal @Foo(Color.Blue)},
1766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * then the value must be {@literal @Foo(Color.Green)}. And if you know it is
1866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * {@literal @Foo(Color.Green)}, you know it cannot be
1966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * {@literal @Foo(Color.Red)} or {@literal @Foo(Color.Blue)}
2066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson *
2166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * <code>
2266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * @TypeQualifier  @interface Foo {
2366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson *     enum Color {RED, BLUE, GREEN};
2466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson *     @Exhaustive Color value();
2566e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson *     }
2666e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson *  </code>
2766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson */
2866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
2966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson@Documented
3066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson@Retention(RetentionPolicy.RUNTIME)
3166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonpublic @interface Exhaustive {
3266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
3366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson}
34