Repository: bval Updated Branches: refs/heads/bv2 339ada646 -> 513606da5
improve handling of non-constrained executables Project: http://git-wip-us.apache.org/repos/asf/bval/repo Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/513606da Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/513606da Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/513606da Branch: refs/heads/bv2 Commit: 513606da5de2d05c31f8adf5c64708ab55098831 Parents: 339ada6 Author: Matt Benson <[email protected]> Authored: Thu Mar 22 12:12:10 2018 -0500 Committer: Matt Benson <[email protected]> Committed: Thu Mar 22 12:12:10 2018 -0500 ---------------------------------------------------------------------- .../apache/bval/jsr/job/ValidateParameters.java | 5 +++ .../bval/jsr/job/ValidateReturnValue.java | 5 +++ .../org/apache/bval/jsr/job/ValidationJob.java | 35 ++++++++++++-------- 3 files changed, 32 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/bval/blob/513606da/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateParameters.java ---------------------------------------------------------------------- diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateParameters.java b/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateParameters.java index c80937f..d4f9668 100644 --- a/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateParameters.java +++ b/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateParameters.java @@ -162,6 +162,11 @@ public abstract class ValidateParameters<E extends Executable, T> extends Valida return new ParametersFrame(describe(), new GraphContext(validatorContext, cp, parameterValues)); } + @Override + protected boolean hasWork() { + return describe() != null; + } + protected abstract ExecutableDescriptor describe(); protected abstract List<String> getParameterNames(ParameterNameProvider parameterNameProvider); http://git-wip-us.apache.org/repos/asf/bval/blob/513606da/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateReturnValue.java ---------------------------------------------------------------------- diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateReturnValue.java b/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateReturnValue.java index ca1deba..d477b72 100644 --- a/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateReturnValue.java +++ b/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidateReturnValue.java @@ -131,6 +131,11 @@ public abstract class ValidateReturnValue<E extends Executable, T> extends Valid context.getConstraintDescriptor().unwrap(ConstraintD.class).getDeclaredOn(), returnValue, null); } + @Override + protected boolean hasWork() { + return describe() != null; + } + protected abstract ExecutableD<?, ?, ?> describe(); protected abstract T getRootBean(); http://git-wip-us.apache.org/repos/asf/bval/blob/513606da/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidationJob.java ---------------------------------------------------------------------- diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidationJob.java b/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidationJob.java index b8f22c1..61dcd39 100644 --- a/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidationJob.java +++ b/bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidationJob.java @@ -489,26 +489,31 @@ public abstract class ValidationJob<T> { if (results.optional().isPresent()) { return results.get(); } - final Frame<?> baseFrame = computeBaseFrame(); - Validate.validState(baseFrame != null, "%s computed null baseFrame", getClass().getName()); + if (hasWork()) { + final Frame<?> baseFrame = computeBaseFrame(); + Validate.validState(baseFrame != null, "%s computed null baseFrame", getClass().getName()); - final Consumer<ConstraintViolation<T>> sink = results.consumer(Set::add); + final Consumer<ConstraintViolation<T>> sink = results.consumer(Set::add); - validatedPathsByConstraint = new ConcurrentHashMap<>(); + validatedPathsByConstraint = new ConcurrentHashMap<>(); - try { - groups.getGroups().stream().map(Group::getGroup).forEach(g -> baseFrame.process(g, sink)); + try { + groups.getGroups().stream().map(Group::getGroup).forEach(g -> baseFrame.process(g, sink)); - sequences: for (List<Group> seq : groups.getSequences()) { - final boolean proceed = each(seq.stream().map(Group::getGroup), baseFrame::process, sink); - if (!proceed) { - break sequences; + sequences: for (List<Group> seq : groups.getSequences()) { + final boolean proceed = each(seq.stream().map(Group::getGroup), baseFrame::process, sink); + if (!proceed) { + break sequences; + } } + } finally { + validatedPathsByConstraint = null; + } + if (results.optional().isPresent()) { + return Collections.unmodifiableSet(results.get()); } - } finally { - validatedPathsByConstraint = null; } - return results.optional().map(Collections::unmodifiableSet).orElse(Collections.emptySet()); + return results.reset(Collections::emptySet).get(); } private boolean each(Stream<Class<?>> groupSequence, BiConsumer<Class<?>, Consumer<ConstraintViolation<T>>> closure, @@ -543,6 +548,10 @@ public abstract class ValidationJob<T> { protected abstract Class<T> getRootBeanClass(); + protected boolean hasWork() { + return true; + } + private final String interpolate(String messageTemplate, MessageInterpolator.Context context) { try { return validatorContext.getMessageInterpolator().interpolate(messageTemplate, context);
