X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Frfc6020%2FChoiceStatementImpl.java;h=5918274c6a041885d166871fed2c96e835283ab9;hb=960c11dc4a50f27718a163451c0da65995d5c850;hp=b45fc9238d49aad2f4a904ff98932a3095cb7365;hpb=67a0dab285a9bd42b2deec9f2cf6f4df0366c6d5;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ChoiceStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ChoiceStatementImpl.java index b45fc9238d..5918274c6a 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ChoiceStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ChoiceStatementImpl.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; import java.util.Collection; +import java.util.Optional; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.common.QName; @@ -26,8 +27,13 @@ import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; 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.source.ImplicitSubstatement; +import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementDefinitionContext; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ChoiceEffectiveStatementImpl; public class ChoiceStatementImpl extends AbstractDeclaredStatement @@ -54,9 +60,9 @@ public class ChoiceStatementImpl extends AbstractDeclaredStatement super(context); } - public static class Definition - extends + public static class Definition extends AbstractStatementSupport> { + private static final StatementSupport IMPLICIT_CASE = new CaseStatementImpl.Definition(); public Definition() { super(YangStmtMapping.CHOICE); @@ -68,13 +74,24 @@ public class ChoiceStatementImpl extends AbstractDeclaredStatement } @Override - public void onStatementAdded(final Mutable> stmt) { + public Optional> beforeSubStatementCreated( + final StmtContext.Mutable stmt, final int offset, + final StatementDefinitionContext def, final StatementSourceReference ref, final String argument) { + + if (YangValidationBundles.SUPPORTED_CASE_SHORTHANDS.contains(def.getPublicView())) { + return Optional.of(createImplicitCase((StatementContextBase) stmt, offset, ref, argument)); + } + return Optional.empty(); + } + + @Override + public void onStatementAdded( + final Mutable> stmt) { stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); } @Override - public ChoiceStatement createDeclared( - final StmtContext ctx) { + public ChoiceStatement createDeclared(final StmtContext ctx) { return new ChoiceStatementImpl(ctx); } @@ -88,6 +105,17 @@ public class ChoiceStatementImpl extends AbstractDeclaredStatement protected SubstatementValidator getSubstatementValidator() { return SUBSTATEMENT_VALIDATOR; } + + protected StatementSupport implictCase() { + return IMPLICIT_CASE; + } + + private StatementContextBase createImplicitCase(final StmtContext.Mutable stmt, + final int offset, final StatementSourceReference ref, final String argument) { + final StatementDefinitionContext def = new StatementDefinitionContext<>(implictCase()); + return ((StatementContextBase) stmt).createSubstatement(offset, def, ImplicitSubstatement.of(ref), + argument); + } } @Nonnull