From 9b40203b8fcf3a5a9d0abebce11c09dd3552e76a Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 11 Sep 2014 00:04:42 +0200 Subject: [PATCH] BUG-1800: restore QNameModule sharing in parser The refactor to eliminate use of QName.getPrefix() has lead to us not sharing QNameModules anymore. Restore the capability to allow us to operate at pea efficiency. Change-Id: I9a23ca3396390eae0ffe9d954fb6fab3c7d1be55 Signed-off-by: Robert Varga --- .../yang/parser/impl/YangParserListenerImpl.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserListenerImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserListenerImpl.java index 9de7ce02b4..fdaaf33d88 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserListenerImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserListenerImpl.java @@ -70,6 +70,7 @@ import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.When_stmtContext; import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Yang_version_stmtContext; import org.opendaylight.yangtools.antlrv4.code.gen.YangParserBaseListener; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.ModuleImport; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; @@ -556,13 +557,13 @@ public final class YangParserListenerImpl extends YangParserBaseListener { private QName parseQName(final String qnameString, final int line) { final QName qname; if (qnameString.indexOf(':') == -1) { - qname = QName.create(moduleQName.getNamespace(), moduleQName.getRevision(), qnameString); + qname = QName.create(moduleQName, qnameString); } else { final Iterator split = COLON_SPLITTER.split(qnameString).iterator(); final String prefix = split.next(); final String name = split.next(); if (prefix.equals(moduleBuilder.getPrefix())) { - qname = QName.create(moduleQName.getNamespace(), moduleQName.getRevision(), name); + qname = QName.create(moduleQName, name); } else { ModuleImport imp = moduleBuilder.getImport(prefix); if (imp == null) { @@ -581,9 +582,14 @@ public final class YangParserListenerImpl extends YangParserBaseListener { revision = namespaces.lastEntry().getKey(); namespace = namespaces.lastEntry().getValue(); } else { + // FIXME: this lookup does not look right, as we will end up with + // a qname which does not have a namespace. At any rate we + // should arrive at a QNameModule! namespace = namespaces.get(revision); } - qname = QName.create(namespace, revision, name); + + final QNameModule mod = QNameModule.cachedReference(QNameModule.create(namespace, revision)); + qname = QName.create(mod, name); } } return qname; -- 2.36.6