Repository: bval Updated Branches: refs/heads/bv2 51b9ab27b -> b7b7a1032
TCK: DefaultGroupRedefinitionTest Project: http://git-wip-us.apache.org/repos/asf/bval/repo Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/dda3f942 Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/dda3f942 Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/dda3f942 Branch: refs/heads/bv2 Commit: dda3f942bcc95ca2e4def054c6580255039e4f4d Parents: 51b9ab2 Author: Matt Benson <mben...@apache.org> Authored: Mon Mar 12 17:19:18 2018 -0500 Committer: Matt Benson <mben...@apache.org> Committed: Mon Mar 12 17:19:18 2018 -0500 ---------------------------------------------------------------------- .../apache/bval/jsr/descriptor/ElementD.java | 21 +++++++----- .../org/apache/bval/jsr/job/ValidationJob.java | 35 +++++++++----------- 2 files changed, 27 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/bval/blob/dda3f942/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/ElementD.java ---------------------------------------------------------------------- diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/ElementD.java b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/ElementD.java index 249b555..a788c14 100644 --- a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/ElementD.java +++ b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/ElementD.java @@ -29,6 +29,7 @@ import java.util.Set; import javax.validation.metadata.ConstraintDescriptor; import javax.validation.metadata.ElementDescriptor; +import org.apache.bval.jsr.metadata.Meta; import org.apache.bval.util.Validate; import org.apache.bval.util.reflection.TypeUtils; @@ -72,16 +73,14 @@ public abstract class ElementD<E extends AnnotatedElement, R extends MetadataRea protected final Type genericType; - private final E target; - private final ElementType elementType; + private final Meta<E> meta; private final Set<ConstraintD<?>> constraints; protected ElementD(R reader) { super(); Validate.notNull(reader, "reader"); + this.meta = reader.meta; this.genericType = reader.meta.getType(); - this.target = reader.meta.getHost(); - this.elementType = reader.meta.getElementType(); this.constraints = reader.getConstraints(); } @@ -102,21 +101,25 @@ public abstract class ElementD<E extends AnnotatedElement, R extends MetadataRea } public final ElementType getElementType() { - return elementType; + return meta.getElementType(); } public final E getTarget() { - return target; + return meta.getHost(); + } + + public final Class<?> getDeclaringClass() { + return meta.getDeclaringClass(); } public abstract Type getGenericType(); public abstract List<Class<?>> getGroupSequence(); - protected abstract BeanD<?> getBean(); - @Override public String toString() { - return String.format("%s: %s", getClass().getSimpleName(), target); + return String.format("%s: %s", getClass().getSimpleName(), getTarget()); } + + protected abstract BeanD<?> getBean(); } http://git-wip-us.apache.org/repos/asf/bval/blob/dda3f942/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 f2eaa26..2d4237c 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 @@ -93,8 +93,10 @@ public abstract class ValidationJob<T> { final void process(Class<?> group, Consumer<ConstraintViolation<T>> sink) { Validate.notNull(sink, "sink"); - each(expand(group), this::validateDescriptorConstraints, sink); - recurse(group, sink); + each(expand(group), (g, s) -> { + validateDescriptorConstraints(g, s); + recurse(g, s); + }, sink); } abstract void recurse(Class<?> group, Consumer<ConstraintViolation<T>> sink); @@ -222,12 +224,7 @@ public abstract class ValidationJob<T> { @Override void recurse(Class<?> group, Consumer<ConstraintViolation<T>> sink) { - // bean frame has to do some convoluted things to properly handle groups and recursion; skipping - // frame#process() on properties: - final List<Frame<?>> propertyFrames = propertyFrames(); - - each(expand(group), (g, s) -> propertyFrames.forEach(f -> f.validateDescriptorConstraints(g, s)), sink); - propertyFrames.forEach(f -> f.recurse(group, sink)); + propertyFrames().forEach(f -> f.process(group, sink)); } protected Frame<?> propertyFrame(PropertyD<?> d, GraphContext context) { @@ -239,23 +236,20 @@ public abstract class ValidationJob<T> { return context.getValue(); } - private List<Frame<?>> propertyFrames() { + private Stream<Frame<?>> propertyFrames() { final Stream<PropertyD<?>> properties = descriptor.getConstrainedProperties().stream() .flatMap(d -> ComposedD.unwrap(d, PropertyD.class)).map(d -> (PropertyD<?>) d); final TraversableResolver traversableResolver = validatorContext.getTraversableResolver(); - final Stream<PropertyD<?>> reachableProperties = - properties.filter(d -> { - final PathImpl p = PathImpl.copy(context.getPath()); - p.addProperty(d.getPropertyName()); - return traversableResolver.isReachable(context.getValue(), p.removeLeafNode(), getRootBeanClass(), - p, d.getElementType()); - }); - + final Stream<PropertyD<?>> reachableProperties = properties.filter(d -> { + final PathImpl p = PathImpl.copy(context.getPath()); + p.addProperty(d.getPropertyName()); + return traversableResolver.isReachable(context.getValue(), p.removeLeafNode(), getRootBeanClass(), p, + d.getElementType()); + }); return reachableProperties.flatMap( - d -> d.read(context).filter(context -> !context.isRecursive()).map(child -> propertyFrame(d, child))) - .collect(Collectors.toList()); + d -> d.read(context).filter(context -> !context.isRecursive()).map(child -> propertyFrame(d, child))); } } @@ -272,7 +266,8 @@ public abstract class ValidationJob<T> { @Override void recurse(Class<?> group, Consumer<ConstraintViolation<T>> sink) { final Groups convertedGroups = - validatorContext.getGroupsComputer().computeCascadingGroups(descriptor.getGroupConversions(), group); + validatorContext.getGroupsComputer().computeCascadingGroups(descriptor.getGroupConversions(), + descriptor.getDeclaringClass().isAssignableFrom(group) ? Default.class : group); convertedGroups.getGroups().stream().map(Group::getGroup).forEach(g -> recurseSingleExpandedGroup(g, sink));