X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=parser%2Fyang-parser-rfc7950%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Frfc7950%2Fstmt%2Flist%2FListStatementSupport.java;h=5c25cbf675de4335de3cfda181da4972419057a3;hb=303d81ba251f3b861c99595bb9562bcb348167d8;hp=e46523f910dd549788bf9361145f5f2a88d996c2;hpb=cd8adcd1385c3d4fb62545aec9e0bd91c62f0591;p=yangtools.git diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java index e46523f910..5c25cbf675 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java @@ -41,11 +41,14 @@ import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingExcept import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractSchemaTreeStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.BoundStmtCtx; +import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Parent; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Parent.EffectiveConfig; import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException; +import org.opendaylight.yangtools.yang.parser.spi.meta.QNameWithFlagsEffectiveStatementState; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; @@ -111,8 +114,11 @@ public final class ListStatementSupport .addOptional(YangStmtMapping.WHEN) .build(); + private final boolean warnForUnkeyedLists; + ListStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { super(YangStmtMapping.LIST, instantiatedPolicy(), config, validator); + this.warnForUnkeyedLists = config.warnForUnkeyedLists(); } public static @NonNull ListStatementSupport rfc6020Instance(final YangParserConfiguration config) { @@ -124,8 +130,8 @@ public final class ListStatementSupport } @Override - protected ListStatement createDeclared(final StmtContext ctx, - final ImmutableList> substatements) { + protected ListStatement createDeclared(final BoundStmtCtx ctx, + final ImmutableList> substatements) { return DeclaredStatements.createList(ctx.getArgument(), substatements); } @@ -138,7 +144,7 @@ public final class ListStatementSupport public ListEffectiveStatement copyEffective(final Current stmt, final ListEffectiveStatement original) { return EffectiveStatements.copyList(original, stmt.getArgument(), - computeFlags(stmt, original.effectiveSubstatements()), stmt.original(ListSchemaNode.class)); + computeFlags(stmt, original.effectiveSubstatements())); } @Override @@ -168,7 +174,8 @@ public final class ListStatementSupport } final int flags = computeFlags(stmt, substatements); - if (stmt.effectiveConfig() == EffectiveConfig.TRUE && keyDefinition.isEmpty() && isInstantied(stmt)) { + if (warnForUnkeyedLists && stmt.effectiveConfig() == EffectiveConfig.TRUE + && keyDefinition.isEmpty() && isInstantied(stmt)) { warnConfigList(stmt); } @@ -178,13 +185,24 @@ public final class ListStatementSupport try { return EffectiveStatements.createList(stmt.declared(), stmt.getArgument(), flags, substatements, - keyDefinition, EffectiveStmtUtils.createElementCountConstraint(substatements).orElse(null), - stmt.original(ListSchemaNode.class)); + keyDefinition, EffectiveStmtUtils.createElementCountConstraint(substatements).orElse(null)); } catch (SubstatementIndexingException e) { throw new SourceException(e.getMessage(), stmt, e); } } + @Override + public EffectiveStatementState extractEffectiveState(final ListEffectiveStatement stmt) { + verify(stmt instanceof ListSchemaNode, "Unexpected statement %s", stmt); + final var schema = (ListSchemaNode) stmt; + return new QNameWithFlagsEffectiveStatementState(stmt.argument(), new FlagsBuilder() + .setHistory(schema) + .setStatus(schema.getStatus()) + .setConfiguration(schema.effectiveConfig().orElse(null)) + .setUserOrdered(schema.isUserOrdered()) + .toFlags()); + } + private static int computeFlags(final Current stmt, final Collection> substatements) { return new FlagsBuilder()