166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonpackage javax.annotation;
266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport java.lang.annotation.Documented;
466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport java.lang.annotation.Retention;
566e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport java.lang.annotation.RetentionPolicy;
666e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport javax.annotation.meta.TypeQualifier;
866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport javax.annotation.meta.When;
966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
1066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson/**
1166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * This annotation a value that is of a particular syntax, such as Java syntax
1266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * or regular expression syntax. This can be used to provide syntax checking of
1366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * constant values at compile time, run time checking at runtime, and can assist
1466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * IDEs in deciding how to interpret String constants (e.g., should a
1566e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * refactoring that renames method x() to y() update the String constant "x()").
1666e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson *
1766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson *
1866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson */
1966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson@Documented
2066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson@TypeQualifier(applicableTo = String.class)
2166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson@Retention(RetentionPolicy.RUNTIME)
2266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonpublic @interface Syntax {
2366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson    /**
2466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     * Value indicating the particular syntax denoted by this annotation.
2566e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     * Different tools will recognize different syntaxes, but some proposed
2666e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     * canonical values are:
2766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     * <ul>
2866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     * <li> "Java"
2966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     * <li> "RegEx"
3066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     * <li> "JavaScript"
3166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     * <li> "Ruby"
3266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     * <li> "Groovy"
3366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     * <li> "SQL"
3466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     * <li> "FormatString"
3566e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     * </ul>
3666e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     *
3766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     * Syntax names can be followed by a colon and a list of key value pairs,
3866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     * separated by commas. For example, "SQL:dialect=Oracle,version=2.3". Tools
3966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     * should ignore any keys they don't recognize.
4066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson     */
4166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson    String value();
4266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
4366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson    When when() default When.ALWAYS;
4466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson}
45