From 15f50253028b3e7c3614b1a609581ac40dc35e91 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 (cherry picked from commit 3e91ac02b8fba476fd273bf2357359f9f8473b4d) --- .../src/main/java/module-info.java | 2 ++ .../yang/model/util/SchemaInferenceStack.java | 21 ++++++++++--------- 2 files changed, 13 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 77c5563a2b..e6fd9c1368 100644 --- a/yang/yang-model-util/src/main/java/module-info.java +++ b/yang/yang-model-util/src/main/java/module-info.java @@ -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; } 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 696343b9bd..7084bfd258 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 @@ -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 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 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