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