Add StmtContextUtils.getModuleQName() 32/102132/1
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 17 Aug 2022 13:39:36 +0000 (15:39 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 17 Aug 2022 13:39:36 +0000 (15:39 +0200)
We can make things safer by requiring a RootStmtContext, which in turn
allows us to take a slight shortcut.

Change-Id: I200ff520eeca5d3ff5a3653988257fe379e5763e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java

index dd89e878f2f6a577aa1d1a4aaf3e7afee6075dfe..1020b649d0138a820b917addf57acb70da595eea 100644 (file)
@@ -236,8 +236,8 @@ abstract class ReactorStmtCtx<A, D extends DeclaredStatement<A>, E extends Effec
 
     @Override
     public final QName moduleName() {
-        final RootStatementContext<?, ?, ?> root = getRoot();
-        return QName.create(StmtContextUtils.getRootModuleQName(root), root.getRawArgument());
+        final var root = getRoot();
+        return QName.create(StmtContextUtils.getModuleQName(root), root.getRawArgument());
     }
 
     //
index 9d62e62c88aee4e72564bd45145ebbd1422f8f09..714e1ab49a3a4475b7f063078875771ea8ad9331 100644 (file)
@@ -546,25 +546,25 @@ public final class StmtContextUtils {
     }
 
     public static QNameModule getRootModuleQName(final StmtContext<?, ?, ?> ctx) {
-        if (ctx == null) {
-            return null;
-        }
+        return ctx == null ? null : getModuleQName(ctx.getRoot());
+    }
 
-        final var rootCtx = ctx.getRoot();
-        if (rootCtx.producesDeclared(ModuleStatement.class)) {
-            return lookupModuleQName(rootCtx, rootCtx);
-        } else if (rootCtx.producesDeclared(SubmoduleStatement.class)) {
-            final var belongsTo = rootCtx.getAllFromNamespace(BelongsToPrefixToModuleCtx.class);
+    public static @NonNull QNameModule getModuleQName(final @NonNull RootStmtContext<?, ?, ?> ctx) {
+        if (ctx.producesDeclared(ModuleStatement.class)) {
+            return lookupModuleQName(ctx, ctx);
+        } else if (ctx.producesDeclared(SubmoduleStatement.class)) {
+            final var belongsTo = ctx.getAllFromNamespace(BelongsToPrefixToModuleCtx.class);
             if (belongsTo == null || belongsTo.isEmpty()) {
-                throw new IllegalArgumentException(rootCtx + " does not have belongs-to linkage resolved");
+                throw new IllegalArgumentException(ctx + " does not have belongs-to linkage resolved");
             }
-            return lookupModuleQName(rootCtx, belongsTo.values().iterator().next());
+            return lookupModuleQName(ctx, belongsTo.values().iterator().next());
         } else {
-            throw new IllegalArgumentException("Unsupported root " + rootCtx);
+            throw new IllegalArgumentException("Unsupported root " + ctx);
         }
     }
 
-    private static QNameModule lookupModuleQName(final NamespaceStmtCtx storage, final StmtContext<?, ?, ?> module) {
+    private static @NonNull QNameModule lookupModuleQName(final NamespaceStmtCtx storage,
+            final StmtContext<?, ?, ?> module) {
         final var ret = storage.getFromNamespace(ModuleCtxToModuleQName.class, module);
         if (ret == null) {
             throw new IllegalArgumentException("Failed to look up QNameModule for " + module + " in " + storage);