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/16 22:59:11 UTC
[11/12] bval git commit: permit cascading declaration among unrelated
convergent methods
permit cascading declaration among unrelated convergent methods
Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/f7833584
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/f7833584
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/f7833584
Branch: refs/heads/bv2
Commit: f7833584f0bef56845bd8e8258c3cfaa3980e01b
Parents: db49785
Author: Matt Benson <mb...@apache.org>
Authored: Fri Mar 16 17:57:47 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Fri Mar 16 17:57:47 2018 -0500
----------------------------------------------------------------------
.../main/java/org/apache/bval/jsr/metadata/Liskov.java | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/bval/blob/f7833584/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/Liskov.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/Liskov.java b/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/Liskov.java
index 2440948..bbd4d2b 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/Liskov.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/metadata/Liskov.java
@@ -159,11 +159,16 @@ class Liskov {
}
private static void noRedeclarationOfReturnValueCascading(List<? extends ContainerDelegate<?>> delegates) {
- final Set<Meta<?>> markedForCascade = delegates.stream().filter(ContainerDelegate::isCascade)
- .map(HierarchyDelegate::getHierarchyElement).collect(Collectors.toCollection(LinkedHashSet::new));
+ final Map<Class<?>, Meta<?>> cascadedReturnValues =
+ delegates.stream().filter(ContainerDelegate::isCascade).map(HierarchyDelegate::getHierarchyElement)
+ .collect(Collectors.toMap(Meta::getDeclaringClass, Function.identity()));
- Exceptions.raiseIf(markedForCascade.size() > 1, ConstraintDeclarationException::new,
- "Multiple method return values marked @%s in hierarchy %s", Valid.class.getSimpleName(), markedForCascade);
+ final boolean anyRelated = cascadedReturnValues.keySet().stream().anyMatch(t -> cascadedReturnValues.keySet()
+ .stream().filter(Predicate.isEqual(t).negate()).anyMatch(t2 -> related(t, t2)));
+
+ Exceptions.raiseIf(anyRelated, ConstraintDeclarationException::new,
+ "Multiple method return values marked @%s in hierarchy %s", Valid.class.getSimpleName(),
+ cascadedReturnValues.values());
}
@SafeVarargs