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 Wilsonimport java.util.regex.Pattern; 766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson 866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport javax.annotation.meta.TypeQualifier; 966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport javax.annotation.meta.TypeQualifierValidator; 1066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport javax.annotation.meta.When; 1166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson 1266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson@Documented 1366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson@TypeQualifier(applicableTo = String.class) 1466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson@Retention(RetentionPolicy.RUNTIME) 1566e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonpublic @interface MatchesPattern { 1666e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson @RegEx 1766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson String value(); 1866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson 1966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson int flags() default 0; 2066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson 2166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson static class Checker implements TypeQualifierValidator<MatchesPattern> { 2266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson public When forConstantValue(MatchesPattern annotation, Object value) { 2366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson Pattern p = Pattern.compile(annotation.value(), annotation.flags()); 2466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson if (p.matcher(((String) value)).matches()) 2566e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson return When.ALWAYS; 2666e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson return When.NEVER; 2766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson } 2866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson 2966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson } 3066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson} 31