Require full declaration during path traversal
[yangtools.git] / parser / yang-parser-reactor / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / reactor / AbstractNamespaceStorage.java
index 595831a7b193eef44cb49dc4b5305fb60bd27b02..85a9199c4bd10942aa4d82d75f0360c23b03cbdd 100644 (file)
@@ -12,9 +12,7 @@ import static com.google.common.base.Verify.verifyNotNull;
 import com.google.common.collect.ImmutableMap;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Map.Entry;
 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.NamespaceStorage;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
@@ -28,18 +26,7 @@ abstract class AbstractNamespaceStorage implements NamespaceStorage {
     private Map<ParserNamespace<?, ?>, Map<?, ?>> namespaces = ImmutableMap.of();
 
     /**
-     * {@inheritDoc}
-     *
-     * <p>
-     * This method override provides bimorphic invocation on this method invocation between
-     * {@link SourceSpecificContext} and the more general {@link AbstractNamespaceStorage}. We typically do not expect
-     * the two accesses to overlap.
-     */
-    @Override
-    public abstract NamespaceStorage getParentStorage();
-
-    /**
-     * Get a namespace behavior.
+     * Get access to a {@link ParserNamespace}.
      *
      * @param <K> key type
      * @param <V> value type
@@ -48,7 +35,7 @@ abstract class AbstractNamespaceStorage implements NamespaceStorage {
      * @throws NamespaceNotAvailableException when the namespace is not available
      * @throws NullPointerException if {@code namespace} is {@code null}
      */
-    abstract <K, V> @NonNull NamespaceBehaviour<K, V> getNamespaceBehaviour(ParserNamespace<K, V> namespace);
+    abstract <K, V> @NonNull NamespaceAccess<K, V> accessNamespace(ParserNamespace<K, V> namespace);
 
     // FIXME: 8.0.0: do we really need this method?
     final void checkLocalNamespaceAllowed(final ParserNamespace<?, ?> type) {
@@ -66,7 +53,7 @@ abstract class AbstractNamespaceStorage implements NamespaceStorage {
     }
 
     final <K, V> Map<K, V> getNamespace(final ParserNamespace<K, V> type) {
-        return getNamespaceBehaviour(type).getAllFrom(this);
+        return accessNamespace(type).allFrom(this);
     }
 
     @SuppressWarnings("unchecked")
@@ -75,9 +62,8 @@ abstract class AbstractNamespaceStorage implements NamespaceStorage {
         return (Map<K, V>) local.get(type);
     }
 
-    final <K, V, T extends K, U extends V> void addToNamespace(final ParserNamespace<K, V> type, final T key,
-            final U value) {
-        getNamespaceBehaviour(type).addTo(this, key, value);
+    final <K, V> void addToNamespace(final ParserNamespace<K, V> type, final K key, final V value) {
+        accessNamespace(type).valueTo(this, key, value);
     }
 
     @Override
@@ -141,8 +127,8 @@ abstract class AbstractNamespaceStorage implements NamespaceStorage {
                     break;
                 case 1:
                     // Alright, time to grow to a full HashMap
-                    final Map<ParserNamespace<?, ?>, Map<?,?>> newNamespaces = new HashMap<>(4);
-                    final Entry<ParserNamespace<?, ?>, Map<?, ?>> entry = namespaces.entrySet().iterator().next();
+                    final var newNamespaces = new HashMap<ParserNamespace<?, ?>, Map<?, ?>>(4);
+                    final var entry = namespaces.entrySet().iterator().next();
                     newNamespaces.put(entry.getKey(), entry.getValue());
                     namespaces = newNamespaces;
                     // fall through