if (validationAppliesTo != null && !ConstraintTarget.IMPLICIT.equals(validationAppliesTo.getDefaultValue())) {
throw new ConstraintDefinitionException("validationAppliesTo default value should be IMPLICIT");
}
// valid validationAppliesTo
final Constraint annotation = annotationType.getAnnotation(Constraint.class);
if (annotation == null) {
return;
}
final Pair validationTarget = computeValidationTarget(annotation.validatedBy());
for (final Annotation a : annotationType.getAnnotations()) {
final Class<? extends Annotation> aClass = a.annotationType();
if (aClass.getName().startsWith("java.lang.annotation.")) {
continue;
}
final Constraint inheritedConstraint = aClass.getAnnotation(Constraint.class);
if (inheritedConstraint != null && !aClass.getName().startsWith("javax.validation.constraints.")) {
final Pair validationTargetInherited = computeValidationTarget(inheritedConstraint.validatedBy());
if ((validationTarget.a > 0 && validationTargetInherited.b > 0 && validationTarget.b == 0)
|| (validationTarget.b > 0 && validationTargetInherited.a > 0 && validationTarget.a == 0)) {
throw new ConstraintDefinitionException("Parent and child constraint have different targets");
}
}