Skip to content

Commit

Permalink
HV-1770 Relax constraint consistency checking for built-in constraints
Browse files Browse the repository at this point in the history
  • Loading branch information
gsmet committed Apr 17, 2020
1 parent fca1e49 commit c84093b
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 2 deletions.
Expand Up @@ -52,6 +52,15 @@ public static <T extends Annotation> ClassBasedValidatorDescriptor<T> of(Class<?
return new ClassBasedValidatorDescriptor<T>( validatorClass );
}

/**
* Constraint checking is relaxed for built-in constraints as they have been carefully crafted so we are sure types
* are right.
*/
public static <T extends Annotation> ClassBasedValidatorDescriptor<T> ofBuiltin(Class<? extends ConstraintValidator<T, ?>> validatorClass,
Class<? extends Annotation> registeredConstraintAnnotationType) {
return new ClassBasedValidatorDescriptor<T>( validatorClass );
}

private static EnumSet<ValidationTarget> determineValidationTargets(Class<? extends ConstraintValidator<?, ?>> validatorClass) {
SupportedValidationTarget supportedTargetAnnotation = validatorClass.getAnnotation(
SupportedValidationTarget.class );
Expand Down
Expand Up @@ -49,6 +49,11 @@ static <A extends Annotation> ConstraintValidatorDescriptor<A> forClass(Class<?
return ClassBasedValidatorDescriptor.of( validatorClass, constraintAnnotationType );
}

static <A extends Annotation> ConstraintValidatorDescriptor<A> forBuiltinClass(Class<? extends ConstraintValidator<A, ?>> validatorClass,
Class<? extends Annotation> constraintAnnotationType) {
return ClassBasedValidatorDescriptor.ofBuiltin( validatorClass, constraintAnnotationType );
}

static <A extends Annotation, T> ConstraintValidatorDescriptor<A> forLambda(Class<A> annotationType, Type validatedType, ValidationCallable<T> lambda) {
return new LambdaBasedValidatorDescriptor<>( validatedType, lambda );
}
Expand Down
Expand Up @@ -815,15 +815,15 @@ private static <A extends Annotation> void putBuiltinConstraint(Map<Class<? exte

private static <A extends Annotation> void putBuiltinConstraint(Map<Class<? extends Annotation>, List<ConstraintValidatorDescriptor<?>>> validators,
Class<A> constraintType, Class<? extends ConstraintValidator<A, ?>> validatorType) {
validators.put( constraintType, Collections.singletonList( ConstraintValidatorDescriptor.forClass( validatorType, constraintType ) ) );
validators.put( constraintType, Collections.singletonList( ConstraintValidatorDescriptor.forBuiltinClass( validatorType, constraintType ) ) );
}

private static <A extends Annotation> void putBuiltinConstraints(Map<Class<? extends Annotation>, List<ConstraintValidatorDescriptor<?>>> validators,
Class<A> constraintType, List<Class<? extends ConstraintValidator<A, ?>>> validatorTypes) {
List<ConstraintValidatorDescriptor<?>> descriptors = new ArrayList<>( validatorTypes.size() );

for ( Class<? extends ConstraintValidator<A, ?>> validatorType : validatorTypes ) {
descriptors.add( ConstraintValidatorDescriptor.forClass( validatorType, constraintType ) );
descriptors.add( ConstraintValidatorDescriptor.forBuiltinClass( validatorType, constraintType ) );
}

validators.put( constraintType, CollectionHelper.toImmutableList( descriptors ) );
Expand Down

0 comments on commit c84093b

Please sign in to comment.