Augment effective statements can vary in argument 35/88035/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 25 Feb 2020 10:54:39 +0000 (11:54 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 25 Feb 2020 10:56:33 +0000 (11:56 +0100)
Augment is serving dual purposes, either as a top-levle statement
or embedded in uses statement. The latter means the argument can
vary across instantiations and we therefore need to take that into
account.

JIRA: YANGTOOLS-1065
Change-Id: Ib7ac9870876f477c5c1c1b3da3d73c2bc1d34781
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java

index c292c9c7615513b45646f642925d20c045b66232..fe53eb46e009e3b466ff834ee51885599919087b 100644 (file)
@@ -178,8 +178,8 @@ abstract class AbstractAugmentStatementSupport
                 .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT))
                 .toFlags();
 
-        return new AugmentEffectiveStatementImpl(declared, flags, StmtContextUtils.getRootModuleQName(ctx),
-            substatements, ctx.getStatementSourceReference(),
+        return new AugmentEffectiveStatementImpl(declared, ctx.coerceStatementArgument(), flags,
+            StmtContextUtils.getRootModuleQName(ctx), substatements, ctx.getStatementSourceReference(),
             (AugmentationSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null));
     }
 
index b4258d8e8fc6ef954555b610d138692130cdf700..a1f53e6c9cd6bd521382bdaba135a8f87f4fa5de 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.augment;
 
-import static com.google.common.base.Verify.verifyNotNull;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.collect.ImmutableList;
@@ -37,13 +36,15 @@ final class AugmentEffectiveStatementImpl extends DefaultDataNodeContainer<Schem
             NotificationNodeContainerMixin<SchemaNodeIdentifier, AugmentStatement>,
             WhenConditionMixin<SchemaNodeIdentifier, AugmentStatement> {
     private final @Nullable AugmentationSchemaNode original;
+    private final @NonNull SchemaNodeIdentifier argument;
     private final @NonNull QNameModule rootModuleQName;
     private final int flags;
 
-    AugmentEffectiveStatementImpl(final AugmentStatement declared, final int flags, final QNameModule rootModuleQName,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final StatementSourceReference ref,
-            final @Nullable AugmentationSchemaNode original) {
+    AugmentEffectiveStatementImpl(final AugmentStatement declared, final SchemaNodeIdentifier argument, final int flags,
+            final QNameModule rootModuleQName, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
+            final StatementSourceReference ref, final @Nullable AugmentationSchemaNode original) {
         super(declared, ref, substatements);
+        this.argument = requireNonNull(argument);
         this.rootModuleQName = requireNonNull(rootModuleQName);
         this.flags = flags;
         this.original = original;
@@ -51,8 +52,7 @@ final class AugmentEffectiveStatementImpl extends DefaultDataNodeContainer<Schem
 
     @Override
     public @NonNull SchemaNodeIdentifier argument() {
-        // FIXME: YANGTOOLS-1065: this is not okay, as this can actually have different namespaces
-        return verifyNotNull(getDeclared().argument());
+        return argument;
     }
 
     @Override