From: Robert Varga Date: Mon, 19 Feb 2018 20:08:56 +0000 (+0100) Subject: Add submodule lookup namespace X-Git-Tag: v2.0.2~40 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=478bc415b646bffd2cfd144cc7247a73f8455636;p=yangtools.git Add submodule lookup namespace ModuleEffectiveStatement needs to allow looking up which submodules were included as the effect of include statements. Since submodule names need to be unique, it is natural to express this as a namespace. Change-Id: I782caba8dfb9ff4dbea5b81e335f06dc797518d5 Signed-off-by: Robert Varga --- diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleEffectiveStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleEffectiveStatement.java index 8a05f8711d..052015a5ab 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleEffectiveStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleEffectiveStatement.java @@ -36,6 +36,16 @@ public interface ModuleEffectiveStatement extends EffectiveStatement { + private NameToEffectiveSubmoduleNamespace() { + // This class should never be subclassed + } + } + /** * Get the local QNameModule of this module. All implementations need to override this default method. * 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 a0f0101fb3..386ae9ad8d 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 @@ -24,13 +24,16 @@ 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.ModuleStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleEffectiveStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveModule; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.ImportPrefixToModuleCtx; +import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameToModuleCtx; import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName; final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule implements ModuleEffectiveStatement { + private final Map nameToSubmodule; private final Map prefixToModule; private final Map namespaceToPrefix; private final @NonNull QNameModule qnameModule; @@ -60,6 +63,12 @@ final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule> submodules = + ctx.getAllFromCurrentStmtCtxNamespace(IncludedSubmoduleNameToModuleCtx.class); + nameToSubmodule = submodules == null ? ImmutableMap.of() : + ImmutableMap.copyOf(Maps.transformValues(submodules, + submodule -> (SubmoduleEffectiveStatement) submodule.buildEffective())); } @Override @@ -82,6 +91,9 @@ final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule) namespaceToPrefix); } + if (NameToEffectiveSubmoduleNamespace.class.equals(namespace)) { + return Optional.of((Map) nameToSubmodule); + } return super.getNamespaceContents(namespace); }