From 3cb21f96c1d8b5b22dc948a2c016180cb2456fc8 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 8 Dec 2020 16:28:01 +0100 Subject: [PATCH] Use simple index for feature/extension/identity Modules expose these three contructs in their user-facing namespaces. While the same is available through inference's view of things, and it is tempting to reuse those, this is a DTO contract over provided substatements, hence use a simple filter to construct our own view of the contents. This reduces the dependency on NamespaceStmtCtx, making it easier to separate the logic the DTO logic and the inference logic. Change-Id: I544dd0d2b7f3cf07ea71f1075571056a0c62682d Signed-off-by: Robert Varga --- .../module/ModuleEffectiveStatementImpl.java | 35 ++++++++----------- 1 file changed, 15 insertions(+), 20 deletions(-) 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 6c4e8586c4..b14eed83ce 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 @@ -17,6 +17,7 @@ import java.util.Collection; import java.util.Map; import java.util.Map.Entry; import java.util.Optional; +import java.util.function.Function; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; @@ -27,21 +28,15 @@ 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.ExtensionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionEffectiveStatementNamespace; -import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureEffectiveStatementNamespace; -import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IdentityEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IdentityEffectiveStatementNamespace; -import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement; 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.ExtensionNamespace; -import org.opendaylight.yangtools.yang.parser.spi.FeatureNamespace; -import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameToModuleCtx; @@ -85,27 +80,27 @@ final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule (SubmoduleEffectiveStatement) submodule.buildEffective())); - final Map> extensions = - stmt.localNamespacePortion(ExtensionNamespace.class); - qnameToExtension = extensions == null ? ImmutableMap.of() - : ImmutableMap.copyOf(Maps.transformValues(extensions, StmtContext::buildEffective)); - final Map> features = - stmt.localNamespacePortion(FeatureNamespace.class); - qnameToFeature = features == null ? ImmutableMap.of() - : ImmutableMap.copyOf(Maps.transformValues(features, StmtContext::buildEffective)); - final Map> identities = - stmt.localNamespacePortion(IdentityNamespace.class); - qnameToIdentity = identities == null ? ImmutableMap.of() - : ImmutableMap.copyOf(Maps.transformValues(identities, StmtContext::buildEffective)); + qnameToExtension = substatements.stream() + .filter(ExtensionEffectiveStatement.class::isInstance) + .map(ExtensionEffectiveStatement.class::cast) + .collect(ImmutableMap.toImmutableMap(ExtensionEffectiveStatement::argument, Function.identity())); + qnameToFeature = substatements.stream() + .filter(FeatureEffectiveStatement.class::isInstance) + .map(FeatureEffectiveStatement.class::cast) + .collect(ImmutableMap.toImmutableMap(FeatureEffectiveStatement::argument, Function.identity())); + qnameToIdentity = substatements.stream() + .filter(IdentityEffectiveStatement.class::isInstance) + .map(IdentityEffectiveStatement.class::cast) + .collect(ImmutableMap.toImmutableMap(IdentityEffectiveStatement::argument, Function.identity())); } @Override - public @NonNull QNameModule localQNameModule() { + public QNameModule localQNameModule() { return qnameModule; } @Override - public @NonNull QNameModule getQNameModule() { + public QNameModule getQNameModule() { return qnameModule; } -- 2.36.6