Move NamespaceBehaviour.Registry 67/105267/3
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 5 Apr 2023 20:04:21 +0000 (22:04 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 6 Apr 2023 06:35:12 +0000 (08:35 +0200)
This concept is not referenced in yang-parser-spi and evolving it has
potential to reap major benefits. Rehost it as
NamespaceBehaviourRegistry pending it removal.

JIRA: YANGTOOLS-1499
Change-Id: Ib9f8aba1fc9dc757f2435c131a6abac8a8c91d48
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/NamespaceBehaviourRegistry.java [new file with mode: 0644]
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/ReactorStmtCtx.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceBehaviour.java

index b55e6b1dc42961013b020e840e9902a70609f91d..7d43e5cfc2e8ca3db2e17e7f33b6dd32e437bd0f 100644 (file)
@@ -8,10 +8,10 @@
 package org.opendaylight.yangtools.yang.parser.stmt.reactor;
 
 import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.base.Verify.verify;
 import static com.google.common.base.Verify.verifyNotNull;
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.base.Verify;
 import com.google.common.collect.HashBasedTable;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
@@ -47,7 +47,6 @@ 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.NamespaceStorageNode;
-import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.StorageNodeType;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceNotAvailableException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
@@ -62,7 +61,7 @@ import org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-final class BuildGlobalContext extends NamespaceStorageSupport implements Registry {
+final class BuildGlobalContext extends NamespaceStorageSupport implements NamespaceBehaviourRegistry {
     private static final Logger LOG = LoggerFactory.getLogger(BuildGlobalContext.class);
 
     private static final ModelProcessingPhase[] PHASE_EXECUTION_ORDER = {
@@ -137,7 +136,7 @@ final class BuildGlobalContext extends NamespaceStorageSupport implements Regist
     }
 
     @Override
-    Registry getBehaviourRegistry() {
+    NamespaceBehaviourRegistry getBehaviourRegistry() {
         return this;
     }
 
@@ -155,7 +154,7 @@ final class BuildGlobalContext extends NamespaceStorageSupport implements Regist
             }
         }
 
-        Verify.verify(type.equals(potential.getIdentifier()));
+        verify(type.equals(potential.getIdentifier()));
         /*
          * Safe cast, previous checkState checks equivalence of key from which
          * type argument are derived
diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/NamespaceBehaviourRegistry.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/NamespaceBehaviourRegistry.java
new file mode 100644 (file)
index 0000000..099c0d2
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2023 PANTHEON.tech, s.r.o. 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.stmt.reactor;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
+import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceNotAvailableException;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
+
+/**
+ * An entity able to look up a {@link NamespaceBehaviour} corresponding to a {@link ParserNamespace}.
+ */
+sealed interface NamespaceBehaviourRegistry permits BuildGlobalContext, SourceSpecificContext {
+    /**
+     * Get a namespace behavior.
+     *
+     * @param <K> key type
+     * @param <V> value type
+     * @param namespace Namespace type
+     * @return Namespace behaviour
+     * @throws NamespaceNotAvailableException when the namespace is not available
+     * @throws NullPointerException if {@code namespace} is {@code null}
+     */
+    <K, V> @NonNull NamespaceBehaviour<K, V> getNamespaceBehaviour(ParserNamespace<K, V> namespace);
+}
index acc2b05cbad842c227abe0c9b3176aa0cfabd3b2..58ee7dade50c37672b41c1533e03d73f4da684f4 100644 (file)
@@ -15,7 +15,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 import org.eclipse.jdt.annotation.NonNull;
 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.ParserNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.slf4j.Logger;
@@ -42,7 +41,7 @@ abstract class NamespaceStorageSupport implements NamespaceStorageNode {
      *
      * @return registry of source context
      */
-    abstract @NonNull Registry getBehaviourRegistry();
+    abstract @NonNull NamespaceBehaviourRegistry getBehaviourRegistry();
 
     // FIXME: 8.0.0: do we really need this method?
     final void checkLocalNamespaceAllowed(final ParserNamespace<?, ?> type) {
index c57cb2466e3a5a6050e8f4e31b6617dad4bef4b7..fdf91cf7d631eb066f00d7c57e882076d6018cd8 100644 (file)
@@ -42,7 +42,6 @@ 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.ModelProcessingPhase.ExecutionOrder;
-import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry;
 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;
@@ -189,7 +188,7 @@ abstract class ReactorStmtCtx<A, D extends DeclaredStatement<A>, E extends Effec
     public abstract Collection<? extends @NonNull StatementContextBase<?, ?, ?>> mutableDeclaredSubstatements();
 
     @Override
-    final Registry getBehaviourRegistry() {
+    final NamespaceBehaviourRegistry getBehaviourRegistry() {
         return getRoot().getBehaviourRegistryImpl();
     }
 
index 6a9be59ba3d8ea5ca703f56cf9228764076aed30..5014eda95225c067dda7e3ecde1320c7daf60fb3 100644 (file)
@@ -31,7 +31,6 @@ import org.opendaylight.yangtools.yang.parser.spi.ParserNamespaces;
 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;
-import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry;
 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.RootStmtContext;
@@ -70,7 +69,7 @@ final class RootStatementContext<A, D extends DeclaredStatement<A>, E extends Ef
             final StatementSourceReference ref, final String rawArgument) {
         super(def, ref, rawArgument);
         this.sourceContext = requireNonNull(sourceContext);
-        this.argument = def.parseArgumentValue(this, rawArgument());
+        argument = def.parseArgumentValue(this, rawArgument());
     }
 
     RootStatementContext(final SourceSpecificContext sourceContext, final StatementDefinitionContext<A, D, E> def,
@@ -217,10 +216,10 @@ final class RootStatementContext<A, D extends DeclaredStatement<A>, E extends Ef
     }
 
     void setRootIdentifierImpl(final SourceIdentifier identifier) {
-        this.rootIdentifier = requireNonNull(identifier);
+        rootIdentifier = requireNonNull(identifier);
     }
 
-    @NonNull Registry getBehaviourRegistryImpl() {
+    @NonNull NamespaceBehaviourRegistry getBehaviourRegistryImpl() {
         return sourceContext;
     }
 
@@ -231,9 +230,9 @@ final class RootStatementContext<A, D extends DeclaredStatement<A>, E extends Ef
     void setRootVersionImpl(final YangVersion version) {
         checkArgument(sourceContext.globalContext().getSupportedVersions().contains(version),
                 "Unsupported yang version %s in %s", version, sourceReference());
-        checkState(this.rootVersion == null, "Version of root %s has been already set to %s", argument,
-                this.rootVersion);
-        this.rootVersion = requireNonNull(version);
+        checkState(rootVersion == null, "Version of root %s has been already set to %s", argument,
+                rootVersion);
+        rootVersion = requireNonNull(version);
     }
 
     /**
index e7c9c8d71c826e1c64981b1ba8eb6d434f193753..23d82eb2e25dc8f6c516bfa6d3a0341251148252 100644 (file)
@@ -53,7 +53,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-final class SourceSpecificContext implements NamespaceStorageNode, NamespaceBehaviour.Registry, Mutable {
+final class SourceSpecificContext implements NamespaceStorageNode, NamespaceBehaviourRegistry, Mutable {
     enum PhaseCompletionProgress {
         NO_PROGRESS,
         PROGRESS,
@@ -93,7 +93,7 @@ final class SourceSpecificContext implements NamespaceStorageNode, NamespaceBeha
     // TODO: consider keying by Byte equivalent of ExecutionOrder
     private final Multimap<ModelProcessingPhase, ModifierImpl> modifiers = HashMultimap.create();
     private final QNameToStatementDefinitionMap qnameToStmtDefMap = new QNameToStatementDefinitionMap();
-    private final SupportedStatements statementSupports = new SupportedStatements(qnameToStmtDefMap);
+    private final @NonNull SupportedStatements statementSupports = new SupportedStatements(qnameToStmtDefMap);
     private final HashMapPrefixResolver prefixToModuleMap = new HashMapPrefixResolver();
     private final @NonNull BuildGlobalContext globalContext;
 
@@ -301,10 +301,11 @@ final class SourceSpecificContext implements NamespaceStorageNode, NamespaceBeha
     }
 
     @Override
-    @SuppressWarnings("unchecked")
     public <K, V> NamespaceBehaviour<K, V> getNamespaceBehaviour(final ParserNamespace<K, V> type) {
         if (StatementSupport.NAMESPACE.equals(type)) {
-            return (NamespaceBehaviour<K, V>) statementSupports;
+            @SuppressWarnings("unchecked")
+            final var ret = (NamespaceBehaviour<K, V>) statementSupports;
+            return ret;
         }
         return globalContext.getNamespaceBehaviour(type);
     }
index c5773afa8dcb269c481bfe00bef76568a0503671..986cdfa67478bc81f268f6a40369f1fb3070057f 100644 (file)
@@ -58,19 +58,6 @@ public abstract class NamespaceBehaviour<K, V> extends AbstractSimpleIdentifiabl
         ROOT_STATEMENT_LOCAL
     }
 
-    public interface Registry {
-        /**
-         * Get a namespace behavior.
-         *
-         * @param type Namespace type
-         * @param <K> key type
-         * @param <V> value type
-         * @return Namespace behaviour
-         * @throws NamespaceNotAvailableException when the namespace is not available
-         */
-        <K, V> NamespaceBehaviour<K, V> getNamespaceBehaviour(ParserNamespace<K, V> type);
-    }
-
     public interface NamespaceStorageNode {
         /**
          * Return local namespace behaviour type.