Make ParserNamespace final 71/102171/2
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 19 Aug 2022 20:44:32 +0000 (22:44 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 19 Aug 2022 22:57:10 +0000 (00:57 +0200)
SchemaTreeNamespace does not bring much to the picture, remove it
and make ParserNamespace a final class.

JIRA: YANGTOOLS-1453
Change-Id: I7dbffb9f3ab109a418fcafb59a464aab156c710b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
13 files changed:
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/InferredStatementContext.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/UniqueStatementSupport.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/NamespaceBehaviours.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 [deleted file]
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/SchemaTreeNamespaceBehaviour.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractSchemaTreeStatementSupport.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceBehaviour.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/ParserNamespace.java

index e8bd61185ade2b26429124c3f5ffa805b5711510..38f42ad8296421953bcbb8a509826e0e9332f9d8 100644 (file)
@@ -34,7 +34,7 @@ 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.SchemaTreeEffectiveStatement;
-import org.opendaylight.yangtools.yang.parser.spi.SchemaTreeNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.ParserNamespaces;
 import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState;
 import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
@@ -443,7 +443,7 @@ final class InferredStatementContext<A, D extends DeclaredStatement<A>, E extend
         if (prototype instanceof InferredStatementContext) {
             // Note: we need to access namespace here, as the target statement may have already been populated, in which
             //       case we want to obtain the statement in local namespace storage.
-            template = ((InferredStatementContext<?, ?, ?>) prototype).getFromNamespace(SchemaTreeNamespace.instance(),
+            template = ((InferredStatementContext<?, ?, ?>) prototype).getFromNamespace(ParserNamespaces.schemaTree(),
                 templateQName);
         } else {
             template = prototype.allSubstatementsStream()
index 9d9f4ef1a8c2ba4e5588bbae231e0766714e1d7d..4e084c861637c0bc418df180722983afac41e36c 100644 (file)
@@ -28,7 +28,6 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 import org.opendaylight.yangtools.yang.parser.spi.ParserNamespaces;
-import org.opendaylight.yangtools.yang.parser.spi.SchemaTreeNamespace;
 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.NamespaceStorageNode;
@@ -52,7 +51,7 @@ public final class RootStatementContext<A, D extends DeclaredStatement<A>, E ext
     // These namespaces are well-known and not needed after the root is cleaned up
     private static final Map<ParserNamespace<?, ?>, SweptNamespace> SWEPT_NAMESPACES = ImmutableMap.of(
         ParserNamespaces.GROUPING, new SweptNamespace(ParserNamespaces.GROUPING),
-        SchemaTreeNamespace.instance(), new SweptNamespace(SchemaTreeNamespace.instance()),
+        ParserNamespaces.schemaTree(), new SweptNamespace(ParserNamespaces.schemaTree()),
         ParserNamespaces.TYPE, new SweptNamespace(ParserNamespaces.TYPE));
 
     private final @NonNull SourceSpecificContext sourceContext;
index 845928ffaae54db02036e338330783e9bde24a30..6b30b0cf40b1f59cf0319758c8a04dd59a2cbb3a 100644 (file)
@@ -100,7 +100,6 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type.TypeStatementRFC
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.uses.SourceGroupingNamespace;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.uses.UsesStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.NamespaceBehaviours;
-import org.opendaylight.yangtools.yang.parser.spi.SchemaTreeNamespaceBehaviour;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementDefinitions;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupportBundle;
@@ -184,7 +183,7 @@ public final class RFC7950Reactors {
             .addSupport(new YinElementStatementSupport(config))
             .addSupport(new ArgumentStatementSupport(config))
             .addSupport(new ExtensionStatementSupport(config))
-            .addSupport(SchemaTreeNamespaceBehaviour.INSTANCE)
+            .addSupport(NamespaceBehaviours.SCHEMA_TREE)
             .addSupport(NamespaceBehaviours.EXTENSION)
             .addSupport(new TypedefStatementSupport(config))
             .addSupport(NamespaceBehaviours.TYPE)
index 175eb3cd8f6ee83ec4431fc4af1b43528038e1eb..e1c4faeeef311e4821efced27eb4969d98e6250f 100644 (file)
@@ -32,7 +32,7 @@ import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.E
 import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils;
-import org.opendaylight.yangtools.yang.parser.spi.SchemaTreeNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.ParserNamespaces;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.BoundStmtCtx;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
@@ -100,7 +100,7 @@ abstract class AbstractAugmentStatementSupport
         final ModelActionBuilder augmentAction = augmentNode.newInferenceAction(ModelProcessingPhase.EFFECTIVE_MODEL);
         augmentAction.requiresCtx(augmentNode, ModelProcessingPhase.EFFECTIVE_MODEL);
         final Prerequisite<Mutable<?, ?, EffectiveStatement<?, ?>>> target = augmentAction.mutatesEffectiveCtxPath(
-            getSearchRoot(augmentNode), SchemaTreeNamespace.instance(), augmentNode.getArgument().getNodeIdentifiers());
+            getSearchRoot(augmentNode), ParserNamespaces.schemaTree(), augmentNode.getArgument().getNodeIdentifiers());
 
         augmentAction.apply(new AugmentInferenceAction(this, augmentNode, target));
     }
index d5af79e57b998cabdba73b54d5eac1d8ce5bb581..d76f414f8817b73f180e139655d57529a4ff5c33 100644 (file)
@@ -33,7 +33,6 @@ import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangValidationBundles;
 import org.opendaylight.yangtools.yang.parser.spi.ParserNamespaces;
-import org.opendaylight.yangtools.yang.parser.spi.SchemaTreeNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.BoundStmtCtx;
 import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
@@ -130,8 +129,8 @@ abstract class AbstractDeviateStatementSupport
                 deviateAction.requiresCtx(deviateStmtCtx, ModelProcessingPhase.EFFECTIVE_MODEL);
 
         final Prerequisite<Mutable<?, ?, EffectiveStatement<?, ?>>> targetCtxPrerequisite =
-                deviateAction.mutatesEffectiveCtxPath(deviateStmtCtx.getRoot(),
-                    SchemaTreeNamespace.instance(), deviationTarget.getNodeIdentifiers());
+                deviateAction.mutatesEffectiveCtxPath(deviateStmtCtx.getRoot(), ParserNamespaces.schemaTree(),
+                    deviationTarget.getNodeIdentifiers());
 
         deviateAction.apply(new InferenceAction() {
             @Override
index 47cc630f35b5cf33173c79440104167af075cd4f..18e03ee207454811d3de89360a491a4273a1535e 100644 (file)
@@ -37,7 +37,7 @@ import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
 import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils;
-import org.opendaylight.yangtools.yang.parser.spi.SchemaTreeNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.ParserNamespaces;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.BoundStmtCtx;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
@@ -46,6 +46,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Infere
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
+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.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
@@ -154,7 +155,7 @@ public final class UniqueStatementSupport
                     Maps.uniqueIndex(unique.getArgument(),
                         desc -> action.requiresCtxPath(list,
                             // FIXME: why do we need this cast?
-                            (SchemaTreeNamespace) SchemaTreeNamespace.instance(), desc.getNodeIdentifiers(),
+                            (ParserNamespace) ParserNamespaces.schemaTree(), desc.getNodeIdentifiers(),
                             ModelProcessingPhase.EFFECTIVE_MODEL))));
             }
         }
index 67a9754252ebacf61d37cc6ffcbb4eddefb6d6ca..f09eedfe28e105d763efb6b655e77cb95153a9a3 100644 (file)
@@ -32,6 +32,8 @@ public final class NamespaceBehaviours {
 
     public static final @NonNull NamespaceBehaviour<?, ?> TYPE = NamespaceBehaviour.treeScoped(ParserNamespaces.TYPE);
 
+    public static final @NonNull NamespaceBehaviour<?, ?> SCHEMA_TREE = new SchemaTreeNamespaceBehaviour<>();
+
     public static final @NonNull NamespaceBehaviour<?, ?> NAMESPACE_TO_MODULE =
         NamespaceBehaviour.global(ParserNamespaces.NAMESPACE_TO_MODULE);
 
index 90d062cedbb3298fa695f734e9ac85f6478431ad..ca0a049390f8e4de99231c3e53224eb69e70e781 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.yangtools.yang.parser.spi;
 
 import com.google.common.collect.SetMultimap;
 import java.util.Collection;
-import java.util.Iterator;
 import java.util.Optional;
 import java.util.Set;
 import org.eclipse.jdt.annotation.NonNull;
@@ -18,6 +17,7 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.common.XMLNamespace;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.FeatureEffectiveStatement;
@@ -29,6 +29,8 @@ 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.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.SubmoduleEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
@@ -230,6 +232,27 @@ public final class ParserNamespaces {
     public static final @NonNull ParserNamespace<StmtContext<?, ?, ?>, SourceIdentifier> MODULECTX_TO_SOURCE =
         new ParserNamespace<>("modulectx-to-source");
 
+    private static final @NonNull ParserNamespace<?, ?> SCHEMA_TREE = new ParserNamespace<>("schemaTree");
+
+    /**
+     * Statement local namespace, which holds direct schema node descendants. This corresponds to the contents of the
+     * schema tree as exposed through {@link SchemaTreeAwareEffectiveStatement}.
+     *
+     * <p>
+     * Unlike all other namespaces this namespaces is polymorphic, hence it is exposed throught this method.
+     *
+     * @return Schema tree namespace
+     */
+    @SuppressWarnings("unchecked")
+    public static <D extends DeclaredStatement<QName>, E extends SchemaTreeEffectiveStatement<D>>
+            @NonNull ParserNamespace<QName, StmtContext<QName, D, E>> schemaTree() {
+        return (ParserNamespace<QName, StmtContext<QName, D, E>>) SCHEMA_TREE;
+    }
+
+    private ParserNamespaces() {
+        // Hidden on purpose
+    }
+
     /**
      * Find statement context identified by interpreting specified {@link SchemaNodeIdentifier} starting at specified
      * {@link StmtContext}.
@@ -241,19 +264,19 @@ public final class ParserNamespaces {
      */
     public static Optional<StmtContext<?, ?, ?>> findSchemaTreeStatement(final StmtContext<?, ?, ?> root,
             final SchemaNodeIdentifier identifier) {
-        final Iterator<QName> iterator = identifier.getNodeIdentifiers().iterator();
+        final var iterator = identifier.getNodeIdentifiers().iterator();
         if (!iterator.hasNext()) {
             return Optional.of(root);
         }
 
         QName nextPath = iterator.next();
-        StmtContext<?, ?, ?> current = root.getFromNamespace(SchemaTreeNamespace.instance(), nextPath);
+        var current = root.getFromNamespace(schemaTree(), nextPath);
         if (current == null) {
             return Optional.ofNullable(tryToFindUnknownStatement(nextPath.getLocalName(), root));
         }
         while (current != null && iterator.hasNext()) {
             nextPath = iterator.next();
-            final StmtContext<?, ?, ?> nextNodeCtx = current.getFromNamespace(SchemaTreeNamespace.instance(), nextPath);
+            final var nextNodeCtx = current.getFromNamespace(schemaTree(), nextPath);
             if (nextNodeCtx == null) {
                 return Optional.ofNullable(tryToFindUnknownStatement(nextPath.getLocalName(), current));
             }
@@ -267,15 +290,11 @@ public final class ParserNamespaces {
             final StmtContext<?, ?, ?> current) {
         final Collection<? extends StmtContext<?, ?, ?>> unknownSubstatements = StmtContextUtils.findAllSubstatements(
             current, UnknownStatement.class);
-        for (final StmtContext<?, ?, ?> unknownSubstatement : unknownSubstatements) {
+        for (final var unknownSubstatement : unknownSubstatements) {
             if (localName.equals(unknownSubstatement.rawArgument())) {
                 return unknownSubstatement;
             }
         }
         return null;
     }
-
-    private ParserNamespaces() {
-        // Hidden on purpose
-    }
 }
diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/SchemaTreeNamespace.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/SchemaTreeNamespace.java
deleted file mode 100644 (file)
index deb5cd2..0000000
+++ /dev/null
@@ -1,42 +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;
-
-import com.google.common.annotations.Beta;
-import java.io.Serial;
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeAwareEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-
-/**
- * Statement local namespace, which holds direct schema node descendants. This corresponds to the contents of the schema
- * tree as exposed through {@link SchemaTreeAwareEffectiveStatement}.
- */
-// FIXME: 7.0.0: this contract seems to fall on the reactor side of things rather than parser-spi. Consider moving this
-//               into yang-(parser-)reactor-api.
-@Beta
-public final class SchemaTreeNamespace<D extends DeclaredStatement<QName>, E extends SchemaTreeEffectiveStatement<D>>
-        extends ParserNamespace<QName, StmtContext<?, D, E>> {
-    @Serial
-    private static final long serialVersionUID = 1L;
-    private static final @NonNull SchemaTreeNamespace<?, ?> INSTANCE = new SchemaTreeNamespace<>();
-
-    private SchemaTreeNamespace() {
-        super("schemaTree");
-    }
-
-    @SuppressWarnings("unchecked")
-    public static <D extends DeclaredStatement<QName>, E extends SchemaTreeEffectiveStatement<D>>
-            @NonNull SchemaTreeNamespace<D, E> instance() {
-        return (SchemaTreeNamespace<D, E>) INSTANCE;
-    }
-}
index d769fefdfab237a4ce261b69735f2fb3c15eea6d..79cfd420c0f437e120e0bdc7419486dcc13aa47c 100644 (file)
@@ -11,7 +11,6 @@ import static com.google.common.base.Verify.verifyNotNull;
 import static java.util.Objects.requireNonNull;
 
 import java.util.Map;
-import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeAwareEffectiveStatement;
@@ -21,14 +20,14 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 
 /**
- * {@link NamespaceBehaviour} handling {@link SchemaTreeNamespace}.
+ * {@link NamespaceBehaviour} handling {@link ParserNamespaces#schemaTree()}.
  */
-public final class SchemaTreeNamespaceBehaviour<D extends DeclaredStatement<QName>,
-            E extends SchemaTreeEffectiveStatement<D>> extends NamespaceBehaviour<QName, StmtContext<?, D, E>> {
-    public static final @NonNull SchemaTreeNamespaceBehaviour<?, ?> INSTANCE = new SchemaTreeNamespaceBehaviour<>();
-
-    private SchemaTreeNamespaceBehaviour() {
-        super(SchemaTreeNamespace.instance());
+// FIXME: 11.0.0: this contract seems to fall on the reactor side of things rather than parser-spi. Consider moving this
+//                into yang-(parser-)reactor-api.
+final class SchemaTreeNamespaceBehaviour<D extends DeclaredStatement<QName>, E extends SchemaTreeEffectiveStatement<D>>
+        extends NamespaceBehaviour<QName, StmtContext<QName, D, E>> {
+    SchemaTreeNamespaceBehaviour() {
+        super(ParserNamespaces.schemaTree());
     }
 
     /**
@@ -38,26 +37,26 @@ public final class SchemaTreeNamespaceBehaviour<D extends DeclaredStatement<QNam
      * This method is analogous to {@link SchemaTreeAwareEffectiveStatement#findSchemaTreeNode(QName)}.
      */
     @Override
-    public StmtContext<?, D, E> getFrom(final NamespaceStorageNode storage, final QName key) {
+    public StmtContext<QName, D, E> getFrom(final NamespaceStorageNode storage, final QName key) {
         // Get the backing storage node for the requested storage
         final NamespaceStorageNode storageNode = globalOrStatementSpecific(storage);
         // Check try to look up existing node
-        final StmtContext<?, D, E> existing = storageNode.getFromLocalStorage(getIdentifier(), key);
+        final StmtContext<QName, D, E> existing = storageNode.getFromLocalStorage(getIdentifier(), key);
 
         // An existing node takes precedence, if it does not exist try to request it
         return existing != null ? existing : requestFrom(storageNode, key);
     }
 
     @Override
-    public Map<QName, StmtContext<?, D, E>> getAllFrom(final NamespaceStorageNode storage) {
+    public Map<QName, StmtContext<QName, D, E>> getAllFrom(final NamespaceStorageNode storage) {
         // FIXME: 7.0.0: this method needs to be well-defined
         return null;
     }
 
     @Override
-    public void addTo(final NamespaceStorageNode storage, final QName key, final StmtContext<?, D, E> value) {
-        final StmtContext<?, D, E> prev = globalOrStatementSpecific(storage).putToLocalStorageIfAbsent(
-            SchemaTreeNamespace.instance(), key, value);
+    public void addTo(final NamespaceStorageNode storage, final QName key, final StmtContext<QName, D, E> value) {
+        final StmtContext<?, D, E> prev = globalOrStatementSpecific(storage).putToLocalStorageIfAbsent(getIdentifier(),
+            key, value);
 
         if (prev != null) {
             throw new SourceException(value,
@@ -67,7 +66,7 @@ public final class SchemaTreeNamespaceBehaviour<D extends DeclaredStatement<QNam
     }
 
     private static <D extends DeclaredStatement<QName>, E extends SchemaTreeEffectiveStatement<D>>
-            StmtContext<?, D, E> requestFrom(final NamespaceStorageNode storageNode, final QName key) {
+            StmtContext<QName, D, E> requestFrom(final NamespaceStorageNode storageNode, final QName key) {
         return storageNode instanceof OnDemandSchemaTreeStorageNode ondemand ? ondemand.requestSchemaTreeChild(key)
             : null;
     }
index 386026162f883be713a8b7a7a4fef7cd83f49c4c..ddc05d41e543b5dc01070e364f636d56e5ae1fd1 100644 (file)
@@ -15,9 +15,10 @@ import org.opendaylight.yangtools.yang.model.api.CopyableNode;
 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.SchemaTreeAwareEffectiveStatement.SchemaTreeNamespace;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
-import org.opendaylight.yangtools.yang.parser.spi.SchemaTreeNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.ParserNamespaces;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 
@@ -112,7 +113,7 @@ public abstract class AbstractSchemaTreeStatementSupport<D extends DeclaredState
      */
     @Override
     public void onStatementAdded(final Mutable<QName, D, E> stmt) {
-        stmt.coerceParentContext().addToNs(SchemaTreeNamespace.instance(), stmt.getArgument(), stmt);
+        stmt.coerceParentContext().addToNs(ParserNamespaces.schemaTree(), stmt.getArgument(), stmt);
     }
 
     // Non-final because {@code input} and {@code output} are doing their own thing.
index f8f4fbbdb7eecfe5a40b0b5c65cac9c9041d6f96..c5773afa8dcb269c481bfe00bef76568a0503671 100644 (file)
@@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeAwareEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement;
-import org.opendaylight.yangtools.yang.parser.spi.SchemaTreeNamespaceBehaviour;
+import org.opendaylight.yangtools.yang.parser.spi.NamespaceBehaviours;
 
 /**
  * Definition / implementation of specific Identifier Namespace behaviour. A namespace behaviour is built on top
@@ -128,7 +128,7 @@ public abstract class NamespaceBehaviour<K, V> extends AbstractSimpleIdentifiabl
          * <p>
          * The results produced by this method are expected to be consistent with
          * {@link SchemaTreeAwareEffectiveStatement#findSchemaTreeNode(QName)} and
-         * {@link SchemaTreeNamespaceBehaviour#getFrom(NamespaceStorageNode, QName)}.
+         * {@link NamespaceBehaviours#SCHEMA_TREE}'s {@code getFrom(NamespaceStorageNode, QName)}.
          *
          * @param qname node identifier of the child being requested
          * @return Requested child, if it is present.
index aa3933419097c8d95e16745a3af7920c19e7c142..f735eac9823ca6a5e041309a2fb81015baa3efa8 100644 (file)
@@ -12,9 +12,7 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.base.MoreObjects;
 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,
@@ -26,7 +24,7 @@ import org.opendaylight.yangtools.yang.parser.spi.SchemaTreeNamespace;
  * @param <V> Value type
  */
 @NonNullByDefault
-public sealed class ParserNamespace<K, V> implements Identifier permits SchemaTreeNamespace {
+public final class ParserNamespace<K, V> implements Identifier {
     @Serial
     private static final long serialVersionUID = 1L;
 
@@ -38,17 +36,7 @@ public sealed class ParserNamespace<K, V> implements Identifier permits SchemaTr
     }
 
     @Override
-    public final int hashCode() {
-        return super.hashCode();
-    }
-
-    @Override
-    public final boolean equals(final @Nullable Object obj) {
-        return super.equals(obj);
-    }
-
-    @Override
-    public final String toString() {
+    public String toString() {
         return MoreObjects.toStringHelper(this).add("name", name).toString();
     }
 }