From: Robert Varga Date: Mon, 10 Sep 2018 15:19:51 +0000 (+0200) Subject: Eliminate LeafRefValidation.forEachChoice() X-Git-Tag: v2.0.6.3~3 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F38%2F75938%2F2;p=yangtools.git Eliminate LeafRefValidation.forEachChoice() As it turns out the two call sites can share more code. Introduce processChildNode(), inlining forEachChoice() and its surrounding lookup logic. JIRA: YANGTOOLS-892 Change-Id: I2091abcd579ce1d48a628c3bdea9b4514b050e29 Signed-off-by: Robert Varga --- diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefValidation.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefValidation.java index 3462f6e222..5de4f032ba 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefValidation.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefValidation.java @@ -21,7 +21,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Optional; import java.util.Set; -import java.util.function.Consumer; import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -371,32 +370,33 @@ public final class LeafRefValidation { return; } - final QName qname = next.getQName(); - final PathArgument pathArgument = new NodeIdentifier(qname); + final PathArgument pathArgument = new NodeIdentifier(next.getQName()); if (node instanceof DataContainerNode) { - final DataContainerNode dataContainerNode = (DataContainerNode) node; - final Optional> child = dataContainerNode.getChild(pathArgument); - if (child.isPresent()) { - addNextValues(values, child.get(), next.getQNamePredicates(), path, current); - } else { - forEachChoice(dataContainerNode, - choice -> addValues(values, choice, next.getQNamePredicates(), path, current)); - } + processChildNode(values, (DataContainerNode) node, pathArgument, next.getQNamePredicates(), path, + current); } else if (node instanceof MapNode) { Stream entries = ((MapNode) node).getValue().stream(); if (!nodePredicates.isEmpty() && current != null) { entries = entries.filter(createMapEntryPredicate(nodePredicates, current)); } - entries.forEach(mapEntryNode -> { - final Optional> child = mapEntryNode.getChild(pathArgument); - if (child.isPresent()) { - addNextValues(values, child.get(), next.getQNamePredicates(), path, current); - } else { - forEachChoice(mapEntryNode, - choice -> addValues(values, choice, next.getQNamePredicates(), path, current)); + entries.forEach(entry -> processChildNode(values, entry, pathArgument, next.getQNamePredicates(), path, + current)); + } + } + + private void processChildNode(final Set values, final DataContainerNode parent, + final PathArgument arg, final List nodePredicates, final Deque path, + final YangInstanceIdentifier current) { + final Optional> child = parent.getChild(arg); + if (!child.isPresent()) { + for (final DataContainerChild choice : parent.getValue()) { + if (choice instanceof ChoiceNode) { + addValues(values, choice, nodePredicates, path, current); } - }); + } + } else { + addNextValues(values, child.get(), nodePredicates, path, current); } } @@ -430,14 +430,6 @@ public final class LeafRefValidation { } } - private static void forEachChoice(final DataContainerNode node, final Consumer consumer) { - for (final DataContainerChild child : node.getValue()) { - if (child instanceof ChoiceNode) { - consumer.accept((ChoiceNode) child); - } - } - } - private Set getPathKeyExpressionValues(final LeafRefPath predicatePathKeyExpression, final YangInstanceIdentifier current) { return findParentNode(Optional.of(root), current).map(parent -> {