*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta;
+import static com.google.common.base.Verify.verify;
+
import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableList;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
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.meta.StatementOrigin;
import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
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.model.ri.stmt.ImplicitStatements;
+import org.opendaylight.yangtools.yang.model.ri.stmt.UndeclaredStatements;
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.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.EffectiveStmtCtx.Parent.EffectiveConfig;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.UndeclaredCurrent;
+import org.opendaylight.yangtools.yang.parser.spi.meta.QNameWithFlagsEffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
}
@Override
- protected CaseStatement createDeclared(final StmtContext<QName, CaseStatement, ?> ctx,
- final ImmutableList<? extends DeclaredStatement<?>> substatements) {
- final StatementOrigin origin = ctx.origin();
- switch (origin) {
- case CONTEXT:
- return ImplicitStatements.createCase(ctx.getArgument(), substatements);
- case DECLARATION:
- return DeclaredStatements.createCase(ctx.getArgument(), substatements);
- default:
- throw new IllegalStateException("Unhandled statement origin " + origin);
- }
+ protected CaseStatement createDeclared(final BoundStmtCtx<QName> ctx,
+ final ImmutableList<DeclaredStatement<?>> substatements) {
+ return DeclaredStatements.createCase(ctx.getArgument(), substatements);
}
@Override
}
@Override
- protected CaseEffectiveStatement copyDeclaredEffective(final Current<QName, CaseStatement> stmt,
- final CaseEffectiveStatement original) {
- return EffectiveStatements.copyCase(original, stmt.getArgument(),
- computeFlags(stmt, original.effectiveSubstatements()), stmt.original(CaseSchemaNode.class));
+ protected CaseEffectiveStatement createEffective(final Current<QName, CaseStatement> stmt,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ try {
+ return EffectiveStatements.createCase(stmt.declared(), stmt.getArgument(),
+ computeFlags(stmt, substatements), substatements);
+ } catch (SubstatementIndexingException e) {
+ throw new SourceException(e.getMessage(), stmt, e);
+ }
}
@Override
- protected CaseEffectiveStatement copyUndeclaredEffective(final Current<QName, CaseStatement> stmt,
+ public CaseEffectiveStatement copyEffective(final Current<QName, CaseStatement> stmt,
final CaseEffectiveStatement original) {
return EffectiveStatements.copyCase(original, stmt.getArgument(),
- computeFlags(stmt, original.effectiveSubstatements()), stmt.original(CaseSchemaNode.class));
+ computeFlags(stmt, original.effectiveSubstatements()));
}
@Override
- protected CaseEffectiveStatement createDeclaredEffective(final Current<QName, CaseStatement> stmt,
+ protected CaseEffectiveStatement createUndeclaredEffective(final UndeclaredCurrent<QName, CaseStatement> stmt,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
try {
- return EffectiveStatements.createCase(stmt.declared(), stmt.getArgument(),
- computeFlags(stmt, substatements), substatements, stmt.original(CaseSchemaNode.class));
+ return UndeclaredStatements.createCase(stmt.getArgument(), computeFlags(stmt, substatements),
+ substatements);
} catch (SubstatementIndexingException e) {
throw new SourceException(e.getMessage(), stmt, e);
}
}
@Override
- protected CaseEffectiveStatement createUndeclaredEffective(final Current<QName, CaseStatement> stmt,
- final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
- try {
- return EffectiveStatements.createCase(stmt.getArgument(), computeFlags(stmt, substatements),
- substatements, stmt.original(CaseSchemaNode.class));
- } catch (SubstatementIndexingException e) {
- throw new SourceException(e.getMessage(), stmt, e);
- }
+ public EffectiveStatementState extractEffectiveState(final CaseEffectiveStatement stmt) {
+ verify(stmt instanceof CaseSchemaNode, "Unexpected statement %s", stmt);
+ final var schema = (CaseSchemaNode) stmt;
+ return new QNameWithFlagsEffectiveStatementState(stmt.argument(), new FlagsBuilder()
+ .setHistory(schema)
+ .setStatus(schema.getStatus())
+ .setConfiguration(schema.effectiveConfig().orElse(null))
+ .toFlags());
}
private static int computeFlags(final Current<?, ?> stmt,