Improve SchemaInferenceStack.enterSchemaTree() 29/95129/1
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 10 Feb 2021 16:40:41 +0000 (17:40 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 11 Feb 2021 09:24:30 +0000 (10:24 +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>
(cherry picked from commit 3e91ac02b8fba476fd273bf2357359f9f8473b4d)

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 77c5563a2b4eb9e9829e5065a3430649f7cc1ec8..e6fd9c1368163f39cefd176280f4673361717fe0 100644 (file)
@@ -13,5 +13,7 @@ module org.opendaylight.yangtools.yang.model.util {
     requires transitive org.opendaylight.yangtools.rfc7952.model.api;
 
     requires org.opendaylight.yangtools.util;
+    requires org.opendaylight.yangtools.yang.common;
+    requires org.opendaylight.yangtools.yang.model.api;
     requires org.slf4j;
 }
index 696343b9bdcfbc2085be231bf2344511a63f6b5e..7084bfd258b36e157791ce67ee90891f84c43210 100644 (file)
@@ -29,6 +29,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
@@ -130,7 +131,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
@@ -142,14 +143,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));
     }
 
@@ -228,28 +229,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;
     }