summaryrefslogtreecommitdiffstats
path: root/sampleUses/src/main/java/CreditCardNumber.java
diff options
context:
space:
mode:
Diffstat (limited to 'sampleUses/src/main/java/CreditCardNumber.java')
-rw-r--r--sampleUses/src/main/java/CreditCardNumber.java27
1 files changed, 27 insertions, 0 deletions
diff --git a/sampleUses/src/main/java/CreditCardNumber.java b/sampleUses/src/main/java/CreditCardNumber.java
new file mode 100644
index 0000000..ef5f711
--- /dev/null
+++ b/sampleUses/src/main/java/CreditCardNumber.java
@@ -0,0 +1,27 @@
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.annotation.MatchesPattern;
+import javax.annotation.meta.TypeQualifier;
+import javax.annotation.meta.TypeQualifierValidator;
+import javax.annotation.meta.When;
+
+@Documented
+@TypeQualifier
+@MatchesPattern("[0-9]{16}")
+@Retention(RetentionPolicy.RUNTIME)
+public @interface CreditCardNumber {
+ class Checker implements TypeQualifierValidator<CreditCardNumber> {
+
+ public When forConstantValue(CreditCardNumber annotation, Object v) {
+ if (!(v instanceof String))
+ return When.NEVER;
+ String s = (String) v;
+ if (LuhnVerification.checkNumber(s))
+ return When.ALWAYS;
+ return When.NEVER;
+ }
+ }
+}