* @param <A> Argument type ({@link Empty} if statement does not have argument.)
*/
public interface DeclaredStatement<A> extends ModelStatement<A> {
- /**
- * {@inheritDoc}
- *
- * <p>
- * Implementations are required to return {@link StatementOrigin#DECLARATION}, which is what the default
- * implementation does. This method should never be explicitly implemented.
- */
- @Override
- default StatementOrigin statementOrigin() {
- return StatementOrigin.DECLARATION;
- }
-
/**
* Returns statement argument as was present in original source.
*
*/
public interface EffectiveStatement<A, D extends DeclaredStatement<A>> extends ModelStatement<A> {
/**
- * {@inheritDoc}
+ * Returns {@link StatementOrigin}, which denotes if statement was explicitly declared in original model or inferred
+ * during semantic processing of model.
*
* <p>
* Implementations are required to return a {@link StatementOrigin}, consistent with {@link #getDeclared()}
* nullness. This is what the default implementation does and hence this method should never be explicitly
* implemented -- unless there is significant cost to the {@link #getDeclared()} implementation.
+ *
+ * @return statement origin.
*/
- @Override
- default StatementOrigin statementOrigin() {
+ default @NonNull StatementOrigin statementOrigin() {
return getDeclared() != null ? StatementOrigin.DECLARATION : StatementOrigin.CONTEXT;
}
*
* @param <A> Argument type ({@link Empty} if statement does not have argument.)
*/
+// FIXME: sealed interface when we have JDK17+
public interface ModelStatement<A> {
/**
* Statement Definition of this statement.
* @return statement argument.
*/
@NonNull A argument();
-
- /**
- * Returns {@link StatementOrigin}, which denotes if statement was explicitly declared in original model or inferred
- * during semantic processing of model.
- *
- * @return statement origin.
- */
- @NonNull StatementOrigin statementOrigin();
}
OpenElement(final Iterator<? extends DeclaredStatement<?>> children) {
this.children = requireNonNull(children);
- this.name = null;
+ name = null;
}
OpenElement(final QName name, final Iterator<? extends DeclaredStatement<?>> children) {
}
private void nextStatement() {
- OpenElement current = stack.peek();
+ final OpenElement current = stack.peek();
if (current == null) {
return;
}
do {
- while (current.children.hasNext()) {
- // We have to mind child statement origin and not emit empty implicit children
- final DeclaredStatement<?> child = current.children.next();
- switch (child.statementOrigin()) {
- case CONTEXT:
- final Iterator<? extends DeclaredStatement<?>> it = child.declaredSubstatements().iterator();
- if (it.hasNext()) {
- current = new OpenElement(it);
- }
- break;
- case DECLARATION:
- addStatement(child);
- return;
- default:
- throw new IllegalStateException("Unhandled statement origin " + child.statementOrigin());
- }
+ if (current.children.hasNext()) {
+ addStatement(current.children.next());
+ return;
}
if (current.name != null) {
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.model.api.meta.ModelStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementOrigin;
/**
* Common base class for forwarding implementations of {@link ModelStatement}.
return delegate().argument();
}
- @Override
- public StatementOrigin statementOrigin() {
- return delegate().statementOrigin();
- }
-
@Override
protected abstract @NonNull S delegate();
}