@@ -20,50 +20,35 @@ public class Validator {
2020 private static final Map <String , Constructor <? extends ValidationRule >> validationRules = new HashMap <>();
2121 private static final Map <Class <?>, Validator > validators = new HashMap <>();
2222
23- private static final List <Class <? extends Annotation >> RULE_ANNOTATIONS = Arrays .asList (
24- StringRule .class ,
25- BooleanRule .class ,
26- EnumRule .class ,
27- RequiredRule .class ,
28- IPv4AddressRule .class ,
29- IPv6AddressRule .class ,
30- IntegerRule .class ,
31- NumericRule .class ,
32- DateRule .class ,
33- ArrayRule .class ,
34- AlphaRule .class ,
35- AlphaNumRule .class ,
36- AlphaDashRule .class ,
37- EmailRule .class ,
38- RegexRule .class ,
39- UUIDRule .class
40- );
23+ private static final List <Class <? extends Annotation >> ruleAnnotationClasses = new ArrayList <>();
4124
4225 static {
43- registerRuleType ("string" , StringRule .Validator .class );
44- registerRuleType ("boolean" , BooleanRule .Validator .class );
45- registerRuleType ("bool" , BooleanRule .Validator .class );
46- registerRuleType ("enum" , EnumRule .Validator .class );
47- registerRuleType ("required" , RequiredRule .Validator .class );
48- registerRuleType ("req" , RequiredRule .Validator .class );
49- registerRuleType ("ipv4" , IPv4AddressRule .Validator .class );
50- registerRuleType ("ipv6" , IPv6AddressRule .Validator .class );
51- registerRuleType ("int" , IntegerRule .Validator .class );
52- registerRuleType ("integer" , IntegerRule .Validator .class );
53- registerRuleType ("numeric" , NumericRule .Validator .class );
54- registerRuleType ("num" , NumericRule .Validator .class );
55- registerRuleType ("date" , DateRule .Validator .class );
56- registerRuleType ("array" , ArrayRule .Validator .class );
57- registerRuleType ("list" , ArrayRule .Validator .class );
58- registerRuleType ("alpha" , AlphaRule .Validator .class );
59- registerRuleType ("alpha_num" , AlphaNumRule .Validator .class );
60- registerRuleType ("alpha_dash" , AlphaDashRule .Validator .class );
61- registerRuleType ("email" , EmailRule .Validator .class );
62- registerRuleType ("regex" , RegexRule .Validator .class );
63- registerRuleType ("uuid" , UUIDRule .Validator .class );
26+ registerRuleType ("string" , StringRule .Validator . class , StringRule .class );
27+ registerRuleType ("boolean" , BooleanRule .Validator . class , BooleanRule .class );
28+ registerRuleType ("bool" , BooleanRule .Validator . class , BooleanRule .class );
29+ registerRuleType ("enum" , EnumRule .Validator . class , EnumRule .class );
30+ registerRuleType ("required" , RequiredRule .Validator . class , RequiredRule .class );
31+ registerRuleType ("req" , RequiredRule .Validator . class , RequiredRule .class );
32+ registerRuleType ("ipv4" , IPv4AddressRule .Validator . class , IPv4AddressRule .class );
33+ registerRuleType ("ipv6" , IPv6AddressRule .Validator . class , IPv6AddressRule .class );
34+ registerRuleType ("int" , IntegerRule .Validator . class , IntegerRule .class );
35+ registerRuleType ("integer" , IntegerRule .Validator . class , IntegerRule .class );
36+ registerRuleType ("numeric" , NumericRule .Validator . class , NumericRule .class );
37+ registerRuleType ("num" , NumericRule .Validator . class , NumericRule .class );
38+ registerRuleType ("date" , DateRule .Validator . class , DateRule .class );
39+ registerRuleType ("array" , ArrayRule .Validator . class , ArrayRule .class );
40+ registerRuleType ("list" , ArrayRule .Validator . class , ArrayRule .class );
41+ registerRuleType ("alpha" , AlphaRule .Validator . class , AlphaRule .class );
42+ registerRuleType ("alpha_num" , AlphaNumRule .Validator . class , AlphaNumRule .class );
43+ registerRuleType ("alpha_dash" , AlphaDashRule .Validator .class , AlphaDashRule . class );
44+ registerRuleType ("email" , EmailRule .Validator . class , EmailRule .class );
45+ registerRuleType ("regex" , RegexRule .Validator . class , RegexRule .class );
46+ registerRuleType ("uuid" , UUIDRule .Validator . class , UUIDRule .class );
6447 }
6548
66- public static void registerRuleType (String name , Class <? extends ValidationRule > type ) {
49+ public static void registerRuleType (String name , Class <? extends ValidationRule > type , Class <? extends Annotation > annotationClass ) {
50+ if (!ruleAnnotationClasses .contains (annotationClass ))
51+ ruleAnnotationClasses .add (annotationClass );
6752 try {
6853 Constructor <? extends ValidationRule > constructor = type .getDeclaredConstructor (String [].class );
6954 constructor .setAccessible (true );
@@ -373,13 +358,14 @@ private static Map<String[], ValidationConfig> getClassRules(Field field, Class<
373358 if (r .size () > 0 )
374359 addMapRules (f , rules , new String []{name }, r );
375360 }
376- for (Class <? extends Annotation > annotation : RULE_ANNOTATIONS ) {
361+ for (Class <? extends Annotation > annotation : ruleAnnotationClasses ) {
377362 Annotation a = f .getDeclaredAnnotation (annotation );
378363 if (a != null ) {
379364 List <ValidationRule > r = new ArrayList <>();
380365 try {
381366 Class <?> validatorClazz = Class .forName (annotation .getName () + "$Validator" ); // stupid way of doing this;
382- Constructor <ValidationRule > constructor = (Constructor <ValidationRule >) validatorClazz .getConstructor (annotation );
367+ Constructor <ValidationRule > constructor = (Constructor <ValidationRule >) validatorClazz .getDeclaredConstructor (annotation );
368+ constructor .setAccessible (true );
383369 r .add (constructor .newInstance (a ));
384370 } catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException ignored ) {}
385371 if (r .size () > 0 )
0 commit comments