From d100e45677f25b2e6f830eabbd2511223853b3b7 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 1 Feb 2022 13:28:53 +0100 Subject: [PATCH] Do not enforce augments in unsupported nodes If our parent uses node is not supported by features, we should not be trying to enforce the augmentation dependency, as it will not be present. JIRA: YANGTOOLS-1393 Change-Id: I4b9cff536f4bbd33314f8befb1d70151a5f4f5de Signed-off-by: Robert Varga --- .../stmt/augment/AugmentInferenceAction.java | 5 +++++ .../yangtools/yang/stmt/YT1393Test.java | 8 +++++++ .../src/test/resources/bugs/YT1393/xyzzy.yang | 22 +++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 parser/yang-parser-rfc7950/src/test/resources/bugs/YT1393/xyzzy.yang diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentInferenceAction.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentInferenceAction.java index 985b5e9855..80f4e7e5db 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentInferenceAction.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentInferenceAction.java @@ -90,6 +90,11 @@ final class AugmentInferenceAction implements InferenceAction { * Do not fail, if it is an uses-augment to an unknown node. */ if (YangStmtMapping.USES == augmentNode.coerceParentContext().publicDefinition()) { + if (!augmentNode.isSupportedToBuildEffective()) { + // We are not supported, hence the uses is not effective and we should bail + return; + } + final SchemaNodeIdentifier augmentArg = augmentNode.getArgument(); final Optional> targetNode = SchemaTreeNamespace.findNode( AbstractAugmentStatementSupport.getSearchRoot(augmentNode), augmentArg); diff --git a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YT1393Test.java b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YT1393Test.java index 1e3976209d..ffe8d8b3b2 100644 --- a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YT1393Test.java +++ b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YT1393Test.java @@ -37,4 +37,12 @@ public class YT1393Test { .orElseThrow(); assertEquals(5, module.effectiveSubstatements().size()); } + + @Test + public void testUsesAugmentInUnsupportedByFeatures() throws Exception { + final var module = StmtTestUtils.parseYangSource("/bugs/YT1393/xyzzy.yang", Set.of()) + .findModuleStatement(QName.create("xyzzy", "xyzzy")) + .orElseThrow(); + assertEquals(3, module.effectiveSubstatements().size()); + } } diff --git a/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1393/xyzzy.yang b/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1393/xyzzy.yang new file mode 100644 index 0000000000..7420d69c80 --- /dev/null +++ b/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1393/xyzzy.yang @@ -0,0 +1,22 @@ +module xyzzy { + namespace xyzzy; + prefix xyzzy; + + feature bar; + + grouping foo { + container foo; + } + + container bar { + if-feature bar; + + uses foo { + augment foo { + leaf foo { + type string; + } + } + } + } +} -- 2.36.6