From: Robert Varga Date: Mon, 27 Jan 2020 17:58:58 +0000 (+0100) Subject: Cleanup NamespaceStorageSupport/StmtContext API conflict X-Git-Tag: v5.0.0~198 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=a1721ffa2582da72cb3000cad5c3d7df8a8878e4;hp=23ddbaeb5437a1c289c71bdceaf4ff55ea531af6;p=yangtools.git Cleanup NamespaceStorageSupport/StmtContext API conflict StmtContext has a few methods that are logically implemented by NamespaceStorageSupport. Since NamespaceStorageSupport does not implements StmtContext (nor should it), these methods happen to work as they overlap with StmtContextBase's mixin -- and they cannot be simply found by looking for implementations. Resolve the naming conflict in the most logical way, thus improving quality of life for everyone :) Change-Id: I0186a94699c5945b7140bf57ba9e5900e49019d4 Signed-off-by: Robert Varga --- diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java index 2d4dcf926a..5da495c7ec 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java @@ -26,7 +26,6 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -104,9 +103,7 @@ class BuildGlobalContext extends NamespaceStorageSupport implements Registry { throw new IllegalArgumentException("Unhandled parser mode " + statementParserMode); } - for (final Entry> validationBundle : supportedValidation.entrySet()) { - addToNs(ValidationBundlesNamespace.class, validationBundle.getKey(), validationBundle.getValue()); - } + addToNamespace(ValidationBundlesNamespace.class, supportedValidation); this.supportedVersions = ImmutableSet.copyOf(supports.get(ModelProcessingPhase.INIT).getSupportedVersions()); } @@ -132,12 +129,12 @@ class BuildGlobalContext extends NamespaceStorageSupport implements Registry { } void setSupportedFeatures(final Set supportedFeatures) { - addToNs(SupportedFeaturesNamespace.class, SupportedFeatures.SUPPORTED_FEATURES, + addToNamespace(SupportedFeaturesNamespace.class, SupportedFeatures.SUPPORTED_FEATURES, ImmutableSet.copyOf(supportedFeatures)); } void setModulesDeviatedByModules(final SetMultimap modulesDeviatedByModules) { - addToNs(ModulesDeviatedByModules.class, SupportedModules.SUPPORTED_MODULES, + addToNamespace(ModulesDeviatedByModules.class, SupportedModules.SUPPORTED_MODULES, ImmutableSetMultimap.copyOf(modulesDeviatedByModules)); } diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/NamespaceStorageSupport.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/NamespaceStorageSupport.java index 8ee75f996d..eb6dd6a320 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/NamespaceStorageSupport.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/NamespaceStorageSupport.java @@ -13,6 +13,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Optional; import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace; +import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour; import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.NamespaceStorageNode; import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry; import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceKeyCriterion; @@ -49,54 +50,31 @@ abstract class NamespaceStorageSupport implements NamespaceStorageNode { // NOOP } - /** - * Return a value associated with specified key within a namespace. - * - * @param type Namespace type - * @param key Key - * @param namespace key type - * @param namespace value type - * @param namespace type - * @param key type - * @return Value, or null if there is no element - * @throws NamespaceNotAvailableException when the namespace is not available. - */ - public final > V getFromNamespace(final Class type, - final T key) { - return getBehaviourRegistry().getNamespaceBehaviour(type).getFrom(this, key); - } - public final > Optional> getFromNamespace( final Class type, final NamespaceKeyCriterion criterion) { return getBehaviourRegistry().getNamespaceBehaviour(type).getFrom(this, criterion); } - public final > Map getAllFromNamespace(final Class type) { + public final > Map getNamespace(final Class type) { return getBehaviourRegistry().getNamespaceBehaviour(type).getAllFrom(this); } @SuppressWarnings("unchecked") - public final > Map getAllFromCurrentStmtCtxNamespace( - final Class type) { + final > Map getLocalNamespace(final Class type) { return (Map) namespaces.get(type); } - /** - * Associate a value with a key within a namespace. - * - * @param type Namespace type - * @param key Key - * @param value value - * @param namespace key type - * @param namespace value type - * @param namespace type - * @param key type - * @param value type - * @throws NamespaceNotAvailableException when the namespace is not available. - */ - public final > void addToNs( + final > void addToNamespace( final Class type, final T key, final U value) { - getBehaviourRegistry().getNamespaceBehaviour(type).addTo(this,key,value); + getBehaviourRegistry().getNamespaceBehaviour(type).addTo(this, key, value); + } + + final > void addToNamespace( + final Class type, final Map map) { + final NamespaceBehaviour behavior = getBehaviourRegistry().getNamespaceBehaviour(type); + for (final Entry validationBundle : map.entrySet()) { + behavior.addTo(this, validationBundle.getKey(), validationBundle.getValue()); + } } /** diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java index f1d2652a26..c6c51f301a 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java @@ -429,7 +429,7 @@ public class SourceSpecificContext implements NamespaceStorageNode, NamespaceBeh } // We need to any and all extension statements which have been declared in the context - final Map> extensions = currentContext.getAllFromNamespace( + final Map> extensions = currentContext.getNamespace( StatementDefinitionNamespace.class); if (extensions != null) { extensions.forEach((qname, support) -> { diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java index 0d0a82fc2e..487759ab43 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java @@ -28,6 +28,7 @@ import java.util.EnumMap; import java.util.EventListener; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import java.util.Optional; @@ -60,6 +61,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.MutableStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour; import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry; import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceKeyCriterion; +import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceNotAvailableException; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -308,9 +310,57 @@ public abstract class StatementContextBase, E return getStatementSourceReference().getStatementSource(); } + @Override + public final > Map getAllFromCurrentStmtCtxNamespace( + final Class type) { + return getLocalNamespace(type); + } + + @Override + public final > Map getAllFromNamespace(final Class type) { + return getNamespace(type); + } + + /** + * Associate a value with a key within a namespace. + * + * @param type Namespace type + * @param key Key + * @param value value + * @param namespace key type + * @param namespace value type + * @param namespace type + * @param key type + * @param value type + * @throws NamespaceNotAvailableException when the namespace is not available. + */ + @Override + public final > void addToNs( + final Class type, final T key, final U value) { + addToNamespace(type, key, value); + } + @Override public abstract Collection> mutableDeclaredSubstatements(); + /** + * Return a value associated with specified key within a namespace. + * + * @param type Namespace type + * @param key Key + * @param namespace key type + * @param namespace value type + * @param namespace type + * @param key type + * @return Value, or null if there is no element + * @throws NamespaceNotAvailableException when the namespace is not available. + */ + @Override + public final > V getFromNamespace(final Class type, + final T key) { + return getBehaviourRegistry().getNamespaceBehaviour(type).getFrom(this, key); + } + @Override public Collection> mutableEffectiveSubstatements() { if (effective instanceof ImmutableCollection) {