xref: /aosp_15_r20/external/jsr305/sampleUses/src/main/java/FixedLengthString.java (revision b04680f1c99af11485d01a884cf292a99837b6c5)
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 }