From d0340ae67cb7a29fb4fd95c52e30cfcd7bd7a54f Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 2 Dec 2020 13:57:45 +0100 Subject: [PATCH] Move more StatementContextBase methods ReactStmtCtx is overtaking the role of baseline implementation, hence we move forwarder final methods there. JIRA: YANGTOOLS-1184 Change-Id: I4ac8b13b29ddd5db7b7960ae6e271fcd223a09d2 Signed-off-by: Robert Varga --- .../stmt/reactor/NamespaceStorageSupport.java | 3 +- .../parser/stmt/reactor/ReactorStmtCtx.java | 125 ++++++++++++++++ .../stmt/reactor/StatementContextBase.java | 134 +----------------- .../yang/parser/spi/meta/StmtContext.java | 5 + 4 files changed, 134 insertions(+), 133 deletions(-) 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 94c74f25d1..45fae8c56d 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 @@ -14,6 +14,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; 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; @@ -47,7 +48,7 @@ abstract class NamespaceStorageSupport implements NamespaceStorageNode { * * @return registry of source context */ - public abstract Registry getBehaviourRegistry(); + public abstract @NonNull Registry getBehaviourRegistry(); protected void checkLocalNamespaceAllowed(final Class> type) { // NOOP diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java index 19c221af9d..421d9e806b 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java @@ -9,12 +9,23 @@ package org.opendaylight.yangtools.yang.parser.stmt.reactor; import static com.google.common.base.Verify.verify; +import com.google.common.base.MoreObjects; +import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.VerifyException; import java.util.Collection; +import java.util.Map; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; +import org.opendaylight.yangtools.yang.common.YangVersion; 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.meta.StatementDefinition; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; +import org.opendaylight.yangtools.yang.parser.spi.meta.MutableStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -84,9 +95,123 @@ abstract class ReactorStmtCtx, E extends Effec private @Nullable E effectiveInstance; + // + // + // Common public interface contracts with simple mechanics. Please keep this in one logical block, so we do not end + // up mixing concerns and simple details with more complex logic. + // + // + @Override public abstract StatementContextBase getParentContext(); + @Override + public abstract RootStatementContext getRoot(); + + @Override + public abstract Collection> mutableDeclaredSubstatements(); + + @Override + public final @NonNull Registry getBehaviourRegistry() { + return getRoot().getBehaviourRegistryImpl(); + } + + @Override + public final YangVersion getRootVersion() { + return getRoot().getRootVersionImpl(); + } + + @Override + public final void setRootVersion(final YangVersion version) { + getRoot().setRootVersionImpl(version); + } + + @Override + public final void addMutableStmtToSeal(final MutableStatement mutableStatement) { + getRoot().addMutableStmtToSealImpl(mutableStatement); + } + + @Override + public final void addRequiredSource(final SourceIdentifier dependency) { + getRoot().addRequiredSourceImpl(dependency); + } + + @Override + public final void setRootIdentifier(final SourceIdentifier identifier) { + getRoot().setRootIdentifierImpl(identifier); + } + + @Override + public final boolean isEnabledSemanticVersioning() { + return getRoot().isEnabledSemanticVersioningImpl(); + } + + @Override + public final ModelActionBuilder newInferenceAction(final ModelProcessingPhase phase) { + return getRoot().getSourceContext().newInferenceAction(phase); + } + + @Override + public final StatementDefinition publicDefinition() { + return definition().getPublicView(); + } + + @Override + public final String toString() { + return addToStringAttributes(MoreObjects.toStringHelper(this).omitNullValues()).toString(); + } + + protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { + return toStringHelper.add("definition", definition()).add("rawArgument", rawArgument()); + } + + /** + * Return the context in which this statement was defined. + * + * @return statement definition + */ + abstract @NonNull StatementDefinitionContext definition(); + + // + // + // NamespaceStorageSupport/Mutable integration methods. Keep these together. + // + // + + @Override + public final > V getFromNamespace( + final Class<@NonNull N> type, final T key) { + return getBehaviourRegistry().getNamespaceBehaviour(type).getFrom(this, key); + } + + @Override + public final > Map getAllFromNamespace(final Class type) { + return getNamespace(type); + } + + @Override + public final > Map getAllFromCurrentStmtCtxNamespace( + final Class type) { + return getLocalNamespace(type); + } + + @Override + protected final void checkLocalNamespaceAllowed(final Class> type) { + definition().checkNamespaceAllowed(type); + } + + @Override + protected > void onNamespaceElementAdded(final Class type, final K key, + final V value) { + // definition().onNamespaceElementAdded(this, type, key, value); + } + + // + // + // Statement build entry points -- both public and package-private. + // + // + @Override public final E buildEffective() { final E existing; 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 83c810df69..319031d812 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 @@ -14,8 +14,6 @@ import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMultimap; @@ -28,7 +26,6 @@ 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.Optional; import java.util.Set; @@ -37,7 +34,6 @@ import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; -import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -49,18 +45,14 @@ import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyHistory; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; import org.opendaylight.yangtools.yang.parser.spi.meta.ImplicitParentAwareStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; -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.StatementSupport.CopyPolicy; @@ -263,100 +255,12 @@ public abstract class StatementContextBase, E this.completedPhase = completedPhase; } - /** - * Returns the model root for this statement. - * - * @return root context of statement - */ - @Override - public abstract RootStatementContext getRoot(); - - @Override - public final @NonNull Registry getBehaviourRegistry() { - return getRoot().getBehaviourRegistryImpl(); - } - - @Override - public final YangVersion getRootVersion() { - return getRoot().getRootVersionImpl(); - } - - @Override - public final void setRootVersion(final YangVersion version) { - getRoot().setRootVersionImpl(version); - } - - @Override - public final void addMutableStmtToSeal(final MutableStatement mutableStatement) { - getRoot().addMutableStmtToSealImpl(mutableStatement); - } - - @Override - public final void addRequiredSource(final SourceIdentifier dependency) { - getRoot().addRequiredSourceImpl(dependency); - } - - @Override - public final void setRootIdentifier(final SourceIdentifier identifier) { - getRoot().setRootIdentifierImpl(identifier); - } - - @Override - public final boolean isEnabledSemanticVersioning() { - return getRoot().isEnabledSemanticVersioningImpl(); - } - - @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<@NonNull N> 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<@NonNull N> type, final T key) { - return getBehaviourRegistry().getNamespaceBehaviour(type).getFrom(this, key); - } - static final Collection> mutableEffectiveSubstatements( final List> effective) { return effective instanceof ImmutableCollection ? effective : Collections.unmodifiableCollection(effective); @@ -658,24 +562,9 @@ public abstract class StatementContextBase, E definition.onDeclarationFinished(this, phase); } - /** - * Return the context in which this statement was defined. - * - * @return statement definition - */ - protected final @NonNull StatementDefinitionContext definition() { - return definition; - } - - @Override - protected void checkLocalNamespaceAllowed(final Class> type) { - definition.checkNamespaceAllowed(type); - } - @Override - protected > void onNamespaceElementAdded(final Class type, final K key, - final V value) { - // definition().onNamespaceElementAdded(this, type, key, value); + final StatementDefinitionContext definition() { + return definition; } final > void onNamespaceItemAddedAction(final Class type, final K key, @@ -749,16 +638,6 @@ public abstract class StatementContextBase, E return (NamespaceBehaviourWithListeners) behaviour; } - @Override - public final StatementDefinition publicDefinition() { - return definition.getPublicView(); - } - - @Override - public final ModelActionBuilder newInferenceAction(final ModelProcessingPhase phase) { - return getRoot().getSourceContext().newInferenceAction(phase); - } - private static Multimap newMultimap() { return Multimaps.newListMultimap(new EnumMap<>(ModelProcessingPhase.class), () -> new ArrayList<>(1)); } @@ -1087,13 +966,4 @@ public abstract class StatementContextBase, E // FIXME: this does not look right return maybeParentPath.orElse(null); } - - @Override - public final String toString() { - return addToStringAttributes(MoreObjects.toStringHelper(this).omitNullValues()).toString(); - } - - protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { - return toStringHelper.add("definition", definition).add("rawArgument", rawArgument()); - } } diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java index 26b13ad027..24abd97787 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java @@ -139,6 +139,11 @@ public interface StmtContext, E extends Effect > Map getAllFromCurrentStmtCtxNamespace(Class type); + /** + * Returns the model root for this statement. + * + * @return root context of statement + */ @NonNull RootStmtContext getRoot(); /** -- 2.36.6