Improve SchemaInferenceStack.enterSchemaTree() 24/95124/2
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 10 Feb 2021 16:40:41 +0000 (17:40 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 10 Feb 2021 16:52:52 +0000 (17:52 +0100)
We can guarantee a return of SchemaTreeEffectiveStatement, make
sure we show that to the users, allowing their dispatch to be
more neatly bracketed.

JIRA: YANGTOOLS-1231
Change-Id: If805a2a612c23157422bea717f9dfada9ac0f093
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-model-util/src/main/java/module-info.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaInferenceStack.java

index 1c2c698770f81d3d832c456ae94b8cc197dde773..6e9dea638934bd8e5b2bc845e29ad9ead8be3d59 100644 (file)
@@ -13,6 +13,7 @@ module org.opendaylight.yangtools.yang.model.util {
 
     requires org.opendaylight.yangtools.util;
     requires org.opendaylight.yangtools.yang.common;
+    requires org.opendaylight.yangtools.yang.model.api;
     requires org.opendaylight.yangtools.yang.model.spi;
     requires org.slf4j;
 
index e4019f92cae181d51cc309c7b5844786b857d0fa..dba62bc55f31739552185e19b9af6b35ba77d613 100644 (file)
@@ -30,6 +30,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement
 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeAwareEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement;
 
 /**
  * A state tracking utility for walking {@link EffectiveModelContext}'s contents along schema/grouping namespaces. This
@@ -163,7 +164,7 @@ public final class SchemaInferenceStack implements Mutable, EffectiveModelContex
     }
 
     /**
-     * Lookup a grouping by its node identifier and push it to the stack.
+     * Lookup a {@code grouping} by its node identifier and push it to the stack.
      *
      * @param nodeIdentifier Node identifier of the grouping to enter
      * @return Resolved grouping
@@ -175,14 +176,14 @@ public final class SchemaInferenceStack implements Mutable, EffectiveModelContex
     }
 
     /**
-     * Lookup a schema tree child by its node identifier and push it to the stack.
+     * Lookup a {@code schema tree} child by its node identifier and push it to the stack.
      *
      * @param nodeIdentifier Node identifier of the schema tree child to enter
      * @return Resolved schema tree child
      * @throws NullPointerException if {@code nodeIdentifier} is null
-     * @throws IllegalArgumentException if the corresponding grouping cannot be found
+     * @throws IllegalArgumentException if the corresponding child cannot be found
      */
-    public @NonNull EffectiveStatement<QName, ?> enterSchemaTree(final QName nodeIdentifier) {
+    public @NonNull SchemaTreeEffectiveStatement<?> enterSchemaTree(final QName nodeIdentifier) {
         return pushSchema(requireNonNull(nodeIdentifier));
     }
 
@@ -273,28 +274,28 @@ public final class SchemaInferenceStack implements Mutable, EffectiveModelContex
         return ret;
     }
 
-    private @NonNull EffectiveStatement<QName, ?> pushSchema(final @NonNull QName nodeIdentifier) {
+    private @NonNull SchemaTreeEffectiveStatement<?> pushSchema(final @NonNull QName nodeIdentifier) {
         final EffectiveStatement<QName, ?> parent = deque.peekFirst();
         return parent != null ? pushSchema(parent, nodeIdentifier) : pushFirstSchema(nodeIdentifier);
     }
 
-    private @NonNull EffectiveStatement<QName, ?> pushSchema(final EffectiveStatement<QName, ?> parent,
+    private @NonNull SchemaTreeEffectiveStatement<?> pushSchema(final EffectiveStatement<QName, ?> parent,
             final @NonNull QName nodeIdentifier) {
         checkState(parent instanceof SchemaTreeAwareEffectiveStatement, "Cannot descend schema tree at %s", parent);
         return pushSchema((SchemaTreeAwareEffectiveStatement<?, ?>) parent, nodeIdentifier);
     }
 
-    private @NonNull EffectiveStatement<QName, ?> pushSchema(
+    private @NonNull SchemaTreeEffectiveStatement<?> pushSchema(
             final @NonNull SchemaTreeAwareEffectiveStatement<?, ?> parent, final @NonNull QName nodeIdentifier) {
-        final EffectiveStatement<QName, ?> ret = parent.findSchemaTreeNode(nodeIdentifier).orElseThrow(
+        final SchemaTreeEffectiveStatement<?> ret = parent.findSchemaTreeNode(nodeIdentifier).orElseThrow(
             () -> new IllegalArgumentException("Schema tree child " + nodeIdentifier + " not present"));
         deque.push(ret);
         return ret;
     }
 
-    private @NonNull EffectiveStatement<QName, ?> pushFirstSchema(final @NonNull QName nodeIdentifier) {
+    private @NonNull SchemaTreeEffectiveStatement<?> pushFirstSchema(final @NonNull QName nodeIdentifier) {
         final ModuleEffectiveStatement module = getModule(nodeIdentifier);
-        final EffectiveStatement<QName, ?> ret = pushSchema(module, nodeIdentifier);
+        final SchemaTreeEffectiveStatement<?> ret = pushSchema(module, nodeIdentifier);
         currentModule = module;
         return ret;
     }