From: Robert Varga Date: Sun, 6 Feb 2022 18:28:26 +0000 (+0100) Subject: Disable uses/augment statements of unsupported paths X-Git-Tag: v8.0.0~54 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=yangtools.git;a=commitdiff_plain;h=0e0a54e3b39d7fcc26709fea86a694d8a6cad41b Disable uses/augment statements of unsupported paths Uses statements should propagate unsupported-by-features statements as unsupported-to-build statements. JIRA: YANGTOOLS-1393 Change-Id: Ie373b3f0cf7539219b68d1e7b52f6d348ff246e5 Signed-off-by: Robert Varga --- diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java index 1fb4613e85..f2d2f24a8f 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java @@ -201,8 +201,13 @@ public final class UsesStatementSupport final QNameModule newQNameModule = getNewQNameModule(targetCtx, sourceGrpStmtCtx); for (StmtContext original : declared) { - if (original.isSupportedByFeatures() && shouldCopy(original)) { - original.copyAsChildOf(targetCtx, CopyType.ADDED_BY_USES, newQNameModule).ifPresent(buffer::add); + if (shouldCopy(original)) { + original.copyAsChildOf(targetCtx, CopyType.ADDED_BY_USES, newQNameModule).ifPresent(copy -> { + if (!original.isSupportedByFeatures() || !original.isSupportedToBuildEffective()) { + copy.setUnsupported(); + } + buffer.add(copy); + }); } } 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 new file mode 100644 index 0000000000..1e3976209d --- /dev/null +++ b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YT1393Test.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.stmt; + +import static org.junit.Assert.assertEquals; + +import java.util.Set; +import org.junit.Test; +import org.opendaylight.yangtools.yang.common.QName; + +public class YT1393Test { + @Test + public void testUsesAugmentUnsupportedByFeatures() throws Exception { + final var module = StmtTestUtils.parseYangSource("/bugs/YT1393/foo.yang", Set.of()) + .findModuleStatement(QName.create("foo", "foo")) + .orElseThrow(); + assertEquals(4, module.effectiveSubstatements().size()); + } + + @Test + public void testUsesRefineUnsupportedByFeatures() throws Exception { + final var module = StmtTestUtils.parseYangSource("/bugs/YT1393/bar.yang", Set.of()) + .findModuleStatement(QName.create("bar", "bar")) + .orElseThrow(); + assertEquals(5, module.effectiveSubstatements().size()); + } + + @Test + public void testAugmentAugmentUnsupportedByFeatures() throws Exception { + final var module = StmtTestUtils.parseYangSource("/bugs/YT1393/baz.yang", Set.of()) + .findModuleStatement(QName.create("baz", "baz")) + .orElseThrow(); + assertEquals(5, module.effectiveSubstatements().size()); + } +} diff --git a/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1393/bar.yang b/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1393/bar.yang new file mode 100644 index 0000000000..ad648ed76f --- /dev/null +++ b/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1393/bar.yang @@ -0,0 +1,27 @@ +module bar { + namespace bar; + prefix bar; + + feature foo; + + grouping foo { + container foo { + if-feature foo; + container bar; + } + } + + uses foo { + refine foo/bar { + description desc; + } + } + + container baz { + uses foo { + refine foo { + description desc; + } + } + } +} diff --git a/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1393/baz.yang b/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1393/baz.yang new file mode 100644 index 0000000000..e37709a30d --- /dev/null +++ b/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1393/baz.yang @@ -0,0 +1,18 @@ +module baz { + namespace baz; + prefix baz; + + feature foo; + + container foo; + + augment /foo { + container bar { + if-feature foo; + } + } + + augment /foo/bar { + container baz; + } +} diff --git a/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1393/foo.yang b/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1393/foo.yang new file mode 100644 index 0000000000..252c893c2d --- /dev/null +++ b/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1393/foo.yang @@ -0,0 +1,20 @@ +module foo { + namespace foo; + prefix foo; + + feature foo; + + grouping foo { + container foo { + if-feature foo; + } + } + + uses foo { + augment foo { + leaf foo { + type string; + } + } + } +}