BUG-1270: optimize Builders with QName(Module) 42/8642/2
authorRobert Varga <rovarga@cisco.com>
Thu, 3 Jul 2014 20:45:43 +0000 (22:45 +0200)
committerRobert Varga <rovarga@cisco.com>
Fri, 4 Jul 2014 07:17:03 +0000 (09:17 +0200)
Now that we are exposing QNameModule, we can optimize QName
instantiation heavily by passing parent QName and QNameModule instances,
so they will get massively reused.

Change-Id: If67883ea3873a55b563136b743a7453c365475a9
Signed-off-by: Robert Varga <rovarga@cisco.com>
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/BuilderUtils.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ChoiceBuilder.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ChoiceCaseBuilder.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/GroupingBuilderImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ListSchemaNodeBuilder.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/NotificationBuilder.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/util/AbstractDocumentedDataNodeContainerBuilder.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserImpl.java

index d4ba3d16077d1b84b4d50ecfe78304f0751e2202..82a2989076ead671e0324942709798a93624a916 100644 (file)
@@ -19,7 +19,6 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
@@ -29,6 +28,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
+
 import org.apache.commons.io.IOUtils;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
@@ -704,12 +704,11 @@ public final class BuilderUtils {
     }
 
     public static Set<DataSchemaNodeBuilder> wrapChildNodes(final String moduleName, final int line,
-            final Set<DataSchemaNode> nodes, final SchemaPath parentPath, final URI ns, final Date rev,
-            final String pref) {
+            final Set<DataSchemaNode> nodes, final SchemaPath parentPath, final QName parentQName) {
         Set<DataSchemaNodeBuilder> result = new HashSet<>();
 
         for (DataSchemaNode node : nodes) {
-            QName qname = new QName(ns, rev, pref, node.getQName().getLocalName());
+            QName qname = QName.create(parentQName, node.getQName().getLocalName());
             DataSchemaNodeBuilder wrapped = wrapChildNode(moduleName, line, node, parentPath, qname);
             result.add(wrapped);
         }
@@ -742,11 +741,10 @@ public final class BuilderUtils {
     }
 
     public static Set<GroupingBuilder> wrapGroupings(final String moduleName, final int line,
-            final Set<GroupingDefinition> nodes, final SchemaPath parentPath, final URI ns, final Date rev,
-            final String pref) {
+            final Set<GroupingDefinition> nodes, final SchemaPath parentPath, final QName parentQName) {
         Set<GroupingBuilder> result = new HashSet<>();
         for (GroupingDefinition node : nodes) {
-            QName qname = new QName(ns, rev, pref, node.getQName().getLocalName());
+            QName qname = QName.create(parentQName, node.getQName().getLocalName());
             SchemaPath schemaPath = parentPath.createChild(qname);
             result.add(new GroupingBuilderImpl(moduleName, line, qname, schemaPath, node));
         }
@@ -754,12 +752,11 @@ public final class BuilderUtils {
     }
 
     public static Set<TypeDefinitionBuilder> wrapTypedefs(final String moduleName, final int line,
-            final DataNodeContainer dataNode, final SchemaPath parentPath, final URI ns, final Date rev,
-            final String pref) {
+            final DataNodeContainer dataNode, final SchemaPath parentPath, final QName parentQName) {
         Set<TypeDefinition<?>> nodes = dataNode.getTypeDefinitions();
         Set<TypeDefinitionBuilder> result = new HashSet<>();
         for (TypeDefinition<?> node : nodes) {
-            QName qname = new QName(ns, rev, pref, node.getQName().getLocalName());
+            QName qname = QName.create(parentQName, node.getQName().getLocalName());
             SchemaPath schemaPath = parentPath.createChild(qname);
             result.add(new TypeDefinitionBuilderImpl(moduleName, line, qname, schemaPath, ((ExtendedType) node)));
         }
@@ -767,11 +764,10 @@ public final class BuilderUtils {
     }
 
     public static List<UnknownSchemaNodeBuilderImpl> wrapUnknownNodes(final String moduleName, final int line,
-            final List<UnknownSchemaNode> nodes, final SchemaPath parentPath, final URI ns, final Date rev,
-            final String pref) {
+            final List<UnknownSchemaNode> nodes, final SchemaPath parentPath, final QName parentQName) {
         List<UnknownSchemaNodeBuilderImpl> result = new ArrayList<>();
         for (UnknownSchemaNode node : nodes) {
-            QName qname = new QName(ns, rev, pref, node.getQName().getLocalName());
+            QName qname = QName.create(parentQName, node.getQName().getLocalName());
             SchemaPath schemaPath = parentPath.createChild(qname);
             result.add(new UnknownSchemaNodeBuilderImpl(moduleName, line, qname, schemaPath, node));
         }
index c4dab717b4dbe3cd47304a15d8f4a4c9f201e4d5..bfc549cbbf53ead652c40702c399bb6569ac4c69 100644 (file)
@@ -9,13 +9,13 @@ package org.opendaylight.yangtools.yang.parser.builder.impl;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
-import java.net.URI;
+
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.TreeSet;
+
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
@@ -35,7 +35,7 @@ import org.opendaylight.yangtools.yang.parser.builder.util.Comparators;
 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
 
 public final class ChoiceBuilder extends AbstractSchemaNodeBuilder implements DataSchemaNodeBuilder,
-        AugmentationTargetBuilder {
+AugmentationTargetBuilder {
     private ChoiceNodeImpl instance;
 
     // DataSchemaNode args
@@ -70,19 +70,16 @@ public final class ChoiceBuilder extends AbstractSchemaNodeBuilder implements Da
         configuration = base.isConfiguration();
         augmentations.addAll(base.getAvailableAugmentations());
 
-        URI ns = qname.getNamespace();
-        Date rev = qname.getRevision();
-        String pref = qname.getPrefix();
         Set<DataSchemaNodeBuilder> wrapped = BuilderUtils.wrapChildNodes(moduleName, line, new HashSet<DataSchemaNode>(
-                base.getCases()), path, ns, rev, pref);
+                base.getCases()), path, qname);
         for (DataSchemaNodeBuilder wrap : wrapped) {
             if (wrap instanceof ChoiceCaseBuilder) {
                 caseBuilders.add((ChoiceCaseBuilder) wrap);
             }
         }
 
-        addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path, ns,
-                rev, pref));
+        addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path,
+                qname));
     }
 
     @Override
index 57ffe80f79754450a2609941f0907227d3e23e53..a090d733e9d5ac1d7fb8c48cced4b06c9a5ad4c8 100644 (file)
@@ -10,11 +10,11 @@ package org.opendaylight.yangtools.yang.parser.builder.impl;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
-import java.net.URI;
+
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 import java.util.Set;
+
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
@@ -33,7 +33,7 @@ import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDat
 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
 
 public final class ChoiceCaseBuilder extends AbstractDocumentedDataNodeContainerBuilder implements DataSchemaNodeBuilder,
-        AugmentationTargetBuilder {
+AugmentationTargetBuilder {
     private ChoiceCaseNodeImpl instance;
     // SchemaNode args
     private SchemaPath schemaPath;
@@ -67,11 +67,8 @@ public final class ChoiceCaseBuilder extends AbstractDocumentedDataNodeContainer
         augmenting = base.isAugmenting();
         addedByUses = base.isAddedByUses();
 
-        URI ns = qname.getNamespace();
-        Date rev = qname.getRevision();
-        String pref = qname.getPrefix();
-        addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path, ns,
-                rev, pref));
+        addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path,
+                qname));
         augmentations.addAll(base.getAvailableAugmentations());
     }
 
index 96009d8fd6f55f46661f7e489928b2508fe8ee58..042756447f68c9376c466a9bf68395986c6bc76f 100644 (file)
@@ -9,11 +9,11 @@ package org.opendaylight.yangtools.yang.parser.builder.impl;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
-import java.net.URI;
-import java.util.Date;
+
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
@@ -52,11 +52,8 @@ public final class GroupingBuilderImpl extends AbstractDocumentedDataNodeContain
         status = base.getStatus();
         addedByUses = base.isAddedByUses();
 
-        URI ns = qname.getNamespace();
-        Date rev = qname.getRevision();
-        String pref = qname.getPrefix();
         addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path,
-                ns, rev, pref));
+                qname));
     }
 
     @Override
@@ -195,7 +192,7 @@ public final class GroupingBuilderImpl extends AbstractDocumentedDataNodeContain
     }
 
     private static final class GroupingDefinitionImpl extends AbstractDocumentedDataNodeContainer implements
-            GroupingDefinition {
+    GroupingDefinition {
         private final QName qname;
         private final SchemaPath path;
 
index e251aacb87518b16808fc5ea294ed7eadd0b069f..a41a675f48ca8847f7f52235c9ea0b70ea9938d7 100644 (file)
@@ -10,11 +10,11 @@ package org.opendaylight.yangtools.yang.parser.builder.impl;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
-import java.net.URI;
+
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 import java.util.Set;
+
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
 import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
@@ -30,7 +30,7 @@ import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDat
 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainerBuilder;
 
 public final class ListSchemaNodeBuilder extends AbstractDocumentedDataNodeContainerBuilder implements DataSchemaNodeBuilder,
-        AugmentationTargetBuilder {
+AugmentationTargetBuilder {
     private ListSchemaNodeImpl instance;
     private boolean userOrdered;
     private List<String> keys;
@@ -65,12 +65,8 @@ public final class ListSchemaNodeBuilder extends AbstractDocumentedDataNodeConta
         addedByUses = base.isAddedByUses();
         configuration = base.isConfiguration();
 
-        URI ns = qname.getNamespace();
-        Date rev = qname.getRevision();
-        String pref = qname.getPrefix();
-        addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path, ns,
-                rev, pref));
-
+        addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path,
+                qname));
         augmentations.addAll(base.getAvailableAugmentations());
     }
 
index d19d0268ff21cc39bf441016ec87f81585a18163..7e5c53db66bc9705bdeb9ec8c62c302cc5dff9e2 100644 (file)
@@ -10,11 +10,11 @@ package org.opendaylight.yangtools.yang.parser.builder.impl;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
-import java.net.URI;
+
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 import java.util.Set;
+
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
@@ -29,7 +29,7 @@ import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDat
 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
 
 public final class NotificationBuilder extends AbstractDocumentedDataNodeContainerBuilder implements SchemaNodeBuilder,
-        AugmentationTargetBuilder {
+AugmentationTargetBuilder {
     private NotificationDefinitionImpl instance;
     // SchemaNode args
     private SchemaPath schemaPath;
@@ -47,12 +47,8 @@ public final class NotificationBuilder extends AbstractDocumentedDataNodeContain
         super(moduleName, line, qname, path, base);
         this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
 
-        URI ns = qname.getNamespace();
-        Date rev = qname.getRevision();
-        String pref = qname.getPrefix();
         addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path,
-                ns, rev, pref));
-
+                qname));
         augmentations.addAll(base.getAvailableAugmentations());
 
     }
@@ -111,7 +107,7 @@ public final class NotificationBuilder extends AbstractDocumentedDataNodeContain
     }
 
     private static final class NotificationDefinitionImpl extends AbstractDocumentedDataNodeContainer implements
-            NotificationDefinition {
+    NotificationDefinition {
         private final QName qname;
         private final SchemaPath path;
         private ImmutableSet<AugmentationSchema> augmentations;
index cc734408e1e71531526ad6f92d3b77b202b3e498..c986712e907bada90e7caae9cd60491ef20618b8 100644 (file)
@@ -6,13 +6,12 @@
  */
 package org.opendaylight.yangtools.yang.parser.builder.util;
 
-import java.net.URI;
-import java.util.Date;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
+
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
@@ -55,19 +54,15 @@ public abstract class AbstractDocumentedDataNodeContainerBuilder extends Abstrac
         super(moduleName, line);
         this.qname = qname;
 
-        URI ns = qname.getNamespace();
-        Date rev = qname.getRevision();
-        String pref = qname.getPrefix();
-
         // We do copy of child nodes with namespace change
         // FIXME: Copy should be part of builder API so impl we prevent
         // cyclic dependencies and each builder carries its own semantic for copy.
-        addedChildNodes.addAll(BuilderUtils.wrapChildNodes(moduleName, line, base.getChildNodes(), path, ns, rev, pref));
-        addedGroupings.addAll(BuilderUtils.wrapGroupings(moduleName, line, base.getGroupings(), path, ns, rev, pref));
-        addedTypedefs.addAll(BuilderUtils.wrapTypedefs(moduleName, line, base, path, ns, rev, pref));
+        addedChildNodes.addAll(BuilderUtils.wrapChildNodes(moduleName, line, base.getChildNodes(), path, qname));
+        addedGroupings.addAll(BuilderUtils.wrapGroupings(moduleName, line, base.getGroupings(), path, qname));
+        addedTypedefs.addAll(BuilderUtils.wrapTypedefs(moduleName, line, base, path, qname));
         // FIXME: unkownSchemaNodes should be available in DataNodeContainer
-//        addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path, ns,
-//                rev, pref));
+        // addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName,
+        // line, base.getUnknownSchemaNodes(), path, qname));
         usesNodes.addAll(base.getUses());
     }
 
index 44f5dcb0554d7ebc09ceb3a0a9d34c09388fcbdf..aefd0ba1b93525ec19b20d0da6918eeeda1ba2c0 100644 (file)
@@ -33,7 +33,6 @@ import com.google.common.io.ByteSource;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -1346,49 +1345,44 @@ public final class YangParserImpl implements YangContextParser {
         DataNodeContainerBuilder parent = usesNode.getParent();
         ModuleBuilder module = BuilderUtils.getParentModule(parent);
         SchemaPath parentPath;
-        URI ns;
-        Date rev;
-        String pref;
+
+        final QName parentQName;
         if (parent instanceof AugmentationSchemaBuilder || parent instanceof ModuleBuilder) {
-            ns = module.getNamespace();
-            rev = module.getRevision();
-            pref = module.getPrefix();
+            parentQName = QName.create(module.getQNameModule(), module.getPrefix(), "dummy");
             if (parent instanceof AugmentationSchemaBuilder) {
                 parentPath = ((AugmentationSchemaBuilder) parent).getTargetNodeSchemaPath();
             } else {
                 parentPath = parent.getPath();
             }
         } else {
-            ns = parent.getQName().getNamespace();
-            rev = parent.getQName().getRevision();
-            pref = parent.getQName().getPrefix();
+            parentQName = parent.getQName();
             parentPath = parent.getPath();
         }
 
         GroupingDefinition gd = usesNode.getGroupingDefinition();
 
         Set<DataSchemaNodeBuilder> childNodes = wrapChildNodes(module.getModuleName(), line, gd.getChildNodes(),
-                parentPath, ns, rev, pref);
+                parentPath, parentQName);
         parent.getChildNodeBuilders().addAll(childNodes);
         for (DataSchemaNodeBuilder childNode : childNodes) {
             setNodeAddedByUses(childNode);
         }
 
-        Set<TypeDefinitionBuilder> typedefs = wrapTypedefs(module.getModuleName(), line, gd, parentPath, ns, rev, pref);
+        Set<TypeDefinitionBuilder> typedefs = wrapTypedefs(module.getModuleName(), line, gd, parentPath, parentQName);
         parent.getTypeDefinitionBuilders().addAll(typedefs);
         for (TypeDefinitionBuilder typedef : typedefs) {
             setNodeAddedByUses(typedef);
         }
 
         Set<GroupingBuilder> groupings = wrapGroupings(module.getModuleName(), line, usesNode.getGroupingDefinition()
-                .getGroupings(), parentPath, ns, rev, pref);
+                .getGroupings(), parentPath, parentQName);
         parent.getGroupingBuilders().addAll(groupings);
         for (GroupingBuilder gb : groupings) {
             setNodeAddedByUses(gb);
         }
 
         List<UnknownSchemaNodeBuilderImpl> unknownNodes = wrapUnknownNodes(module.getModuleName(), line,
-                gd.getUnknownSchemaNodes(), parentPath, ns, rev, pref);
+                gd.getUnknownSchemaNodes(), parentPath, parentQName);
         parent.getUnknownNodes().addAll(unknownNodes);
         for (UnknownSchemaNodeBuilder un : unknownNodes) {
             un.setAddedByUses(true);