Make YangNamespaceContextNamespace global 45/92945/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 6 Oct 2020 18:47:55 +0000 (20:47 +0200)
committerRobert Varga <nite@hq.sk>
Tue, 6 Oct 2020 19:24:23 +0000 (19:24 +0000)
The crux of the problem with not being able to resolve prefixes comes
from the fact we end up reusing the same context for both submodule
and module. Turn the namespace into a global one, keyed by the root
context.

JIRA: YANGTOOLS-1138
Change-Id: Ibdd1b4c2427fcf62a341e9ff15dddbd055ffa6fb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit cde92d4deb4fcc2446cca0d80fb0450e900aa914)

yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/namespace/YangNamespaceContextNamespace.java

index 4334479d5503a04be4b46687608dd8f9d2e102e3..b18997c9bde8571461924df098692d735061086b 100644 (file)
@@ -11,7 +11,6 @@ import static com.google.common.base.Verify.verify;
 
 import com.google.common.annotations.Beta;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.common.YangNamespaceContext;
 import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
@@ -19,17 +18,17 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 
 @Beta
-public interface YangNamespaceContextNamespace extends IdentifierNamespace<Empty, YangNamespaceContext> {
-    NamespaceBehaviour<Empty, YangNamespaceContext, @NonNull YangNamespaceContextNamespace> BEHAVIOUR =
-            NamespaceBehaviour.rootStatementLocal(YangNamespaceContextNamespace.class);
+public interface YangNamespaceContextNamespace extends IdentifierNamespace<StmtContext<?, ?, ?>, YangNamespaceContext> {
+    NamespaceBehaviour<StmtContext<?, ?, ?>, YangNamespaceContext, @NonNull YangNamespaceContextNamespace> BEHAVIOUR =
+            NamespaceBehaviour.global(YangNamespaceContextNamespace.class);
 
     static @NonNull YangNamespaceContext computeIfAbsent(final StmtContext<?, ?, ?> ctx) {
         final StmtContext<?, ?, ?> root = ctx.getRoot();
-        YangNamespaceContext ret = root.getFromNamespace(YangNamespaceContextNamespace.class, Empty.getInstance());
+        YangNamespaceContext ret = ctx.getFromNamespace(YangNamespaceContextNamespace.class, root);
         if (ret == null) {
             verify(ctx instanceof Mutable, "Cannot populate namespace context to %s", ctx);
-            ret = new StmtNamespaceContext(ctx);
-            ((Mutable<?, ?, ?>)ctx).addToNs(YangNamespaceContextNamespace.class, Empty.getInstance(), ret);
+            ret = new StmtNamespaceContext(root);
+            ((Mutable<?, ?, ?>)ctx).addToNs(YangNamespaceContextNamespace.class, root, ret);
         }
         return ret;
     }