From 3e91ac02b8fba476fd273bf2357359f9f8473b4d Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 10 Feb 2021 17:40:41 +0100 Subject: [PATCH] Improve SchemaInferenceStack.enterSchemaTree() 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 --- .../src/main/java/module-info.java | 1 + .../yang/model/util/SchemaInferenceStack.java | 21 ++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/yang/yang-model-util/src/main/java/module-info.java b/yang/yang-model-util/src/main/java/module-info.java index 1c2c698770..6e9dea6389 100644 --- a/yang/yang-model-util/src/main/java/module-info.java +++ b/yang/yang-model-util/src/main/java/module-info.java @@ -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; diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaInferenceStack.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaInferenceStack.java index e4019f92ca..dba62bc55f 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaInferenceStack.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaInferenceStack.java @@ -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 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 pushSchema(final @NonNull QName nodeIdentifier) { + private @NonNull SchemaTreeEffectiveStatement pushSchema(final @NonNull QName nodeIdentifier) { final EffectiveStatement parent = deque.peekFirst(); return parent != null ? pushSchema(parent, nodeIdentifier) : pushFirstSchema(nodeIdentifier); } - private @NonNull EffectiveStatement pushSchema(final EffectiveStatement parent, + private @NonNull SchemaTreeEffectiveStatement pushSchema(final EffectiveStatement parent, final @NonNull QName nodeIdentifier) { checkState(parent instanceof SchemaTreeAwareEffectiveStatement, "Cannot descend schema tree at %s", parent); return pushSchema((SchemaTreeAwareEffectiveStatement) parent, nodeIdentifier); } - private @NonNull EffectiveStatement pushSchema( + private @NonNull SchemaTreeEffectiveStatement pushSchema( final @NonNull SchemaTreeAwareEffectiveStatement parent, final @NonNull QName nodeIdentifier) { - final EffectiveStatement 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 pushFirstSchema(final @NonNull QName nodeIdentifier) { + private @NonNull SchemaTreeEffectiveStatement pushFirstSchema(final @NonNull QName nodeIdentifier) { final ModuleEffectiveStatement module = getModule(nodeIdentifier); - final EffectiveStatement ret = pushSchema(module, nodeIdentifier); + final SchemaTreeEffectiveStatement ret = pushSchema(module, nodeIdentifier); currentModule = module; return ret; } -- 2.36.6