1*b04680f1SMatt Gilbride import java.lang.annotation.Documented; 2*b04680f1SMatt Gilbride import java.lang.annotation.Retention; 3*b04680f1SMatt Gilbride import java.lang.annotation.RetentionPolicy; 4*b04680f1SMatt Gilbride 5*b04680f1SMatt Gilbride import javax.annotation.meta.TypeQualifier; 6*b04680f1SMatt Gilbride import javax.annotation.meta.TypeQualifierValidator; 7*b04680f1SMatt Gilbride import javax.annotation.meta.When; 8*b04680f1SMatt Gilbride 9*b04680f1SMatt Gilbride @Documented 10*b04680f1SMatt Gilbride @TypeQualifier(applicableTo=String.class) 11*b04680f1SMatt Gilbride @Retention(RetentionPolicy.RUNTIME) 12*b04680f1SMatt Gilbride public @interface FixedLengthString { value()13*b04680f1SMatt Gilbride int value(); 14*b04680f1SMatt Gilbride 15*b04680f1SMatt Gilbride class Checker implements TypeQualifierValidator<FixedLengthString> { 16*b04680f1SMatt Gilbride forConstantValue(FixedLengthString annotation, Object v)17*b04680f1SMatt Gilbride public When forConstantValue(FixedLengthString annotation, Object v) { 18*b04680f1SMatt Gilbride if (!(v instanceof String)) 19*b04680f1SMatt Gilbride return When.NEVER; 20*b04680f1SMatt Gilbride String s = (String) v; 21*b04680f1SMatt Gilbride if (s.length() == annotation.value()) 22*b04680f1SMatt Gilbride return When.ALWAYS; 23*b04680f1SMatt Gilbride return When.NEVER; 24*b04680f1SMatt Gilbride } 25*b04680f1SMatt Gilbride } 26*b04680f1SMatt Gilbride }