X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-rfc7950%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Frfc7950%2Fstmt%2Fextension%2FExtensionStatementSupport.java;h=18ccd825e95966735bb181edeea984587d17bca6;hb=e5e06d81bed0a7cb520e94a4b018d0e2bb7f0c62;hp=8f154ac45ecfce1f304e4da8d45c531767c48f15;hpb=c8668229ad6e73d5ae03a52f4b87e8e4d2a67c6e;p=yangtools.git diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java index 8f154ac45e..18ccd825e9 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java @@ -7,15 +7,26 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension; +import static java.util.Objects.requireNonNull; + +import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; +import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators; +import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; +import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; +import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.ExtensionNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementDefinitionNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; @@ -23,22 +34,20 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class ExtensionStatementSupport - extends AbstractQNameStatementSupport> { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .EXTENSION) - .addOptional(YangStmtMapping.ARGUMENT) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .build(); - private static final ExtensionStatementSupport INSTANCE = new ExtensionStatementSupport(); + extends AbstractQNameStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.EXTENSION) + .addOptional(YangStmtMapping.ARGUMENT) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .build(); - private ExtensionStatementSupport() { - super(YangStmtMapping.EXTENSION); - } + private final YangParserConfiguration config; - public static ExtensionStatementSupport getInstance() { - return INSTANCE; + public ExtensionStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.EXTENSION, StatementPolicy.reject(), config, SUBSTATEMENT_VALIDATOR); + this.config = requireNonNull(config); } @Override @@ -46,23 +55,12 @@ public final class ExtensionStatementSupport return StmtContextUtils.parseIdentifier(ctx, value); } - @Override - public ExtensionStatement createDeclared(final StmtContext ctx) { - return new ExtensionStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return ExtensionEffectiveStatementImpl.create(ctx); - } - @Override public void onStatementDefinitionDeclared( - final Mutable> stmt) { + final Mutable stmt) { super.onStatementDefinitionDeclared(stmt); - QName stmtName = stmt.coerceStatementArgument(); + QName stmtName = stmt.getArgument(); if (OpenConfigStatements.OPENCONFIG_VERSION.getStatementName().isEqualWithoutRevision(stmtName)) { stmtName = stmtName.withoutRevision(); } @@ -74,14 +72,27 @@ public final class ExtensionStatementSupport final StmtContext yinElement = StmtContextUtils.findFirstDeclaredSubstatement(stmt, YinElementStatement.class); - stmt.addToNs(StatementDefinitionNamespace.class, stmt.getStatementArgument(), - new ModelDefinedStatementSupport(new ModelDefinedStatementDefinition(stmt.getStatementArgument(), - argument != null ? argument.getStatementArgument() : null, - yinElement != null && yinElement.getStatementArgument()))); + stmt.addToNs(StatementDefinitionNamespace.class, stmt.argument(), + new UnrecognizedStatementSupport(new ModelDefinedStatementDefinition(stmt.getArgument(), + argument != null ? argument.argument() : null, yinElement != null && yinElement.getArgument()), + config)); + } + + @Override + protected ExtensionStatement createDeclared(final StmtContext ctx, + final ImmutableList> substatements) { + return DeclaredStatements.createExtension(ctx.getArgument(), substatements); + } + + @Override + protected ExtensionStatement attachDeclarationReference(final ExtensionStatement stmt, + final DeclarationReference reference) { + return DeclaredStatementDecorators.decorateExtesion(stmt, reference); } @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; + protected ExtensionEffectiveStatement createEffective(final Current stmt, + final ImmutableList> substatements) { + return EffectiveStatements.createExtension(stmt.declared(), substatements, stmt.optionalPath()); } -} \ No newline at end of file +}