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 Wilsonimport java.util.regex.PatternSyntaxException; 866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson 966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport javax.annotation.meta.TypeQualifierNickname; 1066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport javax.annotation.meta.TypeQualifierValidator; 1166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport javax.annotation.meta.When; 1266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson 1366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson/** 1466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * This qualifier is used to denote String values that should be a Regular 1566e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * expression. 1666e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * 1766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson */ 1866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson@Documented 1966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson@Syntax("RegEx") 2066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson@TypeQualifierNickname 2166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson@Retention(RetentionPolicy.RUNTIME) 2266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonpublic @interface RegEx { 2366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson When when() default When.ALWAYS; 2466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson 2566e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson static class Checker implements TypeQualifierValidator<RegEx> { 2666e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson 2766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson public When forConstantValue(RegEx annotation, Object value) { 2866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson if (!(value instanceof String)) 2966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson return When.NEVER; 3066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson 3166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson try { 3266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson Pattern.compile((String) value); 3366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson } catch (PatternSyntaxException e) { 3466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson return When.NEVER; 3566e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson } 3666e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson return When.ALWAYS; 3766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson 3866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson } 3966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson 4066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson } 4166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson 4266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson} 43