From: Peter Kajsa Date: Fri, 11 Dec 2015 09:41:35 +0000 (+0100) Subject: Bug 4610 - Do not create duplicate declared statements X-Git-Tag: release/beryllium~98 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F88%2F31188%2F3;p=yangtools.git Bug 4610 - Do not create duplicate declared statements Fix of instantiation logic such that we do not produce duplicate instances of declared statements in the same schema context. Change-Id: If264811825760ebb39a7c911e4c68ae58cc673b5 Signed-off-by: Peter Kajsa --- diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeclaredEffectiveStatementBase.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeclaredEffectiveStatementBase.java index 88ed942844..2c96fba980 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeclaredEffectiveStatementBase.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeclaredEffectiveStatementBase.java @@ -12,10 +12,13 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.meta.StatementSource; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; -public abstract class DeclaredEffectiveStatementBase> - extends EffectiveStatementBase { +public abstract class DeclaredEffectiveStatementBase> extends + EffectiveStatementBase { + private final StatementSource statementSource; + private final A argument; private final D declaredInstance; public DeclaredEffectiveStatementBase(final StmtContext ctx) { @@ -34,8 +37,21 @@ public abstract class DeclaredEffectiveStatementBase ctx, boolean buildUnknownSubstatements) { + protected DeclaredEffectiveStatementBase(StmtContext ctx, final boolean buildUnknownSubstatements) { super(ctx, buildUnknownSubstatements); + + this.argument = ctx.getStatementArgument(); + this.statementSource = ctx.getStatementSource(); + + /* + * Share original instance of declared statement between all effective + * statements which have been copied or derived from this original + * declared statement. + */ + StatementContextBase originalCtx = (StatementContextBase) ctx.getOriginalCtx(); + if (originalCtx != null) { + ctx = originalCtx; + } declaredInstance = Verify.verifyNotNull(ctx.buildDeclared(), "Statement %s failed to build declared statement", ctx); } @@ -47,16 +63,16 @@ public abstract class DeclaredEffectiveStatementBase