import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
/**
* An abstract base class for {@link DeclaredStatement} implementations. This is a direct competition to
* implementations.
*/
@Beta
+// FIXME: 7.0.0: we should be able to promote this to model.spi.meta package.
public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatement<A> implements DeclaredStatement<A> {
protected AbstractDeclaredStatement() {
}
@Override
- public final StatementSource getStatementSource() {
+ public StatementSource getStatementSource() {
return StatementSource.DECLARATION;
}
public abstract static class WithRawArgument<A> extends AbstractDeclaredStatement<A> {
private final String rawArgument;
- protected WithRawArgument(final StmtContext<A, ?, ?> context) {
- rawArgument = context.rawStatementArgument();
+ protected WithRawArgument(final String rawArgument) {
+ this.rawArgument = rawArgument;
}
@Override
}
}
- private final QName argument;
+ private final @NonNull QName argument;
protected WithQNameArgument(final QName argument) {
this.argument = requireNonNull(argument);
public abstract static class WithSubstatements extends WithRawStringArgument {
private final @NonNull Object substatements;
- protected WithSubstatements(final StmtContext<String, ?, ?> context,
+ protected WithSubstatements(final String rawArgument,
final ImmutableList<? extends DeclaredStatement<?>> substatements) {
- super(context);
+ super(rawArgument);
this.substatements = maskList(substatements);
}
}
}
- protected WithRawStringArgument(final StmtContext<String, ?, ?> context) {
- super(context);
+ protected WithRawStringArgument(final String rawArgument) {
+ super(rawArgument);
}
@Override
public abstract static class WithSubstatements<A> extends WithArgument<A> {
private final @NonNull Object substatements;
- protected WithSubstatements(final StmtContext<A, ?, ?> context,
+ protected WithSubstatements(final String rawArgument, final A argument,
final ImmutableList<? extends DeclaredStatement<?>> substatements) {
- super(context);
+ super(rawArgument, argument);
this.substatements = maskList(substatements);
}
private final A argument;
- protected WithArgument(final StmtContext<A, ?, ?> context) {
- super(context);
- argument = context.getStatementArgument();
+ protected WithArgument(final String rawArgument, final A argument) {
+ super(rawArgument);
+ this.argument = argument;
}
@Override
return argument.toString();
}
}
+
+ public abstract static class WithoutArgument extends AbstractDeclaredStatement<Void> {
+ public abstract static class WithSubstatements extends WithoutArgument {
+ private final @NonNull Object substatements;
+
+ protected WithSubstatements(final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+ this.substatements = maskList(substatements);
+ }
+
+ @Override
+ public final Collection<? extends DeclaredStatement<?>> declaredSubstatements() {
+ return unmaskList(substatements);
+ }
+ }
+
+ @Override
+ public final Void argument() {
+ return null;
+ }
+
+ @Override
+ public final String rawArgument() {
+ return null;
+ }
+ }
}