Remove QNameCacheNamespace 93/87293/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 28 Jan 2020 18:51:02 +0000 (19:51 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 30 Jan 2020 10:42:26 +0000 (11:42 +0100)
QNames (and QNameModules) are providing proper interning facilities,
hence there is no point for parser to do the same. This actually
improves performance a bit, as the parser way of doing things requires
a bit of indirection to get to the appropriate namespace storage node.

JIRA: YANGTOOLS-652
Change-Id: I25f6ea5a78364a9f24fa6149ab69e9b2b1370960
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit ef3583bc494e4cbd09910c51c3b9599d4d9c1fbd)
(cherry picked from commit a9ee06a279886913204384400fc86871da7e2475)

yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractQNameStatementSupport.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/QNameCacheNamespace.java [deleted file]
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java
yang/yang-parser-spi/src/test/java/org/opendaylight/yangtools/yang/parser/spi/meta/QNameCacheNamespaceTest.java [deleted file]

index 5280242bd70a4e97b00f462fe8a20d67c124d1ba..266208b6af3b6a6b6d3ecb36cd9a282dce4151e5 100644 (file)
@@ -20,7 +20,6 @@ import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
-import org.opendaylight.yangtools.yang.parser.spi.meta.QNameCacheNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
@@ -100,7 +99,7 @@ public final class MountPointStatementSupport
     @Override
     public QName adaptArgumentValue(final StmtContext<QName, MountPointStatement, MountPointEffectiveStatement> ctx,
             final QNameModule targetModule) {
-        return ctx.getFromNamespace(QNameCacheNamespace.class, ctx.getStatementArgument().withModule(targetModule));
+        return ctx.coerceStatementArgument().withModule(targetModule).intern();
     }
 
     @Override
index 3617a36e5ea6f3905ab54184689a565199f8b98c..f2dbe4f10d46a0cace557614befc869e11df6720 100644 (file)
@@ -124,7 +124,6 @@ import org.opendaylight.yangtools.yang.parser.spi.SubmoduleNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.TypeNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.DerivedIdentitiesNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
-import org.opendaylight.yangtools.yang.parser.spi.meta.QNameCacheNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionModuleNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementDefinitionNamespace;
@@ -203,7 +202,6 @@ public final class RFC7950Reactors {
             .addSupport(ModuleCtxToSourceIdentifier.BEHAVIOUR)
             .addSupport(ModuleQNameToModuleName.BEHAVIOUR)
             .addSupport(PrefixToModule.BEHAVIOUR)
-            .addSupport(QNameCacheNamespace.getInstance())
             .addSupport(ImportedModuleContext.BEHAVIOUR)
             .addSupport(IncludedModuleContext.BEHAVIOUR)
             .addSupport(IncludedSubmoduleNameToModuleCtx.BEHAVIOUR)
index 522e81511c1dc6bf6bf6872f6bdfa5b634e9d4f9..0d86da1ce187c047611c5c0c9476d2ca7c9bf7f3 100644 (file)
@@ -21,7 +21,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport;
-import org.opendaylight.yangtools.yang.parser.spi.meta.QNameCacheNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
@@ -68,7 +67,7 @@ public final class KeyStatementSupport
         for (final SchemaNodeIdentifier arg : ctx.coerceStatementArgument()) {
             final QName qname = arg.getLastComponent();
             if (!targetModule.equals(qname.getModule())) {
-                final QName newQname = ctx.getFromNamespace(QNameCacheNamespace.class, qname.withModule(targetModule));
+                final QName newQname = qname.withModule(targetModule).intern();
                 builder.add(SchemaNodeIdentifier.SAME.createChild(newQname));
                 replaced = true;
             } else {
index 77be43cce7797ee42f773cf5956e6845e0246b22..d84c005561fcec13cc3292d2d8ce0f55abed74c3 100644 (file)
@@ -7,7 +7,8 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type;
 
-import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkArgument;
+
 import com.google.common.collect.ImmutableMap;
 import java.util.Collection;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -47,7 +48,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Infere
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
-import org.opendaylight.yangtools.yang.parser.spi.meta.QNameCacheNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
@@ -309,10 +309,9 @@ abstract class AbstractTypeStatementSupport
         final SchemaPath path = stmtCtx.getSchemaPath().get();
         final SchemaPath parent = path.getParent();
         final QName parentQName = parent.getLastComponent();
-        Preconditions.checkArgument(parentQName != null, "Path %s has an empty parent", path);
+        checkArgument(parentQName != null, "Path %s has an empty parent", path);
 
-        final QName qname = stmtCtx.getFromNamespace(QNameCacheNamespace.class,
-            QName.create(parentQName, path.getLastComponent().getLocalName()));
+        final QName qname = path.getLastComponent().withModule(parentQName.getModule()).intern();
         return parent.createChild(qname);
     }
 }
\ No newline at end of file
index 74b8e75f40cb347e113c219c460604b80aba376b..2bcb7613f7ddd595814fc9652a6f4e442b4d0ee8 100644 (file)
@@ -33,6 +33,6 @@ public abstract class AbstractQNameStatementSupport<D extends DeclaredStatement<
 
     @Override
     public QName adaptArgumentValue(final StmtContext<QName, D, E> ctx, final QNameModule targetModule) {
-        return ctx.getFromNamespace(QNameCacheNamespace.class, ctx.getStatementArgument().withModule(targetModule));
+        return ctx.getStatementArgument().withModule(targetModule).intern();
     }
 }
diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/QNameCacheNamespace.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/QNameCacheNamespace.java
deleted file mode 100644 (file)
index 89043bb..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.parser.spi.meta;
-
-import java.util.Map;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace;
-
-/**
- * An {@link IdentifierNamespace} implementing a {@link QName} internment interface. Lookups in this namespace always
- * return a non-null object. They capture the first object instance and return that on subsequent lookups.
- */
-public final class QNameCacheNamespace extends NamespaceBehaviour<QName, QName, QNameCacheNamespace>
-    implements IdentifierNamespace<QName, QName> {
-
-    private static final QNameCacheNamespace INSTANCE = new QNameCacheNamespace();
-
-    private QNameCacheNamespace() {
-        super(QNameCacheNamespace.class);
-    }
-
-    public static QNameCacheNamespace getInstance() {
-        return INSTANCE;
-    }
-
-    @Override
-    public QName get(final QName identifier) {
-        throw new UnsupportedOperationException("Identifier/implementation API borkage");
-    }
-
-    private static NamespaceStorageNode getRoot(final NamespaceStorageNode storage) {
-        NamespaceStorageNode wlk = storage;
-
-        while (wlk.getParentNamespaceStorage() != null) {
-            wlk = wlk.getParentNamespaceStorage();
-        }
-
-        return wlk;
-    }
-
-    @Override
-    public QName getFrom(final NamespaceStorageNode storage, final QName key) {
-        final NamespaceStorageNode root = getRoot(storage);
-        final QName stored = root.getFromLocalStorage(QNameCacheNamespace.class, key);
-        if (stored != null) {
-            return stored;
-        }
-
-        root.putToLocalStorage(QNameCacheNamespace.class, key, key);
-        return key;
-    }
-
-    @Override
-    public Map<QName, QName> getAllFrom(final NamespaceStorageNode storage) {
-        return getRoot(storage).getAllFromLocalStorage(QNameCacheNamespace.class);
-    }
-
-    @Override
-    public void addTo(final NamespaceStorageNode storage, final QName key, final QName value) {
-        throw new UnsupportedOperationException("Automagically populated");
-    }
-}
index 9599f4a234b1e5bb9a1eb86ac2032bb0cd90447a..7d4ffbfe0f78e86be2a100b93bfe830c70799635 100644 (file)
@@ -575,8 +575,7 @@ public final class StmtContextUtils {
         } catch (IllegalArgumentException e) {
             throw new SourceException(ctx.getStatementSourceReference(), e, "Invalid identifier '%s'", localName);
         }
-
-        return ctx.getFromNamespace(QNameCacheNamespace.class, template);
+        return template.intern();
     }
 
     public static QNameModule getRootModuleQName(final StmtContext<?, ?, ?> ctx) {
diff --git a/yang/yang-parser-spi/src/test/java/org/opendaylight/yangtools/yang/parser/spi/meta/QNameCacheNamespaceTest.java b/yang/yang-parser-spi/src/test/java/org/opendaylight/yangtools/yang/parser/spi/meta/QNameCacheNamespaceTest.java
deleted file mode 100644 (file)
index 964580a..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright (c) 2017 Pantheon Technologies s.r.o. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.parser.spi.meta;
-
-import static org.junit.Assert.assertNotNull;
-
-import org.junit.Test;
-
-public class QNameCacheNamespaceTest {
-    @Test
-    public void testGetInstance() {
-        assertNotNull(QNameCacheNamespace.getInstance());
-    }
-}