From 3fb52b5ee8449944f233e8c277b2f689da6c433d Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 6 Feb 2020 14:53:09 +0100 Subject: [PATCH] Improve {Action,Notification}NodeContainerCompat safety 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 --- .../yang/model/api/stmt/SubmoduleEffectiveStatement.java | 3 +-- .../model/api/stmt/compat/ActionNodeContainerCompat.java | 3 ++- .../api/stmt/compat/NotificationNodeContainerCompat.java | 3 ++- .../yang/parser/rfc7950/stmt/AbstractEffectiveModule.java | 6 ++++-- .../stmt/container/ContainerEffectiveStatementImpl.java | 4 ++-- .../rfc7950/stmt/list/AbstractListEffectiveStatement.java | 3 ++- .../rfc7950/stmt/module/ModuleEffectiveStatementImpl.java | 2 +- .../stmt/submodule/SubmoduleEffectiveStatementImpl.java | 3 ++- 8 files changed, 16 insertions(+), 11 deletions(-) diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SubmoduleEffectiveStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SubmoduleEffectiveStatement.java index 953285a96a..65993c39c4 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SubmoduleEffectiveStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SubmoduleEffectiveStatement.java @@ -8,7 +8,6 @@ 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 @@ -16,6 +15,6 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; * {@link ModuleEffectiveStatement.QNameModuleToPrefixNamespace} namespaces. */ @Beta -public interface SubmoduleEffectiveStatement extends EffectiveStatement { +public interface SubmoduleEffectiveStatement extends DataTreeAwareEffectiveStatement { } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/compat/ActionNodeContainerCompat.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/compat/ActionNodeContainerCompat.java index 1f0ced6239..f2f4f4d01e 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/compat/ActionNodeContainerCompat.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/compat/ActionNodeContainerCompat.java @@ -20,7 +20,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeAwareEffectiveSt * {@link SchemaTreeAwareEffectiveStatement}. */ @Beta -public interface ActionNodeContainerCompat> +public interface ActionNodeContainerCompat, + E extends SchemaTreeAwareEffectiveStatement> extends SchemaTreeAwareEffectiveStatement, ActionNodeContainer { @Override diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/compat/NotificationNodeContainerCompat.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/compat/NotificationNodeContainerCompat.java index 37a64bfb4f..16e9dc38ab 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/compat/NotificationNodeContainerCompat.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/compat/NotificationNodeContainerCompat.java @@ -20,7 +20,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeAwareEffectiveSt * {@link SchemaTreeAwareEffectiveStatement}. */ @Beta -public interface NotificationNodeContainerCompat> +public interface NotificationNodeContainerCompat, + E extends SchemaTreeAwareEffectiveStatement> extends SchemaTreeAwareEffectiveStatement, NotificationNodeContainer { @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java index cb977f527d..8de6d290a6 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java @@ -47,6 +47,7 @@ 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.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; @@ -63,9 +64,10 @@ import org.opendaylight.yangtools.yang.parser.spi.source.ImportPrefixToModuleCtx import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta -public abstract class AbstractEffectiveModule> extends +public abstract class AbstractEffectiveModule, + E extends DataTreeAwareEffectiveStatement> extends AbstractSchemaEffectiveDocumentedNode implements Module, - NotificationNodeContainerCompat { + NotificationNodeContainerCompat { private final String name; private final String prefix; private final YangVersion yangVersion; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerEffectiveStatementImpl.java index b283cb3d23..c8c8e240b8 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerEffectiveStatementImpl.java @@ -39,9 +39,9 @@ final class ContainerEffectiveStatementImpl implements ContainerEffectiveStatement, ContainerSchemaNode, DerivableSchemaNode, DataSchemaNodeMixin, DataNodeContainerMixin, ActionNodeContainerMixin, - ActionNodeContainerCompat, + ActionNodeContainerCompat, NotificationNodeContainerMixin, - NotificationNodeContainerCompat, + NotificationNodeContainerCompat, MustConstraintMixin, PresenceMixin, AugmentationTargetMixin { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListEffectiveStatement.java index 4c515ce28d..b10d3ad496 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListEffectiveStatement.java @@ -40,7 +40,8 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; abstract class AbstractListEffectiveStatement extends DefaultWithDataTree implements ListEffectiveStatement, ListSchemaNode, DerivableSchemaNode, - ActionNodeContainerCompat, NotificationNodeContainerCompat, + ActionNodeContainerCompat, + NotificationNodeContainerCompat, DataSchemaNodeMixin, UserOrderedMixin, DataNodeContainerMixin, WhenConditionMixin, AugmentationTargetMixin, NotificationNodeContainerMixin, diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java index 7bda11fac5..d6a9a16081 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java @@ -42,7 +42,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameToModuleCtx; import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName; -final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule +final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule implements ModuleEffectiveStatement { private final ImmutableMap nameToSubmodule; private final ImmutableMap qnameToExtension; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java index c3d1d6731c..dcdd68bd7c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java @@ -42,7 +42,8 @@ import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameTo import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNameToModuleQName; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -final class SubmoduleEffectiveStatementImpl extends AbstractEffectiveModule +final class SubmoduleEffectiveStatementImpl + extends AbstractEffectiveModule implements SubmoduleEffectiveStatement, MutableStatement { private final ImmutableMap prefixToModule; private final ImmutableMap namespaceToPrefix; -- 2.36.6