From: Robert Varga Date: Mon, 11 Oct 2021 12:15:45 +0000 (+0200) Subject: Fix StatementContextBase.childCopyOf() X-Git-Tag: v7.0.9~10 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F70%2F97870%2F3;p=yangtools.git Fix StatementContextBase.childCopyOf() Most of our StmtContext implementations are derived from StatementContextBase, but notably ReplicaStatementContext is not -- and we do not handle it during copy operations. Update the dispatch code to short circuit to replicaAsChildOf(), which takes care of the details. JIRA: YANGTOOLS-1346 Change-Id: I65f9713d5c06bbe251a4b27fb0745dd905c36976 Signed-off-by: Robert Varga (cherry picked from commit 3b4308a5a4988fb66839c8d2724c13e0ae1b2e9c) --- diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java index b54ce1c26c..9c537eafca 100644 --- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java +++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java @@ -806,8 +806,13 @@ public abstract class StatementContextBase, E public final Mutable childCopyOf(final StmtContext stmt, final CopyType type, final QNameModule targetModule) { checkEffectiveModelCompleted(stmt); - checkArgument(stmt instanceof StatementContextBase, "Unsupported statement %s", stmt); - return childCopyOf((StatementContextBase) stmt, type, targetModule); + if (stmt instanceof StatementContextBase) { + return childCopyOf((StatementContextBase) stmt, type, targetModule); + } else if (stmt instanceof ReplicaStatementContext) { + return ((ReplicaStatementContext) stmt).replicaAsChildOf(this); + } else { + throw new IllegalArgumentException("Unsupported statement " + stmt); + } } private , Z extends EffectiveStatement> Mutable childCopyOf( diff --git a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YT1346Test.java b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YT1346Test.java new file mode 100644 index 0000000000..57e1a1acb7 --- /dev/null +++ b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YT1346Test.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2021 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.assertNotNull; + +import org.junit.Test; + +public class YT1346Test { + @Test + public void testUsesAugmentUsesException() throws Exception { + assertNotNull(StmtTestUtils.parseYangSource("/bugs/YT1346/foo.yang")); + } +} diff --git a/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1346/foo.yang b/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1346/foo.yang new file mode 100644 index 0000000000..792b3b40b9 --- /dev/null +++ b/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1346/foo.yang @@ -0,0 +1,22 @@ +module foo { + namespace foo; + prefix foo; + + extension ext { + argument arg; + } + + grouping foo { + container foo; + } + + grouping bar { + foo:ext bar; + } + + uses foo { + augment foo { + uses bar; + } + } +}