From 69cb7d1ab7a329e2bd19f538b3d598be91c49f2d Mon Sep 17 00:00:00 2001 From: Tomas Cere Date: Tue, 14 Jul 2020 15:05:18 +0200 Subject: [PATCH] Use modifiable List when resolving relative xpath When we have split the path into its components, we can end up compressing them further. Make sure the list is actually mutable. JIRA: YANGTOOLS-1125 Change-Id: I1d4cd66d2efbb1955bb189763ea09fefeba93d25 Signed-off-by: Tomas Cere Signed-off-by: Robert Varga --- .../yang/model/util/ut/LeafrefStaticAnalysisTest.java | 8 ++++++++ yang/yang-model-util-ut/src/test/resources/leafrefs.yang | 6 ++++++ .../yangtools/yang/model/util/SchemaContextUtil.java | 6 +++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/yang/yang-model-util-ut/src/test/java/org/opendaylight/yangtools/yang/model/util/ut/LeafrefStaticAnalysisTest.java b/yang/yang-model-util-ut/src/test/java/org/opendaylight/yangtools/yang/model/util/ut/LeafrefStaticAnalysisTest.java index 22bcc32e15..93bba0d578 100644 --- a/yang/yang-model-util-ut/src/test/java/org/opendaylight/yangtools/yang/model/util/ut/LeafrefStaticAnalysisTest.java +++ b/yang/yang-model-util-ut/src/test/java/org/opendaylight/yangtools/yang/model/util/ut/LeafrefStaticAnalysisTest.java @@ -135,4 +135,12 @@ public class LeafrefStaticAnalysisTest { assertNull(SchemaContextUtil.findDataSchemaNodeForRelativeXPath(context, module, leaf, ((LeafrefTypeDefinition) leaf.getType()).getPathStatement())); } + + @Test + public void testNonExistentRelativeXpath() { + final LeafSchemaNode leaf = (LeafSchemaNode) bar.findDataChildByName( + QName.create(FOO, "indirect-with-current")).get(); + assertNull(SchemaContextUtil.findDataSchemaNodeForRelativeXPath(context, module, leaf, + ((LeafrefTypeDefinition) leaf.getType()).getPathStatement())); + } } diff --git a/yang/yang-model-util-ut/src/test/resources/leafrefs.yang b/yang/yang-model-util-ut/src/test/resources/leafrefs.yang index c923c589a8..925af6b3aa 100644 --- a/yang/yang-model-util-ut/src/test/resources/leafrefs.yang +++ b/yang/yang-model-util-ut/src/test/resources/leafrefs.yang @@ -29,6 +29,12 @@ module leafrefs { } } + leaf indirect-with-current { + type leafref { + path "../../../n[n-id=current()/../node]/tp/tp-id"; + } + } + leaf absolute { type leafref { // direct path to an instantiation diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java index 5b9d5f0a2d..423d4c43b7 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java @@ -835,7 +835,11 @@ public final class SchemaContextUtil { } private static List doSplitXPath(final String xpath) { - return SLASH_SPLITTER.splitToList(xpath); + final List ret = new ArrayList<>(); + for (String str : SLASH_SPLITTER.split(xpath)) { + ret.add(str); + } + return ret; } /** -- 2.36.6