From 4e335af20d8969f4ff7af5241db3de4f8675ab2c Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 6 Sep 2018 00:15:47 +0200 Subject: [PATCH] Pass down predicates instead of the entire predicate node Since we are not using the rest of the data, it is much simpler to just pass down predicates. It also reduces confusion as to what state we are propagating. Change-Id: If790fcc2a8d023cb863d09162b25d644b0dd4638 Signed-off-by: Robert Varga (cherry picked from commit e8ecfb6f906dfd7e7bff791abf0b601eb71766a8) --- .../impl/leafref/LeafRefValidatation.java | 33 +++++++++---------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefValidatation.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefValidatation.java index 3f32ca7b02..5c4e8ce0d7 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefValidatation.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefValidatation.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.yang.data.impl.leafref; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import java.util.ArrayList; @@ -381,13 +382,13 @@ public final class LeafRefValidatation { private Set computeValues(final NormalizedNode node, final Iterable path, final YangInstanceIdentifier current) { final HashSet values = new HashSet<>(); - addValues(values, node, path, current, QNameWithPredicate.ROOT); + addValues(values, node, ImmutableList.of(), path, current); return values; } private void addValues(final Set values, final NormalizedNode node, - final Iterable path, final YangInstanceIdentifier current, - final QNameWithPredicate previousQName) { + final List nodePredicates, final Iterable path, + final YangInstanceIdentifier current) { if (node instanceof ValueNode) { values.add(node.getValue()); return; @@ -403,46 +404,42 @@ public final class LeafRefValidatation { if (!iterator.hasNext()) { return; } - final QNameWithPredicate qnameWithPredicate = iterator.next(); - final QName qName = qnameWithPredicate.getQName(); - final PathArgument pathArgument = new NodeIdentifier(qName); + final QNameWithPredicate next = iterator.next(); + final QName qname = next.getQName(); + final PathArgument pathArgument = new NodeIdentifier(qname); if (node instanceof DataContainerNode) { final DataContainerNode dataContainerNode = (DataContainerNode) node; final Optional> child = dataContainerNode .getChild(pathArgument); if (child.isPresent()) { - addValues(values, child.get(), nextLevel(path), current, qnameWithPredicate); + addValues(values, child.get(), next.getQNamePredicates(), nextLevel(path), current); } else { for (final ChoiceNode choiceNode : getChoiceNodes(dataContainerNode)) { - addValues(values, choiceNode, path, current, qnameWithPredicate); + addValues(values, choiceNode, next.getQNamePredicates(), path, current); } } } else if (node instanceof MapNode) { final MapNode map = (MapNode) node; - final List qNamePredicates = previousQName.getQNamePredicates(); - if (qNamePredicates.isEmpty() || current == null) { + if (nodePredicates.isEmpty() || current == null) { final Iterable value = map.getValue(); for (final MapEntryNode mapEntryNode : value) { final Optional> child = mapEntryNode .getChild(pathArgument); if (child.isPresent()) { - addValues(values, child.get(), nextLevel(path), current, qnameWithPredicate); + addValues(values, child.get(), next.getQNamePredicates(), nextLevel(path), current); } else { for (final ChoiceNode choiceNode : getChoiceNodes(mapEntryNode)) { - addValues(values, choiceNode, path, current, qnameWithPredicate); + addValues(values, choiceNode, next.getQNamePredicates(), path, current); } } } } else { final Map> keyValues = new HashMap<>(); - - final Iterator predicates = qNamePredicates.iterator(); - while (predicates.hasNext()) { - final QNamePredicate predicate = predicates.next(); + for (QNamePredicate predicate : nodePredicates) { final QName identifier = predicate.getIdentifier(); final LeafRefPath predicatePathKeyExpression = predicate.getPathKeyExpression(); final Set pathKeyExprValues = getPathKeyExpressionValues(predicatePathKeyExpression, current); @@ -456,10 +453,10 @@ public final class LeafRefValidatation { .getChild(pathArgument); if (child.isPresent()) { - addValues(values, child.get(), nextLevel(path), current, qnameWithPredicate); + addValues(values, child.get(), next.getQNamePredicates(), nextLevel(path), current); } else { for (final ChoiceNode choiceNode : getChoiceNodes(mapEntryNode)) { - addValues(values, choiceNode, path, current, qnameWithPredicate); + addValues(values, choiceNode, next.getQNamePredicates(), path, current); } } } -- 2.36.6