Skip to content

Commit 0f7072d

Browse files
Fix to avoid instantiating Validator if conditional expression returns false
1 parent 7f09cf7 commit 0f7072d

File tree

4 files changed

+10
-15
lines changed

4 files changed

+10
-15
lines changed

validator-core/src/main/java/com/github/microtweak/validator/conditional/core/internal/ConditinalDescriptor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class ConditinalDescriptor {
2121
private final Annotation actualConstraint;
2222
private final String constraintMessage;
2323
private final String expression;
24-
private final ConstraintValidator validator;
24+
private final Class<? extends ConstraintValidator> validatorClass;
2525

2626
public ConditinalDescriptor(ConstraintTarget constraintTarget, Annotation conditionalConstraint) {
2727
this.constraintTarget = constraintTarget;
@@ -40,7 +40,7 @@ public ConditinalDescriptor(ConstraintTarget constraintTarget, Annotation condit
4040
throw new IllegalArgumentException("The conditional constraint " + conditionalConstraint.annotationType() + " does not have the attribute \"expression\"!");
4141
}
4242

43-
this.validator = BeanValidationHelper.getConstraintValidatorOf(actualConstraint, (Class<?>) constraintTarget.getType());
43+
this.validatorClass = BeanValidationHelper.findConstraintValidatorClass(actualConstraint.annotationType(), constraintTarget.getType());
4444
}
4545

4646
public String getName() {

validator-core/src/main/java/com/github/microtweak/validator/conditional/core/internal/annotated/ConstraintTarget.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public interface ConstraintTarget {
1818

1919
Class<?> getDeclaringClass();
2020

21-
Type getType();
21+
Class<?> getType();
2222

2323
List<Annotation> getConstraints();
2424

validator-core/src/main/java/com/github/microtweak/validator/conditional/core/internal/annotated/FieldConstraintTarget.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public Class<?> getDeclaringClass() {
3636
}
3737

3838
@Override
39-
public Type getType() {
39+
public Class<?> getType() {
4040
return field.getType();
4141
}
4242

validator-core/src/main/java/com/github/microtweak/validator/conditional/core/internal/helper/BeanValidationHelper.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -86,22 +86,17 @@ public static Annotation getActualBeanValidationContraintOf(Annotation condition
8686
return AnnotationHelper.createAnnotation(actualConstraintType, attributes);
8787
}
8888

89-
@SuppressWarnings("unchecked")
90-
public static <A extends Annotation, CV extends ConstraintValidator<A, ?>> CV getConstraintValidatorOf(A constraint, Class<?> validatedType) {
91-
final Class<CV> constraintValidatorClass = (Class<CV>) findConstraintValidatorClass(constraint.annotationType(), validatedType);
92-
93-
final CV validatorInstance = platformHelper.getConstraintValidatorInstance(constraintValidatorClass);
94-
validatorInstance.initialize(constraint);
95-
return validatorInstance;
96-
}
97-
9889
@SuppressWarnings("unchecked")
9990
public static boolean invokeConstraintValidator(Object validatedBean, ConditinalDescriptor descriptor, ConstraintValidatorContext context) {
10091
final Object value = descriptor.getConstraintTarget().getTargetValue(validatedBean);
101-
return descriptor.getValidator().isValid(value, context);
92+
93+
final ConstraintValidator<Annotation, Object> validator = platformHelper.getConstraintValidatorInstance(descriptor.getValidatorClass());
94+
validator.initialize(descriptor.getActualConstraint());
95+
96+
return validator.isValid(value, context);
10297
}
10398

104-
private static Class<? extends ConstraintValidator> findConstraintValidatorClass(Class<? extends Annotation> constraintClass, Class<?> validatedType) {
99+
public static Class<? extends ConstraintValidator> findConstraintValidatorClass(Class<? extends Annotation> constraintClass, Class<?> validatedType) {
105100
Set<ConstraintValidatorDescriptor> availableValidators = getValidatorAnnotatedInConstraint(constraintClass);
106101

107102
if (ObjectUtils.isEmpty(availableValidators)) {

0 commit comments

Comments
 (0)