package org.hibernate.validator.internal.engine.constraintvalidation;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.EnumSet;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorFactory;
import jakarta.validation.constraintvalidation.ValidationTarget;
import org.hibernate.validator.cfg.context.ConstraintDefinitionContext.ValidationCallable;
public interface ConstraintValidatorDescriptor<A extends Annotation> {
Class<? extends ConstraintValidator<A, ?>> getValidatorClass();
EnumSet<ValidationTarget> getValidationTargets();
Type getValidatedType();
ConstraintValidator<A, ?> newInstance(ConstraintValidatorFactory constraintValidatorFactory);
static <A extends Annotation> ConstraintValidatorDescriptor<A> forClass(Class<? extends ConstraintValidator<A, ?>> validatorClass,
Class<? extends Annotation> constraintAnnotationType) {
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 );
}
}