Optimize SchemaOrderedNormalizedNodeWriter a bit 49/95849/3
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 20 Apr 2021 12:45:27 +0000 (14:45 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 20 Apr 2021 12:52:39 +0000 (14:52 +0200)
We have a wee bit of duplicate code here, which can be improved
and made static.

Change-Id: I357b4909f7c9b3997b4a38e9d38f01d41a94a217
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/SchemaOrderedNormalizedNodeWriter.java

index 43a51e19efb7aa23bab41e9a78ed069ad8c6acc2..3c1d0f4dd3fea9af12d0429cedac64e60530acec 100644 (file)
@@ -11,9 +11,9 @@ import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.Multimap;
 import java.io.IOException;
 import java.util.Collection;
-import java.util.List;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode;
 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
@@ -124,7 +124,7 @@ public class SchemaOrderedNormalizedNodeWriter extends NormalizedNodeWriter {
         throw new IllegalStateException("It wasn't possible to serialize node " + node);
     }
 
-    private void write(final List<NormalizedNode> nodes, final SchemaNode dataSchemaNode) throws IOException {
+    private void write(final Collection<NormalizedNode> nodes, final SchemaNode dataSchemaNode) throws IOException {
         for (final NormalizedNode node : nodes) {
             write(node, dataSchemaNode);
         }
@@ -137,29 +137,25 @@ public class SchemaOrderedNormalizedNodeWriter extends NormalizedNodeWriter {
 
     private boolean writeChildren(final Iterable<? extends NormalizedNode> children, final SchemaNode parentSchemaNode,
             final boolean endParent) throws IOException {
-        //Augmentations cannot be gotten with node.getChild so create our own structure with augmentations resolved
-        final ArrayListMultimap<QName, NormalizedNode> qNameToNodes = ArrayListMultimap.create();
+        // Augmentations cannot be gotten with node.getChild so create our own structure with augmentations resolved
+        final Multimap<QName, NormalizedNode> qnameToNodes = ArrayListMultimap.create();
         for (final NormalizedNode child : children) {
-            if (child instanceof AugmentationNode) {
-                qNameToNodes.putAll(resolveAugmentations((AugmentationNode) child));
-            } else {
-                qNameToNodes.put(child.getNodeType(), child);
-            }
+            putChild(qnameToNodes, child);
         }
 
         if (parentSchemaNode instanceof DataNodeContainer) {
-            if (parentSchemaNode instanceof ListSchemaNode && qNameToNodes.containsKey(parentSchemaNode.getQName())) {
-                write(qNameToNodes.get(parentSchemaNode.getQName()), parentSchemaNode);
+            if (parentSchemaNode instanceof ListSchemaNode && qnameToNodes.containsKey(parentSchemaNode.getQName())) {
+                write(qnameToNodes.get(parentSchemaNode.getQName()), parentSchemaNode);
             } else {
                 for (final DataSchemaNode schemaNode : ((DataNodeContainer) parentSchemaNode).getChildNodes()) {
-                    write(qNameToNodes.get(schemaNode.getQName()), schemaNode);
+                    write(qnameToNodes.get(schemaNode.getQName()), schemaNode);
                 }
             }
         } else if (parentSchemaNode instanceof ChoiceSchemaNode) {
             for (final CaseSchemaNode ccNode : ((ChoiceSchemaNode) parentSchemaNode).getCases()) {
                 for (final DataSchemaNode dsn : ccNode.getChildNodes()) {
-                    if (qNameToNodes.containsKey(dsn.getQName())) {
-                        write(qNameToNodes.get(dsn.getQName()), dsn);
+                    if (qnameToNodes.containsKey(dsn.getQName())) {
+                        write(qnameToNodes.get(dsn.getQName()), dsn);
                     }
                 }
             }
@@ -182,16 +178,14 @@ public class SchemaOrderedNormalizedNodeWriter extends NormalizedNodeWriter {
         throw new IllegalStateException("It wasn't possible to serialize node " + node);
     }
 
-    private ArrayListMultimap<QName, NormalizedNode> resolveAugmentations(final AugmentationNode child) {
-        final ArrayListMultimap<QName, NormalizedNode> resolvedAugs = ArrayListMultimap.create();
-        for (final NormalizedNode node : child.body()) {
-            if (node instanceof AugmentationNode) {
-                resolvedAugs.putAll(resolveAugmentations((AugmentationNode) node));
-            } else {
-                resolvedAugs.put(node.getNodeType(), node);
+    private static void putChild(final Multimap<QName, NormalizedNode> qnameToNodes, final NormalizedNode child) {
+        if (child instanceof AugmentationNode) {
+            for (DataContainerChild grandChild : ((AugmentationNode) child).body()) {
+                putChild(qnameToNodes, grandChild);
             }
+        } else {
+            qnameToNodes.put(child.getNodeType(), child);
         }
-        return resolvedAugs;
     }
 
     private final class SchemaNodeSetter implements AutoCloseable {