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=325e70158b7cc9c9ef032bd269bed5ce54d6dc18;hb=7b09ad45092f476bda0d1b50da27642f94ffeae4;hp=986d97de12da78222ec11abab7fd4f7d0423f35b;hpb=88aeb1cd912d37fcadf671b622fece9a01297e90;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 986d97de12..325e70158b 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,24 +7,25 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension; -import static com.google.common.base.Verify.verify; -import static com.google.common.base.Verify.verifyNotNull; +import static java.util.Objects.requireNonNull; import com.google.common.collect.ImmutableList; -import java.util.IdentityHashMap; -import java.util.Map; -import java.util.stream.Stream; 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.parser.rfc7950.stmt.BaseQNameStatementSupport; +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; @@ -33,25 +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 BaseQNameStatementSupport { - 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(); - // FIXME: YANGTOOLS-1185: use EffectiveStmtCtx.Current as key - private static final ThreadLocal, ExtensionEffectiveStatementImpl>> TL_BUILDERS = - new ThreadLocal<>(); - - private ExtensionStatementSupport() { - super(YangStmtMapping.EXTENSION); - } - - public static ExtensionStatementSupport getInstance() { - return INSTANCE; + 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 final YangParserConfiguration config; + + public ExtensionStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.EXTENSION, StatementPolicy.reject(), config); + this.config = requireNonNull(config); } @Override @@ -64,7 +60,7 @@ public final class ExtensionStatementSupport final Mutable stmt) { super.onStatementDefinitionDeclared(stmt); - QName stmtName = stmt.coerceStatementArgument(); + QName stmtName = stmt.getArgument(); if (OpenConfigStatements.OPENCONFIG_VERSION.getStatementName().isEqualWithoutRevision(stmtName)) { stmtName = stmtName.withoutRevision(); } @@ -76,10 +72,10 @@ public final class ExtensionStatementSupport final StmtContext yinElement = StmtContextUtils.findFirstDeclaredSubstatement(stmt, YinElementStatement.class); - stmt.addToNs(StatementDefinitionNamespace.class, stmt.getStatementArgument(), - new ModelDefinedStatementSupport(new ModelDefinedStatementDefinition(stmt.coerceStatementArgument(), - argument != null ? argument.getStatementArgument() : null, - yinElement != null && yinElement.coerceStatementArgument()))); + stmt.addToNs(StatementDefinitionNamespace.class, stmt.argument(), + new UnrecognizedStatementSupport(new ModelDefinedStatementDefinition(stmt.getArgument(), + argument != null ? argument.argument() : null, yinElement != null && yinElement.getArgument()), + config)); } @Override @@ -90,53 +86,18 @@ public final class ExtensionStatementSupport @Override protected ExtensionStatement createDeclared(final StmtContext ctx, final ImmutableList> substatements) { - return new RegularExtensionStatement(ctx.coerceStatementArgument(), substatements); - } - - @Override - protected ExtensionStatement createEmptyDeclared(final StmtContext ctx) { - return new EmptyExtensionStatement(ctx.coerceStatementArgument()); + return DeclaredStatements.createExtension(ctx.getArgument(), substatements); } @Override - public ExtensionEffectiveStatement createEffective(final Current stmt, - final Stream> declaredSubstatements, - final Stream> effectiveSubstatements) { - Map, ExtensionEffectiveStatementImpl> tl = TL_BUILDERS.get(); - if (tl == null) { - tl = new IdentityHashMap<>(); - TL_BUILDERS.set(tl); - } - - final StmtContext ctx = stmt.caerbannog(); - final ExtensionEffectiveStatementImpl existing = tl.get(ctx); - if (existing != null) { - // Implies non-empty map, no cleanup necessary - return existing; - } - - try { - final ExtensionEffectiveStatementImpl created = new ExtensionEffectiveStatementImpl(stmt.declared(), - stmt.getSchemaPath()); - verify(tl.put(ctx, created) == null); - try { - return super.createEffective(stmt, declaredSubstatements, effectiveSubstatements); - } finally { - verify(tl.remove(ctx) == created); - } - } finally { - if (tl.isEmpty()) { - TL_BUILDERS.remove(); - } - } + protected ExtensionStatement attachDeclarationReference(final ExtensionStatement stmt, + final DeclarationReference reference) { + return DeclaredStatementDecorators.decorateExtesion(stmt, reference); } @Override protected ExtensionEffectiveStatement createEffective(final Current stmt, final ImmutableList> substatements) { - final ExtensionEffectiveStatementImpl ret = verifyNotNull(verifyNotNull(TL_BUILDERS.get(), - "Statement build state not initialized").get(stmt.caerbannog()), "No build state found for %s", stmt); - ret.setSubstatements(substatements); - return ret; + return EffectiveStatements.createExtension(stmt.declared(), substatements, stmt.optionalPath()); } -} \ No newline at end of file +}