import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.model.api.Status;
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.StatementDefinition;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
+import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
+import org.opendaylight.yangtools.yang.parser.spi.meta.CopyHistory;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
/**
*/
@Beta
public abstract class BaseQNameStatementSupport<D extends DeclaredStatement<QName>,
- E extends EffectiveStatement<QName, D>> extends AbstractQNameStatementSupport<D, E> {
+ E extends EffectiveStatement<QName, D>> extends BaseStatementSupport<QName, D, E> {
protected BaseQNameStatementSupport(final StatementDefinition publicDefinition) {
super(publicDefinition);
}
- @Override
- public final E createEffective(final StmtContext<QName, D, E> ctx) {
- final D declared = BaseStatementSupport.buildDeclared(ctx);
- final ImmutableList<? extends EffectiveStatement<?, ?>> substatements =
- BaseStatementSupport.buildEffectiveSubstatements(ctx);
- return substatements.isEmpty() ? createEmptyEffective(ctx, declared)
- : createEffective(ctx, declared, substatements);
+ protected BaseQNameStatementSupport(final StatementDefinition publicDefinition, final CopyPolicy copyPolicy) {
+ super(publicDefinition, copyPolicy);
}
- protected abstract @NonNull E createEffective(@NonNull StmtContext<QName, D, E> ctx, @NonNull D declared,
- @NonNull ImmutableList<? extends EffectiveStatement<?, ?>> substatements);
-
- protected abstract @NonNull E createEmptyEffective(@NonNull StmtContext<QName, D, E> ctx, @NonNull D declared);
-
- protected static final <E extends EffectiveStatement<?, ?>> @Nullable E findFirstStatement(
- final ImmutableList<? extends EffectiveStatement<?, ?>> statements, final Class<E> type) {
- return BaseStatementSupport.findFirstStatement(statements, type);
+ @Override
+ public QName adaptArgumentValue(final StmtContext<QName, D, E> ctx, final QNameModule targetModule) {
+ return ctx.getArgument().bindTo(targetModule).intern();
}
- protected static final <A, E extends EffectiveStatement<A, ?>> A findFirstArgument(
- final ImmutableList<? extends EffectiveStatement<?, ?>> statements, final Class<E> type, final A defValue) {
- return BaseStatementSupport.findFirstArgument(statements, type, defValue);
+ protected static final int historyAndStatusFlags(final CopyHistory history,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ return new FlagsBuilder()
+ .setHistory(history)
+ .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT))
+ .toFlags();
}
}