From: Robert Varga Date: Tue, 20 Apr 2021 12:45:27 +0000 (+0200) Subject: Optimize SchemaOrderedNormalizedNodeWriter a bit X-Git-Tag: v7.0.0~38 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=d0c08aef991a6bd32b14e3233d5a187571b61f8c;p=yangtools.git Optimize SchemaOrderedNormalizedNodeWriter a bit We have a wee bit of duplicate code here, which can be improved and made static. Change-Id: I357b4909f7c9b3997b4a38e9d38f01d41a94a217 Signed-off-by: Robert Varga --- diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/SchemaOrderedNormalizedNodeWriter.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/SchemaOrderedNormalizedNodeWriter.java index 43a51e19ef..3c1d0f4dd3 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/SchemaOrderedNormalizedNodeWriter.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/SchemaOrderedNormalizedNodeWriter.java @@ -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 nodes, final SchemaNode dataSchemaNode) throws IOException { + private void write(final Collection 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 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 qNameToNodes = ArrayListMultimap.create(); + // Augmentations cannot be gotten with node.getChild so create our own structure with augmentations resolved + final Multimap 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 resolveAugmentations(final AugmentationNode child) { - final ArrayListMultimap 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 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 {