Remove StatementNamespace 53/102153/3
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 18 Aug 2022 16:05:03 +0000 (18:05 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 18 Aug 2022 21:29:44 +0000 (23:29 +0200)
This is a pure type capture of keys and values, let's remove the
indirection. This also improves type safety of users, as we can cleanly
express StmtContext type (based on the ParserNamespace type).

JIRA: YANGTOOLS-1453
Change-Id: Icc626957b6b3b94c9cdd89a518be6037f4fdaaac
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
17 files changed:
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ModifierImpl.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/NamespaceStorageSupport.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReplicaStatementContext.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementSupport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BelongsToStatementSupport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IncludeStatementSupport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/ParserNamespaces.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/SchemaTreeNamespace.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/ModelActionBuilder.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/ParserNamespace.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StatementNamespace.java [deleted file]
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/SourceParserNamespaces.java

index 9c0eccfd96166e8b9f3949f627baadb9df2a9795..a6dff4a62925b15cd7c89b7c5d3158a68046efa6 100644 (file)
@@ -29,7 +29,6 @@ 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.NamespaceKeyCriterion;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase.ContextMutation;
@@ -89,7 +88,7 @@ final class ModifierImpl implements ModelActionBuilder {
     }
 
     private <K, C extends StmtContext<?, ?, ?>> @NonNull AbstractPrerequisite<C> requiresCtxImpl(
-            final StmtContext<?, ?, ?> context, final StatementNamespace<K, ?, ?> namespace, final K key,
+            final StmtContext<?, ?, ?> context, final ParserNamespace<K, C> namespace, final K key,
             final ModelProcessingPhase phase)  {
         checkNotRegistered();
 
@@ -100,7 +99,7 @@ final class ModifierImpl implements ModelActionBuilder {
     }
 
     private <K, C extends StmtContext<?, ?, ?>> @NonNull AbstractPrerequisite<C> requiresCtxImpl(
-            final StmtContext<?, ?, ?> context, final StatementNamespace<K, ?, ?> namespace,
+            final StmtContext<?, ?, ?> context, final ParserNamespace<K, C> namespace,
             final NamespaceKeyCriterion<K> criterion, final ModelProcessingPhase phase)  {
         checkNotRegistered();
 
@@ -166,14 +165,14 @@ final class ModifierImpl implements ModelActionBuilder {
     }
 
     @Override
-    public <K> Prerequisite<StmtContext<?, ?, ?>> requiresCtx(final StmtContext<?, ?, ?> context,
-            final StatementNamespace<K, ?, ?> namespace, final K key, final ModelProcessingPhase phase) {
+    public <K, C extends StmtContext<?, ?, ?>> Prerequisite<C> requiresCtx(final StmtContext<?, ?, ?> context,
+            final ParserNamespace<K, C> namespace, final K key, final ModelProcessingPhase phase) {
         return requiresCtxImpl(context, namespace, key, phase);
     }
 
     @Override
-    public <K> Prerequisite<StmtContext<?, ?, ?>> requiresCtx(final StmtContext<?, ?, ?> context,
-            final StatementNamespace<K, ?, ?> namespace, final NamespaceKeyCriterion<K> criterion,
+    public <K, C extends StmtContext<?, ?, ?>> Prerequisite<C> requiresCtx(final StmtContext<?, ?, ?> context,
+            final ParserNamespace<K, C> namespace, final NamespaceKeyCriterion<K> criterion,
             final ModelProcessingPhase phase) {
         return requiresCtxImpl(context, namespace, criterion, phase);
     }
@@ -199,16 +198,14 @@ final class ModifierImpl implements ModelActionBuilder {
     @Override
     @Deprecated
     public <K, D extends DeclaredStatement<?>> Prerequisite<D> requiresDeclared(final StmtContext<?, ?, ?> context,
-            final StatementNamespace<K, ? extends D, ?> namespace, final K key) {
-        final AbstractPrerequisite<StmtContext<?, D, ?>> rawContext = requiresCtxImpl(context, namespace, key,
-            FULL_DECLARATION);
-        return rawContext.transform(StmtContext::declared);
+            final ParserNamespace<K, StmtContext<?, ? extends D, ?>> namespace, final K key) {
+        return requiresCtxImpl(context, namespace, key, FULL_DECLARATION).transform(StmtContext::declared);
     }
 
     @Override
     @Deprecated
-    public <K, D extends DeclaredStatement<?>> AbstractPrerequisite<StmtContext<?, D, ?>> requiresDeclaredCtx(
-            final StmtContext<?, ?, ?> context, final StatementNamespace<K, ? extends D, ?> namespace, final K key) {
+    public <K, C extends StmtContext<?, ?, ?>> AbstractPrerequisite<C> requiresDeclaredCtx(
+            final StmtContext<?, ?, ?> context, final ParserNamespace<K, C> namespace, final K key) {
         return requiresCtxImpl(context, namespace, key, FULL_DECLARATION);
     }
 
@@ -222,16 +219,14 @@ final class ModifierImpl implements ModelActionBuilder {
     @Override
     @Deprecated
     public <K, E extends EffectiveStatement<?, ?>> Prerequisite<E> requiresEffective(final StmtContext<?, ?, ?> context,
-            final StatementNamespace<K, ?, ? extends E> namespace, final K key) {
-        final AbstractPrerequisite<StmtContext<?, ?, E>> rawContext = requiresCtxImpl(context, namespace, key,
-            EFFECTIVE_MODEL);
-        return rawContext.transform(StmtContext::buildEffective);
+            final ParserNamespace<K, StmtContext<?, ?, ? extends E>> namespace, final K key) {
+        return requiresCtxImpl(context, namespace, key, EFFECTIVE_MODEL).transform(StmtContext::buildEffective);
     }
 
     @Override
     @Deprecated
-    public <K, E extends EffectiveStatement<?, ?>> AbstractPrerequisite<StmtContext<?, ?, E>> requiresEffectiveCtx(
-            final StmtContext<?, ?, ?> context, final StatementNamespace<K, ?, ? extends E> namespace, final K key) {
+    public <K, C extends StmtContext<?, ?, ?>> AbstractPrerequisite<C> requiresEffectiveCtx(
+            final StmtContext<?, ?, ?> context, final ParserNamespace<K, C> namespace, final K key) {
         return requiresCtxImpl(contextImpl(context), namespace, key, EFFECTIVE_MODEL);
     }
 
index 9793a648144afe7e40da56dbafcf3a0188947ff3..ffa6b83d1f9924fe1a09aa6d41a7f46d6d186b99 100644 (file)
@@ -23,7 +23,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Regist
 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.ParserNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.slf4j.Logger;
@@ -105,7 +104,7 @@ abstract class NamespaceStorageSupport implements NamespaceStorageNode {
      * @throws NamespaceNotAvailableException when the namespace is not available.
      */
     public final <K, D extends DeclaredStatement<?>, E extends EffectiveStatement<?, D>> void addContextToNamespace(
-            final StatementNamespace<K, D, E> type, final K key, final StmtContext<?, D, E> value) {
+            final ParserNamespace<K, StmtContext<?, D, E>> type, final K key, final StmtContext<?, D, E> value) {
         getBehaviourRegistry().getNamespaceBehaviour(type).addTo(this, key, value);
     }
 
index 4d639a520023994d4b3d05f656b3f0454af6d5b8..77b916330c0a109aebde2443099a04aed1576cd9 100644 (file)
@@ -22,7 +22,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.StorageNodeType;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementFactory;
-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;
 import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
@@ -168,7 +167,7 @@ final class ReplicaStatementContext<A, D extends DeclaredStatement<A>, E extends
     @Override
     @Deprecated
     public <K, KT extends K, Y extends DeclaredStatement<?>, Z extends EffectiveStatement<?, Y>> void addContext(
-            final StatementNamespace<K, Y, Z> namespace, final KT key, final StmtContext<?, Y, Z> stmt) {
+            final ParserNamespace<K, StmtContext<?, Y, Z>> namespace, final KT key, final StmtContext<?, Y, Z> stmt) {
         throw new UnsupportedOperationException();
     }
 
index fd91fe632d7400e798395edd5b67c9eb774fbb1b..583bf61d53fc5131650e18e00eda2197943baec2 100644 (file)
@@ -45,7 +45,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceKeyCriterion;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementFactory;
-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;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
@@ -719,7 +718,7 @@ abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E extends
 
     @Override
     public final <K, KT extends K, Y extends DeclaredStatement<?>, Z extends EffectiveStatement<?, Y>> void addContext(
-            final StatementNamespace<K, Y, Z> namespace, final KT key, final StmtContext<?, Y, Z> stmt) {
+            final ParserNamespace<K, StmtContext<?, Y, Z>> namespace, final KT key, final StmtContext<?, Y, Z> stmt) {
         addContextToNamespace(namespace, key, stmt);
     }
 
index c98205a6b92fc9c0a3080430a4b7720e60973188..7659f9ff52b7082f53c19074211c4d9e7b12d081 100644 (file)
@@ -26,6 +26,8 @@ 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.stmt.ImportEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement;
+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.PrefixStatement;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
@@ -88,8 +90,8 @@ public final class ImportStatementSupport
 
         final Unqualified moduleName = stmt.getArgument();
         final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_PRE_LINKAGE);
-        final Prerequisite<StmtContext<?, ?, ?>> imported = importAction.requiresCtx(stmt,
-            ParserNamespaces.PRELINKAGE_MODULE, moduleName, SOURCE_PRE_LINKAGE);
+        final Prerequisite<StmtContext<?, ModuleStatement, ModuleEffectiveStatement>> imported =
+            importAction.requiresCtx(stmt, ParserNamespaces.PRELINKAGE_MODULE, moduleName, SOURCE_PRE_LINKAGE);
         final Prerequisite<Mutable<?, ?, ?>> rootPrereq = importAction.mutatesCtx(stmt.getRoot(), SOURCE_PRE_LINKAGE);
 
         importAction.apply(new InferenceAction() {
index 0314cc2e5c39925d058802845c957af771f952bd..63b4b294c41fda076348045d49dc1b533c0d961e 100644 (file)
@@ -18,6 +18,8 @@ import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement;
+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.PrefixStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
@@ -40,9 +42,9 @@ final class RevisionImport {
 
     static void onLinkageDeclared(final Mutable<Unqualified, ImportStatement, ImportEffectiveStatement> stmt) {
         final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_LINKAGE);
-        final Prerequisite<StmtContext<?, ?, ?>> imported;
         final Unqualified moduleName = stmt.getArgument();
         final Revision revision = firstAttributeOf(stmt.declaredSubstatements(), RevisionDateStatement.class);
+        final Prerequisite<StmtContext<?, ModuleStatement, ModuleEffectiveStatement>> imported;
         if (revision == null) {
             imported = importAction.requiresCtx(stmt, ParserNamespaces.MODULE,
                 NamespaceKeyCriterion.latestRevisionModule(moduleName), SOURCE_LINKAGE);
index 00f1222816a304a73b2e59772e36cc787a8ead4c..69fbdeb400644f45a7bedc3c28163f9b23907f15 100644 (file)
@@ -18,6 +18,8 @@ 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.stmt.BelongsToEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
+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.PrefixStatement;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
@@ -57,9 +59,9 @@ public final class BelongsToStatementSupport
             final Mutable<Unqualified, BelongsToStatement, BelongsToEffectiveStatement> belongsToCtx) {
         ModelActionBuilder belongsToAction = belongsToCtx.newInferenceAction(ModelProcessingPhase.SOURCE_LINKAGE);
 
-        final Prerequisite<StmtContext<?, ?, ?>> belongsToPrereq = belongsToAction.requiresCtx(belongsToCtx,
-            SourceParserNamespaces.MODULE_FOR_BELONGSTO, belongsToCtx.getArgument(),
-            ModelProcessingPhase.SOURCE_LINKAGE);
+        final Prerequisite<StmtContext<?, ModuleStatement, ModuleEffectiveStatement>> belongsToPrereq =
+            belongsToAction.requiresCtx(belongsToCtx, SourceParserNamespaces.MODULE_FOR_BELONGSTO,
+                belongsToCtx.getArgument(), ModelProcessingPhase.SOURCE_LINKAGE);
 
         belongsToAction.apply(new InferenceAction() {
             @Override
index 82756214cc95976028c8e66ccfb68fef6748e224..a7c38abc7dd97cd89e28c362b44cf3d9652c4999 100644 (file)
@@ -24,6 +24,8 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
 import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
@@ -84,7 +86,7 @@ public final class IncludeStatementSupport
         final StmtContext<Revision, ?, ?> revision = findFirstDeclaredSubstatement(stmt, RevisionDateStatement.class);
 
         final ModelActionBuilder includeAction = stmt.newInferenceAction(SOURCE_LINKAGE);
-        final Prerequisite<StmtContext<?, ?, ?>> requiresCtxPrerequisite;
+        final Prerequisite<StmtContext<?, SubmoduleStatement, SubmoduleEffectiveStatement>> requiresCtxPrerequisite;
         if (revision == null) {
             requiresCtxPrerequisite = includeAction.requiresCtx(stmt, ParserNamespaces.SUBMODULE,
                 NamespaceKeyCriterion.latestRevisionModule(submoduleName), SOURCE_LINKAGE);
index c9590bcf404da74b4f896a21d2a3cd7005487d4c..d3d9e7d3cdf921dc2a2501581cd2d77ba5bcffb4 100644 (file)
@@ -33,6 +33,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceEffectiveSt
 import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
 import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit;
@@ -151,8 +152,8 @@ abstract class AbstractTypeStatementSupport extends AbstractTypeSupport<TypeStat
         }
 
         final ModelActionBuilder typeAction = stmt.newInferenceAction(ModelProcessingPhase.EFFECTIVE_MODEL);
-        final Prerequisite<StmtContext<?, ?, ?>> typePrereq = typeAction.requiresCtx(stmt, ParserNamespaces.TYPE,
-                typeQName, ModelProcessingPhase.EFFECTIVE_MODEL);
+        final Prerequisite<StmtContext<?, TypedefStatement, TypedefEffectiveStatement>> typePrereq =
+            typeAction.requiresCtx(stmt, ParserNamespaces.TYPE, typeQName, ModelProcessingPhase.EFFECTIVE_MODEL);
         typeAction.mutatesEffectiveCtx(stmt.getParentContext());
 
         /*
index 08359da63a7238d451b9a72672c5145fd1fa6f96..15f547ce7b0539f31b4128d62f7e57989ff1e5d8 100644 (file)
@@ -29,6 +29,8 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
 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.StatementDefinition;
+import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.RefineEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
@@ -99,8 +101,9 @@ public final class UsesStatementSupport
         final ModelActionBuilder usesAction = usesNode.newInferenceAction(ModelProcessingPhase.EFFECTIVE_MODEL);
         final QName groupingName = usesNode.argument();
 
-        final Prerequisite<StmtContext<?, ?, ?>> sourceGroupingPre = usesAction.requiresCtx(usesNode,
-            ParserNamespaces.GROUPING, groupingName, ModelProcessingPhase.EFFECTIVE_MODEL);
+        final Prerequisite<StmtContext<?, GroupingStatement, GroupingEffectiveStatement>> sourceGroupingPre =
+            usesAction.requiresCtx(usesNode, ParserNamespaces.GROUPING, groupingName,
+                ModelProcessingPhase.EFFECTIVE_MODEL);
         final Prerequisite<? extends Mutable<?, ?, ?>> targetNodePre = usesAction.mutatesEffectiveCtx(
             usesNode.getParentContext());
 
index 5df13187ddceb91237b6c1dbd5536e6ecb5e7bac..6de878081fbf8e04cef42f5806983a8cde61735f 100644 (file)
@@ -27,7 +27,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
 /**
  * Baseline {@link ParserNamespace}s mostly derived from YANG specification.
@@ -38,16 +38,16 @@ public final class ParserNamespaces {
      * identifier namespace, where each extension is identified by a QName formed from the defining module's QNameModule
      * and the identifier specified in extension statement's argument.
      */
-    public static final @NonNull StatementNamespace<QName, ExtensionStatement, ExtensionEffectiveStatement> EXTENSION =
-        new StatementNamespace<>("extension");
+    public static final @NonNull ParserNamespace<QName, StmtContext<?, ExtensionStatement, ExtensionEffectiveStatement>>
+        EXTENSION = new ParserNamespace<>("extension");
 
     /**
      * Feature namespace. All feature names defined in a module and its submodules share the same feature identifier
      * namespace. Each feature is identified by a QName formed from the defining module's QNameModule and the feature
      * name.
      */
-    public static final @NonNull StatementNamespace<QName, FeatureStatement, FeatureEffectiveStatement> FEATURE =
-        new StatementNamespace<>("feature");
+    public static final @NonNull ParserNamespace<QName,
+        StmtContext<?, FeatureStatement, FeatureEffectiveStatement>> FEATURE = new ParserNamespace<>("feature");
 
     /**
      * Grouping namespace. * All grouping names defined within a parent node or at the top level of the module
@@ -57,28 +57,28 @@ public final class ParserNamespaces {
      * <p>
      * This means that any descendant node may use that grouping, and it MUST NOT define a grouping with the same name.
      */
-    public static final @NonNull StatementNamespace<QName, GroupingStatement, GroupingEffectiveStatement> GROUPING =
-        new StatementNamespace<>("grouping");
+    public static final @NonNull ParserNamespace<QName,
+        StmtContext<?, GroupingStatement, GroupingEffectiveStatement>> GROUPING = new ParserNamespace<>("grouping");
 
     /**
      * Identity namespace. All identity names defined in a module and its submodules share the same identity identifier
      * namespace.
      */
-    public static final @NonNull StatementNamespace<QName, IdentityStatement, IdentityEffectiveStatement> IDENTITY =
-        new StatementNamespace<>("identity");
+    public static final @NonNull ParserNamespace<QName,
+        StmtContext<?, IdentityStatement, IdentityEffectiveStatement>> IDENTITY = new ParserNamespace<>("identity");
 
     /**
      * Module namespace. All modules known to the reactor are populated to this namespace. Each module is identified
      * by a {@link SourceIdentifier}.
      */
-    public static final @NonNull StatementNamespace<SourceIdentifier, ModuleStatement, ModuleEffectiveStatement> MODULE
-        = new StatementNamespace<>("module");
+    public static final @NonNull ParserNamespace<SourceIdentifier,
+        StmtContext<?, ModuleStatement, ModuleEffectiveStatement>> MODULE = new ParserNamespace<>("module");
 
     /**
      * Submodule equivalent of {@link #MODULE}.
      */
-    public static final @NonNull StatementNamespace<SourceIdentifier, SubmoduleStatement, SubmoduleEffectiveStatement>
-        SUBMODULE = new StatementNamespace<>("submodule");
+    public static final @NonNull ParserNamespace<SourceIdentifier,
+        StmtContext<?, SubmoduleStatement, SubmoduleEffectiveStatement>> SUBMODULE = new ParserNamespace<>("submodule");
 
     /**
      * Derived types namespace. All derived type names defined within a parent node or at the top level of the module
@@ -92,21 +92,21 @@ public final class ParserNamespaces {
      * This namespace includes all type definitions implied by the language in which the current statement resides
      * (e.g. RFC6020/RFC7950 for YANG 1.0/1.1).
      */
-    public static final @NonNull StatementNamespace<QName, TypedefStatement, TypedefEffectiveStatement> TYPE =
-        new StatementNamespace<>("typedef");
+    public static final @NonNull ParserNamespace<QName,
+        StmtContext<?, TypedefStatement, TypedefEffectiveStatement>> TYPE = new ParserNamespace<>("typedef");
 
     /**
      * A derived namespace allowing lookup of modules based on their {@link QNameModule}.
      */
-    public static final @NonNull StatementNamespace<QNameModule, ModuleStatement, ModuleEffectiveStatement>
-        NAMESPACE_TO_MODULE = new StatementNamespace<>("namespace-to-module");
+    public static final @NonNull ParserNamespace<QNameModule, StmtContext<?, ModuleStatement, ModuleEffectiveStatement>>
+        NAMESPACE_TO_MODULE = new ParserNamespace<>("namespace-to-module");
 
     /**
      * Intermediate-stage namespace equivalent to {@link #MODULE} except it is keyed by module names. This namespace is
      * used to resolve inter-module references before actual linkage occurs.
      */
-    public static final @NonNull StatementNamespace<Unqualified, ModuleStatement, ModuleEffectiveStatement>
-        PRELINKAGE_MODULE = new StatementNamespace<>("prelinkage-module");
+    public static final @NonNull ParserNamespace<Unqualified, StmtContext<?, ModuleStatement, ModuleEffectiveStatement>>
+        PRELINKAGE_MODULE = new ParserNamespace<>("prelinkage-module");
 
     private ParserNamespaces() {
         // Hidden on purpose
index 325f7fe0078dc3a1e7005be242e1cf23eeec8340..8b7043c3c97a6848456713dd836dbf546a0e9fb0 100644 (file)
@@ -19,7 +19,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeAwareEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 
@@ -31,7 +31,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 //               into yang-(parser-)reactor-api.
 @Beta
 public final class SchemaTreeNamespace<D extends DeclaredStatement<QName>, E extends SchemaTreeEffectiveStatement<D>>
-        extends StatementNamespace<QName, D, E> {
+        extends ParserNamespace<QName, StmtContext<?, D, E>> {
     @Serial
     private static final long serialVersionUID = 1L;
     private static final @NonNull SchemaTreeNamespace<?, ?> INSTANCE = new SchemaTreeNamespace<>();
index a9a440e824b9aa6f7a667686875ec89a8717b4cb..6d2a5aa789697c687199c6553f93ba215e4015db 100644 (file)
@@ -156,7 +156,7 @@ public interface ModelActionBuilder {
      */
     @Deprecated
     <K, D extends DeclaredStatement<?>> @NonNull Prerequisite<D> requiresDeclared(StmtContext<?, ?, ?> context,
-        StatementNamespace<K, ? extends D, ?> namespace, K key);
+        ParserNamespace<K, StmtContext<?, ? extends D, ?>> namespace, K key);
 
     /**
      * Action requires that the specified context completes specified phase before {@link #apply(InferenceAction)}
@@ -169,11 +169,11 @@ public interface ModelActionBuilder {
     <A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>> @NonNull Prerequisite<StmtContext<A, D, E>>
         requiresCtx(StmtContext<A, D, E> context, ModelProcessingPhase phase);
 
-    <K> @NonNull Prerequisite<StmtContext<?, ?, ?>> requiresCtx(StmtContext<?, ?, ?> context,
-        @NonNull StatementNamespace<K, ?, ?> namespace, K key, ModelProcessingPhase phase);
+    <K, C extends StmtContext<?, ?, ?>> @NonNull Prerequisite<C> requiresCtx(StmtContext<?, ?, ?> context,
+        @NonNull ParserNamespace<K, C> namespace, K key, ModelProcessingPhase phase);
 
-    <K> @NonNull Prerequisite<StmtContext<?, ?, ?>> requiresCtx(StmtContext<?, ?, ?> context,
-        @NonNull StatementNamespace<K, ?, ?> namespace, NamespaceKeyCriterion<K> criterion, ModelProcessingPhase phase);
+    <K, C extends StmtContext<?, ?, ?>> @NonNull Prerequisite<C> requiresCtx(StmtContext<?, ?, ?> context,
+        @NonNull ParserNamespace<K, C> namespace, NamespaceKeyCriterion<K> criterion, ModelProcessingPhase phase);
 
     <K, E extends EffectiveStatement<?, ?>> @NonNull Prerequisite<StmtContext<?, ?, E>> requiresCtxPath(
         StmtContext<?, ?, ?> context, ParserNamespace<K, ? extends StmtContext<?, ?, ?>> namespace, Iterable<K> keys,
@@ -222,8 +222,8 @@ public interface ModelActionBuilder {
      * @deprecated Undocumented method. Use at your own risk.
      */
     @Deprecated
-    <K, D extends DeclaredStatement<?>> @NonNull Prerequisite<StmtContext<?, D, ?>> requiresDeclaredCtx(
-        StmtContext<?, ?, ?> context, StatementNamespace<K, ? extends D, ?> namespace, K key);
+    <K, C extends StmtContext<?, ?, ?>> @NonNull Prerequisite<C> requiresDeclaredCtx(StmtContext<?, ?, ?> context,
+        ParserNamespace<K, C> namespace, K key);
 
     /**
      * Create a requirement on specified statement to become effective.
@@ -241,7 +241,7 @@ public interface ModelActionBuilder {
      */
     @Deprecated
     <K, E extends EffectiveStatement<?, ?>> @NonNull Prerequisite<E> requiresEffective(StmtContext<?, ?, ?> context,
-        StatementNamespace<K, ?, ? extends E> namespace, K key);
+        ParserNamespace<K, StmtContext<?, ?, ? extends E>> namespace, K key);
 
     /**
      * Create a requirement on specified statement context to become effective.
@@ -249,8 +249,8 @@ public interface ModelActionBuilder {
      * @deprecated Undocumented method. Use at your own risk.
      */
     @Deprecated
-    <K, E extends EffectiveStatement<?, ?>> @NonNull Prerequisite<StmtContext<?, ?, E>> requiresEffectiveCtx(
-        StmtContext<?, ?, ?> context, StatementNamespace<K, ?, ? extends E> namespace, K key);
+    <K, C extends StmtContext<?, ?, ?>> @NonNull Prerequisite<C> requiresEffectiveCtx(StmtContext<?, ?, ?> context,
+        ParserNamespace<K, C> namespace, K key);
 
     /**
      * Mark the fact that this action is mutating a namespace.
index c6c07c917f40422aae82b638a78520999b72290d..aa3933419097c8d95e16745a3af7920c19e7c142 100644 (file)
@@ -14,6 +14,7 @@ import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.concepts.Identifier;
+import org.opendaylight.yangtools.yang.parser.spi.SchemaTreeNamespace;
 
 /**
  * {@link ParserNamespace} serves as common superclass for namespaces used during parser operation. Each such namespace,
@@ -25,7 +26,7 @@ import org.opendaylight.yangtools.concepts.Identifier;
  * @param <V> Value type
  */
 @NonNullByDefault
-public class ParserNamespace<K, V> implements Identifier {
+public sealed class ParserNamespace<K, V> implements Identifier permits SchemaTreeNamespace {
     @Serial
     private static final long serialVersionUID = 1L;
 
diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StatementNamespace.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StatementNamespace.java
deleted file mode 100644 (file)
index ff8e3f6..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.parser.spi.meta;
-
-import java.io.Serial;
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-
-// FIXME: is this subclass useful at all?
-public class StatementNamespace<K, D extends DeclaredStatement<?>, E extends EffectiveStatement<?, D>>
-        extends ParserNamespace<K, StmtContext<?, D, E>> {
-    @Serial
-    private static final long serialVersionUID = 1L;
-
-    public StatementNamespace(final @NonNull String name) {
-        super(name);
-    }
-}
index ac26bb1f29b618dcf412496ce1f70641e4b9f706..26a4a89635b4d1760221c86291348b45f1b551d0 100644 (file)
@@ -258,14 +258,15 @@ public interface StmtContext<A, D extends DeclaredStatement<A>, E extends Effect
          * Adds s statement to namespace map with a key.
          *
          * @param namespace
-         *            {@link StatementNamespace} child that determines namespace to be added to
+         *            {@link ParserNamespace} child that determines namespace to be added to
          * @param key
          *            of type according to namespace class specification
          * @param stmt
          *            to be added to namespace map
          */
+        // FIXME: cleanup the capture here: we really want to capture 'StmtContext<?, Y, Z>'
         <K, KT extends K, Y extends DeclaredStatement<?>, Z extends EffectiveStatement<?, Y>> void addContext(
-            @NonNull StatementNamespace<K, Y, Z> namespace, KT key, StmtContext<?, Y, Z> stmt);
+            @NonNull ParserNamespace<K, StmtContext<?, Y, Z>> namespace, KT key, StmtContext<?, Y, Z> stmt);
 
         /**
          * Set version of root statement context.
index 39b4d97b8ea2c01c370f6c26e28d581cd17c5d28..6ddc9fd9a09ae793d9f156986450702d25cae692 100644 (file)
@@ -20,7 +20,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 import org.opendaylight.yangtools.yang.parser.spi.ParserNamespaces;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
 /**
@@ -47,8 +46,8 @@ public final class SourceParserNamespaces {
      * plain name.
      */
     // FIXME: Better name?
-    public static final @NonNull StatementNamespace<Unqualified, ModuleStatement, ModuleEffectiveStatement>
-        MODULE_FOR_BELONGSTO = new StatementNamespace<>("module-belongsto");
+    public static final @NonNull ParserNamespace<Unqualified, StmtContext<?, ModuleStatement, ModuleEffectiveStatement>>
+        MODULE_FOR_BELONGSTO = new ParserNamespace<>("module-belongsto");
 
     /**
      * Pre-linkage source-specific mapping of prefixes to module namespaces.