Revert "Unify ORv1 and IIv5"
[yangtools.git] / parser / yang-parser-spi / src / main / java / org / opendaylight / yangtools / yang / parser / spi / SchemaTreeNamespaceBehaviour.java
index 54e4dbdf6770cef0ebd2e45e1795a90109ff70f9..dd286c92aed9d10adcfa679c896b0a3469398552 100644 (file)
@@ -7,9 +7,6 @@
  */
 package org.opendaylight.yangtools.yang.parser.spi;
 
-import static com.google.common.base.Verify.verifyNotNull;
-import static java.util.Objects.requireNonNull;
-
 import java.util.Map;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
@@ -17,6 +14,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeAwareEffectiveSt
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceStorage;
+import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceStorage.GlobalStorage;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceStorage.StorageType;
 import org.opendaylight.yangtools.yang.parser.spi.meta.OnDemandSchemaTreeStorage;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
@@ -40,7 +38,8 @@ final class SchemaTreeNamespaceBehaviour<D extends DeclaredStatement<QName>, E e
      * This method is analogous to {@link SchemaTreeAwareEffectiveStatement#findSchemaTreeNode(QName)}.
      */
     @Override
-    public StmtContext<QName, D, E> getFrom(final NamespaceStorage storage, final QName key) {
+    public StmtContext<QName, D, E> getFrom(final GlobalStorage global, final NamespaceStorage storage,
+            final QName key) {
         // Get the backing storage node for the requested storage
         final NamespaceStorage storageNode = globalOrStatementSpecific(storage);
         // Check try to look up existing node
@@ -51,13 +50,14 @@ final class SchemaTreeNamespaceBehaviour<D extends DeclaredStatement<QName>, E e
     }
 
     @Override
-    public Map<QName, StmtContext<QName, D, E>> getAllFrom(final NamespaceStorage storage) {
+    public Map<QName, StmtContext<QName, D, E>> getAllFrom(final GlobalStorage global, final NamespaceStorage storage) {
         // FIXME: 7.0.0: this method needs to be well-defined
         return null;
     }
 
     @Override
-    public void addTo(final NamespaceStorage storage, final QName key, final StmtContext<QName, D, E> value) {
+    public void addTo(final GlobalStorage global, final NamespaceStorage storage, final QName key,
+            final StmtContext<QName, D, E> value) {
         final var prev = globalOrStatementSpecific(storage).putToLocalStorageIfAbsent(namespace(), key, value);
         if (prev != null) {
             throw new SourceException(value,
@@ -72,14 +72,18 @@ final class SchemaTreeNamespaceBehaviour<D extends DeclaredStatement<QName>, E e
     }
 
     private static NamespaceStorage globalOrStatementSpecific(final NamespaceStorage storage) {
-        NamespaceStorage current = requireNonNull(storage);
-        while (!isLocalOrGlobal(current.getStorageType())) {
-            current = verifyNotNull(current.getParentStorage());
-        }
-        return current;
-    }
+        var current = storage;
+        while (true) {
+            if (current.getStorageType() == StorageType.STATEMENT_LOCAL) {
+                return current;
+            }
 
-    private static boolean isLocalOrGlobal(final StorageType type) {
-        return type == StorageType.STATEMENT_LOCAL || type == StorageType.GLOBAL;
+            final var parent = current.getParentStorage();
+            if (parent == null) {
+                // Implies StorageType.GLOBAL
+                return current;
+            }
+            current = parent;
+        }
     }
 }
\ No newline at end of file