import org.opendaylight.yangtools.yang.model.api.stmt.FeatureEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseQNameStatementSupport;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
import org.opendaylight.yangtools.yang.parser.spi.FeatureNamespace;
+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.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
public final class FeatureStatementSupport
- extends BaseQNameStatementSupport<FeatureStatement, FeatureEffectiveStatement> {
+ extends AbstractQNameStatementSupport<FeatureStatement, FeatureEffectiveStatement> {
private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
YangStmtMapping.FEATURE)
.addOptional(YangStmtMapping.DESCRIPTION)
private static final int EMPTY_EFFECTIVE_FLAGS = new FlagsBuilder().setStatus(Status.CURRENT).toFlags();
private FeatureStatementSupport() {
- super(YangStmtMapping.FEATURE);
+ super(YangStmtMapping.FEATURE, StatementPolicy.reject());
}
public static FeatureStatementSupport getInstance() {
@Override
public void onFullDefinitionDeclared(final Mutable<QName, FeatureStatement, FeatureEffectiveStatement> stmt) {
super.onFullDefinitionDeclared(stmt);
- stmt.addContext(FeatureNamespace.class, stmt.coerceStatementArgument(), stmt);
+ stmt.addContext(FeatureNamespace.class, stmt.getArgument(), stmt);
}
@Override
@Override
protected FeatureStatement createDeclared(final StmtContext<QName, FeatureStatement, ?> ctx,
final ImmutableList<? extends DeclaredStatement<?>> substatements) {
- return new RegularFeatureStatement(ctx.coerceStatementArgument(), substatements);
+ return new RegularFeatureStatement(ctx.getArgument(), substatements);
}
@Override
protected FeatureStatement createEmptyDeclared(@NonNull final StmtContext<QName, FeatureStatement, ?> ctx) {
- return new EmptyFeatureStatement(ctx.coerceStatementArgument());
+ return new EmptyFeatureStatement(ctx.getArgument());
}
@Override
- protected FeatureEffectiveStatement createEffective(
- final StmtContext<QName, FeatureStatement, FeatureEffectiveStatement> ctx, final FeatureStatement declared,
+ protected FeatureEffectiveStatement createEffective(final Current<QName, FeatureStatement> stmt,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
- return new RegularFeatureEffectiveStatement(declared, ctx.getSchemaPath().get(), computeFlags(substatements),
- substatements);
- }
-
- @Override
- protected FeatureEffectiveStatement createEmptyEffective(
- final StmtContext<QName, FeatureStatement, FeatureEffectiveStatement> ctx,
- final FeatureStatement declared) {
- return new EmptyFeatureEffectiveStatement(declared, ctx.getSchemaPath().get(), EMPTY_EFFECTIVE_FLAGS);
+ return substatements.isEmpty()
+ ? new EmptyFeatureEffectiveStatement(stmt.declared(), stmt.effectivePath(), EMPTY_EFFECTIVE_FLAGS)
+ : new RegularFeatureEffectiveStatement(stmt.declared(), stmt.effectivePath(),
+ computeFlags(substatements), substatements);
}
private static int computeFlags(final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {