BUG-1793: make sure we cache QNameModule 10/11010/1
authorRobert Varga <rovarga@cisco.com>
Wed, 10 Sep 2014 18:50:37 +0000 (20:50 +0200)
committerRobert Varga <rovarga@cisco.com>
Wed, 10 Sep 2014 18:50:37 +0000 (20:50 +0200)
This fixes QName.cachedReference() to lookup
QNameModule.cachedReference(), so we get maximum QNameModule sharing.

Change-Id: I7234a1da4429c36db2ccaeade1a0c423a94aa006
Signed-off-by: Robert Varga <rovarga@cisco.com>
yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QName.java

index 5d2563d683c78f6cee5606fdbedc9b7052f9c760..18969403d01d0f6c663814170d6653fd2128eacb 100644 (file)
@@ -80,7 +80,18 @@ public final class QName implements Immutable, Serializable, Comparable<QName> {
      * @return Cached instance, according to {@link ObjectCache} policy.
      */
     public static QName cachedReference(final QName qname) {
-        return CACHE.getReference(qname);
+        // We also want to make sure we keep the QNameModule cached
+        final QNameModule myMod = qname.getModule();
+        final QNameModule cacheMod = QNameModule.cachedReference(myMod);
+
+        final QName what;
+        if (cacheMod == myMod) {
+            what = qname;
+        } else {
+            what = QName.create(cacheMod, qname.localName);
+        }
+
+        return CACHE.getReference(what);
     }
 
     /**