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%2Fmeta%2FChoiceStatementSupport.java;h=eec559721196e33994fb2d22605a79f2c8120a8a;hb=eb017d49e00a06c1b29ac1a91d4d95007fa7c1a6;hp=4b0d0eaf25b10585d924223db830372bbdc4aff1;hpb=877558c4dda393c255797fd04d3a7bd21bf471b6;p=yangtools.git diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ChoiceStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ChoiceStatementSupport.java index 4b0d0eaf25..eec5597211 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ChoiceStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ChoiceStatementSupport.java @@ -13,6 +13,7 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import java.util.Collection; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; @@ -36,8 +37,8 @@ import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; -import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangValidationBundles; 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.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.ImplicitParentAwareStatementSupport; @@ -46,7 +47,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceStmtCtx; import org.opendaylight.yangtools.yang.parser.spi.meta.QNameWithFlagsEffectiveStatementState; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupportNamespace; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @@ -70,11 +70,15 @@ public final class ChoiceStatementSupport .addOptional(YangStmtMapping.STATUS) .addOptional(YangStmtMapping.WHEN) .build(); + private static final ImmutableSet RFC6020_CASE_SHORTHANDS = ImmutableSet.of( + YangStmtMapping.ANYXML, YangStmtMapping.CONTAINER, YangStmtMapping.LEAF, YangStmtMapping.LIST, + YangStmtMapping.LEAF_LIST); private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.CHOICE) .addAny(YangStmtMapping.ANYDATA) .addAny(YangStmtMapping.ANYXML) .addAny(YangStmtMapping.CASE) + .addAny(YangStmtMapping.CHOICE) .addOptional(YangStmtMapping.CONFIG) .addAny(YangStmtMapping.CONTAINER) .addOptional(YangStmtMapping.DEFAULT) @@ -88,23 +92,30 @@ public final class ChoiceStatementSupport .addOptional(YangStmtMapping.STATUS) .addOptional(YangStmtMapping.WHEN) .build(); + private static final ImmutableSet RFC7950_CASE_SHORTHANDS = ImmutableSet.of( + YangStmtMapping.ANYDATA, YangStmtMapping.ANYXML, YangStmtMapping.CHOICE, YangStmtMapping.CONTAINER, + YangStmtMapping.LEAF, YangStmtMapping.LIST, YangStmtMapping.LEAF_LIST); - private ChoiceStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + private final ImmutableSet caseShorthands; + + private ChoiceStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator, + final ImmutableSet caseShorthands) { super(YangStmtMapping.CHOICE, instantiatedPolicy(), config, requireNonNull(validator)); + this.caseShorthands = requireNonNull(caseShorthands); } public static @NonNull ChoiceStatementSupport rfc6020Instance(final YangParserConfiguration config) { - return new ChoiceStatementSupport(config, RFC6020_VALIDATOR); + return new ChoiceStatementSupport(config, RFC6020_VALIDATOR, RFC6020_CASE_SHORTHANDS); } public static @NonNull ChoiceStatementSupport rfc7950Instance(final YangParserConfiguration config) { - return new ChoiceStatementSupport(config, RFC7950_VALIDATOR); + return new ChoiceStatementSupport(config, RFC7950_VALIDATOR, RFC7950_CASE_SHORTHANDS); } @Override public Optional> getImplicitParentFor(final NamespaceStmtCtx parent, final StatementDefinition stmtDef) { - if (!YangValidationBundles.SUPPORTED_CASE_SHORTHANDS.contains(stmtDef)) { + if (!caseShorthands.contains(stmtDef)) { return Optional.empty(); } return Optional.of(verifyNotNull(parent.getFromNamespace(StatementSupportNamespace.class, @@ -112,8 +123,8 @@ public final class ChoiceStatementSupport } @Override - protected ChoiceStatement createDeclared(@NonNull final StmtContext ctx, - final ImmutableList> substatements) { + protected ChoiceStatement createDeclared(final BoundStmtCtx ctx, + final ImmutableList> substatements) { return DeclaredStatements.createChoice(ctx.getArgument(), substatements); } @@ -127,7 +138,7 @@ public final class ChoiceStatementSupport public ChoiceEffectiveStatement copyEffective(final Current stmt, final ChoiceEffectiveStatement original) { return EffectiveStatements.copyChoice(original, stmt.getArgument(), - computeFlags(stmt, original.effectiveSubstatements()), stmt.original(ChoiceSchemaNode.class)); + computeFlags(stmt, original.effectiveSubstatements())); } @Override @@ -152,7 +163,7 @@ public final class ChoiceStatementSupport try { return EffectiveStatements.createChoice(stmt.declared(), stmt.getArgument(), - computeFlags(stmt, substatements), substatements, defaultCase, stmt.original(ChoiceSchemaNode.class)); + computeFlags(stmt, substatements), substatements, defaultCase); } catch (SubstatementIndexingException e) { throw new SourceException(e.getMessage(), stmt, e); }