Augment effective statements can vary in argument 72/88072/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 25 Feb 2020 10:54:39 +0000 (11:54 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 26 Feb 2020 07:31:53 +0000 (08:31 +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 5912443d656cb8e6a64ecb18e6c98d69811a1479..b51b067806e4cae1514815910c24e257357d733a 100644 (file)
@@ -181,8 +181,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 e8e805ad738a109c3cbca2ebe978c1e1111b2ac0..141b55a7406ffffe166fa8f21a1ff9cf9b9b4766 100644 (file)
@@ -37,21 +37,23 @@ 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;
     }
 
     @Override
-    public SchemaNodeIdentifier argument() {
-        return getDeclared().argument();
+    public @NonNull SchemaNodeIdentifier argument() {
+        return argument;
     }
 
     @Override