From 478bc415b646bffd2cfd144cc7247a73f8455636 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 19 Feb 2018 21:08:56 +0100 Subject: [PATCH] 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 --- .../model/api/stmt/ModuleEffectiveStatement.java | 10 ++++++++++ .../stmt/module/ModuleEffectiveStatementImpl.java | 12 ++++++++++++ 2 files changed, 22 insertions(+) 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); } -- 2.36.6