import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
}
private static boolean isInstantied(final StmtContext<?, ?, ?> ctx) {
- for (StmtContext<?, ?, ?> parent = ctx.getParentContext(); parent != null; parent = parent.getParentContext()) {
- if (UNINSTANTIATED_DATATREE_STATEMENTS.contains(parent.getPublicDefinition())) {
+ StmtContext<?, ?, ?> parent = ctx.getParentContext();
+ while (parent != null) {
+ final StatementDefinition parentDef = parent.getPublicDefinition();
+ if (UNINSTANTIATED_DATATREE_STATEMENTS.contains(parentDef)) {
return false;
}
+
+ final StmtContext<?, ?, ?> grandParent = parent.getParentContext();
+ if (YangStmtMapping.AUGMENT == parentDef && grandParent != null) {
+ // If this is an augment statement and its parent is either a 'module' or 'submodule' statement, we are
+ // dealing with an uninstantiated context.
+ final StatementDefinition grandParentDef = grandParent.getPublicDefinition();
+ if (YangStmtMapping.MODULE == grandParentDef || YangStmtMapping.SUBMODULE == grandParentDef) {
+ return false;
+ }
+ }
+
+ parent = grandParent;
}
return true;
}
--- /dev/null
+/*
+ * Copyright (c) 2020 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.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.nio.charset.StandardCharsets;
+import org.junit.Test;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+
+public class YT1133Test {
+ @Test
+ @SuppressWarnings("checkstyle:regexpSinglelineJava")
+ public void testAugmentKeys() throws Exception {
+ final PrintStream stdout = System.out;
+ final ByteArrayOutputStream output = new ByteArrayOutputStream();
+ final EffectiveModelContext ctx;
+
+ try (PrintStream out = new PrintStream(output, true, StandardCharsets.UTF_8)) {
+ System.setOut(out);
+ ctx = StmtTestUtils.parseYangSources("/bugs/YT1133");
+ } finally {
+ System.setOut(stdout);
+ }
+
+ assertEquals(2, ctx.getModules().size());
+ final String log = output.toString();
+ assertThat(log, not(containsString("Configuration list (bar)values")));
+ }
+}