Recent conversion has shown that we need to better guard these
mixins -- they require use with a SchemaTreeAwareEffectiveStatement.
This captures this requirement in the contract, making
SubmoduleEffectiveStatement correctly be DataTreeAwareEffectiveStatement.
Change-Id: I39a30da293a3088cad912371613d87560eb39605
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
package org.opendaylight.yangtools.yang.model.api.stmt;
import com.google.common.annotations.Beta;
package org.opendaylight.yangtools.yang.model.api.stmt;
import com.google.common.annotations.Beta;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
/**
* Representation of {@code submodule} statement. Note that implementations of this interface are required to provide
/**
* Representation of {@code submodule} statement. Note that implementations of this interface are required to provide
* {@link ModuleEffectiveStatement.QNameModuleToPrefixNamespace} namespaces.
*/
@Beta
* {@link ModuleEffectiveStatement.QNameModuleToPrefixNamespace} namespaces.
*/
@Beta
-public interface SubmoduleEffectiveStatement extends EffectiveStatement<String, SubmoduleStatement> {
+public interface SubmoduleEffectiveStatement extends DataTreeAwareEffectiveStatement<String, SubmoduleStatement> {
* {@link SchemaTreeAwareEffectiveStatement}.
*/
@Beta
* {@link SchemaTreeAwareEffectiveStatement}.
*/
@Beta
-public interface ActionNodeContainerCompat<A, D extends DeclaredStatement<A>>
+public interface ActionNodeContainerCompat<A, D extends DeclaredStatement<A>,
+ E extends SchemaTreeAwareEffectiveStatement<A, D>>
extends SchemaTreeAwareEffectiveStatement<A, D>, ActionNodeContainer {
@Override
extends SchemaTreeAwareEffectiveStatement<A, D>, ActionNodeContainer {
@Override
* {@link SchemaTreeAwareEffectiveStatement}.
*/
@Beta
* {@link SchemaTreeAwareEffectiveStatement}.
*/
@Beta
-public interface NotificationNodeContainerCompat<A, D extends DeclaredStatement<A>>
+public interface NotificationNodeContainerCompat<A, D extends DeclaredStatement<A>,
+ E extends SchemaTreeAwareEffectiveStatement<A, D>>
extends SchemaTreeAwareEffectiveStatement<A, D>, NotificationNodeContainer {
@Override
extends SchemaTreeAwareEffectiveStatement<A, D>, NotificationNodeContainer {
@Override
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.stmt.ContactEffectiveStatement;
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.stmt.ContactEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.DataTreeAwareEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationEffectiveStatement;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
@Beta
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
@Beta
-public abstract class AbstractEffectiveModule<D extends DeclaredStatement<String>> extends
+public abstract class AbstractEffectiveModule<D extends DeclaredStatement<String>,
+ E extends DataTreeAwareEffectiveStatement<String, D>> extends
AbstractSchemaEffectiveDocumentedNode<String, D> implements Module,
AbstractSchemaEffectiveDocumentedNode<String, D> implements Module,
- NotificationNodeContainerCompat<String, D> {
+ NotificationNodeContainerCompat<String, D, E> {
private final String name;
private final String prefix;
private final YangVersion yangVersion;
private final String name;
private final String prefix;
private final YangVersion yangVersion;
implements ContainerEffectiveStatement, ContainerSchemaNode, DerivableSchemaNode,
DataSchemaNodeMixin<QName, ContainerStatement>, DataNodeContainerMixin<QName, ContainerStatement>,
ActionNodeContainerMixin<QName, ContainerStatement>,
implements ContainerEffectiveStatement, ContainerSchemaNode, DerivableSchemaNode,
DataSchemaNodeMixin<QName, ContainerStatement>, DataNodeContainerMixin<QName, ContainerStatement>,
ActionNodeContainerMixin<QName, ContainerStatement>,
- ActionNodeContainerCompat<QName, ContainerStatement>,
+ ActionNodeContainerCompat<QName, ContainerStatement, ContainerEffectiveStatement>,
NotificationNodeContainerMixin<QName, ContainerStatement>,
NotificationNodeContainerMixin<QName, ContainerStatement>,
- NotificationNodeContainerCompat<QName, ContainerStatement>,
+ NotificationNodeContainerCompat<QName, ContainerStatement, ContainerEffectiveStatement>,
MustConstraintMixin<QName, ContainerStatement>, PresenceMixin<QName, ContainerStatement>,
AugmentationTargetMixin<QName, ContainerStatement> {
MustConstraintMixin<QName, ContainerStatement>, PresenceMixin<QName, ContainerStatement>,
AugmentationTargetMixin<QName, ContainerStatement> {
abstract class AbstractListEffectiveStatement
extends DefaultWithDataTree<QName, ListStatement, ListEffectiveStatement>
implements ListEffectiveStatement, ListSchemaNode, DerivableSchemaNode,
abstract class AbstractListEffectiveStatement
extends DefaultWithDataTree<QName, ListStatement, ListEffectiveStatement>
implements ListEffectiveStatement, ListSchemaNode, DerivableSchemaNode,
- ActionNodeContainerCompat<QName, ListStatement>, NotificationNodeContainerCompat<QName, ListStatement>,
+ ActionNodeContainerCompat<QName, ListStatement, ListEffectiveStatement>,
+ NotificationNodeContainerCompat<QName, ListStatement, ListEffectiveStatement>,
DataSchemaNodeMixin<QName, ListStatement>, UserOrderedMixin<QName, ListStatement>,
DataNodeContainerMixin<QName, ListStatement>, WhenConditionMixin<QName, ListStatement>,
AugmentationTargetMixin<QName, ListStatement>, NotificationNodeContainerMixin<QName, ListStatement>,
DataSchemaNodeMixin<QName, ListStatement>, UserOrderedMixin<QName, ListStatement>,
DataNodeContainerMixin<QName, ListStatement>, WhenConditionMixin<QName, ListStatement>,
AugmentationTargetMixin<QName, ListStatement>, NotificationNodeContainerMixin<QName, ListStatement>,
import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameToModuleCtx;
import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName;
import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameToModuleCtx;
import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName;
-final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule<ModuleStatement>
+final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule<ModuleStatement, ModuleEffectiveStatement>
implements ModuleEffectiveStatement {
private final ImmutableMap<String, SubmoduleEffectiveStatement> nameToSubmodule;
private final ImmutableMap<QName, ExtensionEffectiveStatement> qnameToExtension;
implements ModuleEffectiveStatement {
private final ImmutableMap<String, SubmoduleEffectiveStatement> nameToSubmodule;
private final ImmutableMap<QName, ExtensionEffectiveStatement> qnameToExtension;
import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNameToModuleQName;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNameToModuleQName;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
-final class SubmoduleEffectiveStatementImpl extends AbstractEffectiveModule<SubmoduleStatement>
+final class SubmoduleEffectiveStatementImpl
+ extends AbstractEffectiveModule<SubmoduleStatement, SubmoduleEffectiveStatement>
implements SubmoduleEffectiveStatement, MutableStatement {
private final ImmutableMap<String, ModuleEffectiveStatement> prefixToModule;
private final ImmutableMap<QNameModule, String> namespaceToPrefix;
implements SubmoduleEffectiveStatement, MutableStatement {
private final ImmutableMap<String, ModuleEffectiveStatement> prefixToModule;
private final ImmutableMap<QNameModule, String> namespaceToPrefix;