From cde92d4deb4fcc2446cca0d80fb0450e900aa914 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 6 Oct 2020 20:47:55 +0200 Subject: [PATCH] Make YangNamespaceContextNamespace global 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 --- .../namespace/YangNamespaceContextNamespace.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/namespace/YangNamespaceContextNamespace.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/namespace/YangNamespaceContextNamespace.java index 4334479d55..b18997c9bd 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/namespace/YangNamespaceContextNamespace.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/namespace/YangNamespaceContextNamespace.java @@ -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 { - NamespaceBehaviour BEHAVIOUR = - NamespaceBehaviour.rootStatementLocal(YangNamespaceContextNamespace.class); +public interface YangNamespaceContextNamespace extends IdentifierNamespace, YangNamespaceContext> { + NamespaceBehaviour, 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; } -- 2.36.6