*/
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;
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;
* 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
}
@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,
}
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