* @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.
*
* @param <D> Class representing declared version of this statement.
*/
public interface EffectiveStatement<A, D extends DeclaredStatement<A>> extends ModelStatement<A> {
+ /**
+ * {@inheritDoc}
+ *
+ * <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.
+ */
+ @Override
+ default StatementOrigin statementOrigin() {
+ return getDeclared() != null ? StatementOrigin.DECLARATION : StatementOrigin.CONTEXT;
+ }
+
/**
* Returns statement, which was explicit declaration of this effective
* statement.
import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementOrigin;
import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatement;
return TypedefEffectiveStatementImpl.this.argument();
}
- @Override
- public StatementOrigin statementOrigin() {
- return StatementOrigin.CONTEXT;
- }
-
@Override
public TypeDefinition<?> getTypeDefinition() {
return TypedefEffectiveStatementImpl.this.getTypeDefinition();
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.IdentifierNamespace;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementOrigin;
import org.opendaylight.yangtools.yang.model.api.stmt.DataTreeAwareEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.DataTreeEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeAwareEffectiveStatement;
@Beta
public abstract class AbstractDeclaredEffectiveStatement<A, D extends DeclaredStatement<A>>
extends AbstractEffectiveStatement<A, D> {
- @Override
- public final StatementOrigin statementOrigin() {
- return StatementOrigin.DECLARATION;
- }
-
@Override
public abstract @NonNull D getDeclared();
import org.opendaylight.yangtools.yang.common.Empty;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementOrigin;
/**
* An abstract base class for {@link DeclaredStatement} implementations. It provides various further stateless and
*/
@Beta
public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatement<A> implements DeclaredStatement<A> {
- @Override
- public StatementOrigin statementOrigin() {
- return StatementOrigin.DECLARATION;
- }
-
@Override
public ImmutableList<? extends DeclaredStatement<?>> declaredSubstatements() {
// Default to reduce load on subclasses and keep the number of implementations down
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.IdentifierNamespace;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementOrigin;
import org.opendaylight.yangtools.yang.model.api.stmt.DataTreeAwareEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.DataTreeEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeAwareEffectiveStatement;
@Beta
public abstract class AbstractUndeclaredEffectiveStatement<A, D extends DeclaredStatement<A>>
extends AbstractEffectiveStatement<A, D> {
- @Override
- public final StatementOrigin statementOrigin() {
- return StatementOrigin.CONTEXT;
- }
-
@Override
public final D getDeclared() {
return null;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementOrigin;
import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
import org.opendaylight.yangtools.yang.model.ri.type.BaseTypes;
public final QName argument() {
return getTypeDefinition().getQName();
}
-
- @Override
- public final StatementOrigin statementOrigin() {
- return StatementOrigin.CONTEXT;
- }
}