You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by mb...@apache.org on 2018/03/27 16:49:02 UTC
[2/5] bval git commit: implement validationAppliesTo rules
implement validationAppliesTo rules
Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/8864228a
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/8864228a
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/8864228a
Branch: refs/heads/bv2
Commit: 8864228a46246ef93752efef7173893271ac314a
Parents: 66e9714
Author: Matt Benson <mb...@apache.org>
Authored: Tue Mar 27 10:22:29 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Tue Mar 27 10:22:29 2018 -0500
----------------------------------------------------------------------
.../apache/bval/jsr/descriptor/ConstraintD.java | 30 +++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/bval/blob/8864228a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/ConstraintD.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/ConstraintD.java b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/ConstraintD.java
index bd8c1f8..d8bb932 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/ConstraintD.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/ConstraintD.java
@@ -20,6 +20,8 @@ package org.apache.bval.jsr.descriptor;
import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Executable;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -75,6 +77,7 @@ public class ConstraintD<A extends Annotation> implements ConstraintDescriptor<A
private final boolean reportAsSingle;
private final ValidateUnwrappedValue valueUnwrapping;
private final Map<String, Object> attributes;
+ private final ConstraintTarget validationAppliesTo;
private final Set<ConstraintDescriptor<?>> composingConstraints;
private final List<Class<? extends ConstraintValidator<A, ?>>> constraintValidatorClasses;
@@ -89,6 +92,7 @@ public class ConstraintD<A extends Annotation> implements ConstraintDescriptor<A
reportAsSingle = annotation.annotationType().isAnnotationPresent(ReportAsSingleViolation.class);
valueUnwrapping = computeValidateUnwrappedValue();
attributes = AnnotationsManager.readAttributes(annotation);
+ validationAppliesTo = computeValidationAppliesTo(meta.getElementType());
Validate.notNull(validatorFactory, "validatorFactory");
composingConstraints = computeComposingConstraints(validatorFactory);
@@ -137,7 +141,7 @@ public class ConstraintD<A extends Annotation> implements ConstraintDescriptor<A
@Override
public ConstraintTarget getValidationAppliesTo() {
- return read(ConstraintAnnotationAttributes.VALIDATION_APPLIES_TO);
+ return validationAppliesTo;
}
@Override
@@ -224,4 +228,28 @@ public class ConstraintD<A extends Annotation> implements ConstraintDescriptor<A
}
return result;
}
+
+ private ConstraintTarget computeValidationAppliesTo(ElementType elementType) {
+ final ConstraintTarget result = read(ConstraintAnnotationAttributes.VALIDATION_APPLIES_TO);
+ if (result != null) {
+ final AnnotatedElement host = meta.getHost();
+ Exceptions.raiseUnless(host instanceof Executable, ConstraintDeclarationException::new, "Illegal %s on %s",
+ result, host);
+
+ switch (result) {
+ case PARAMETERS:
+ Exceptions.raiseIf(((Executable) host).getParameterCount() == 0, ConstraintDeclarationException::new,
+ "Illegal specification of %s on %s with no parameters", result, elementType);
+ break;
+ case RETURN_VALUE:
+ Exceptions.raiseIf(Void.TYPE.equals(meta.getType()), ConstraintDeclarationException::new,
+ "Illegal %s on %s method %s", result, Void.TYPE, host);
+ break;
+ case IMPLICIT:
+ // handled in ReflectionBuilder
+ default:
+ }
+ }
+ return result;
+ }
}