From: Robert Varga Date: Thu, 26 Jun 2014 17:51:28 +0000 (+0200) Subject: BUG-994: improve CopyUtils performance X-Git-Tag: release/helium~413^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=a15d87972954e2d1472898d77dff2faaf793851f;p=yangtools.git BUG-994: improve CopyUtils performance Instead of copying schemapath's components and juggling with them, use the new utility functions to instantiate the paths more efficiently. Change-Id: I86dca53150b46f25de8c5261c17332e9ee5d8533 Signed-off-by: Robert Varga --- diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/CopyUtils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/CopyUtils.java index ce88a3b7f0..3be4389908 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/CopyUtils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/CopyUtils.java @@ -8,17 +8,15 @@ package org.opendaylight.yangtools.yang.parser.builder.impl; import java.util.ArrayList; -import java.util.Collections; -import java.util.List; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder; import org.opendaylight.yangtools.yang.parser.builder.api.Builder; +import org.opendaylight.yangtools.yang.parser.builder.api.ConstraintsBuilder; import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder; import org.opendaylight.yangtools.yang.parser.builder.api.GroupingBuilder; -import org.opendaylight.yangtools.yang.parser.builder.api.ConstraintsBuilder; import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder; import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder; import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder; @@ -437,48 +435,41 @@ public final class CopyUtils { } private static DataBean getdata(final SchemaNodeBuilder old, final Builder newParent, final boolean updateQName) { - List newPath = null; + final SchemaPath newSchemaPath; QName newQName = null; if (newParent instanceof ModuleBuilder) { ModuleBuilder parent = (ModuleBuilder) newParent; if (updateQName) { newQName = new QName(parent.getNamespace(), parent.getRevision(), parent.getPrefix(), old.getQName() .getLocalName()); - newPath = Collections.singletonList(newQName); } else { newQName = old.getQName(); - newPath = Collections.singletonList(newQName); } + newSchemaPath = SchemaPath.create(true, newQName); } else if (newParent instanceof AugmentationSchemaBuilder) { AugmentationSchemaBuilder augment = (AugmentationSchemaBuilder) newParent; ModuleBuilder parent = BuilderUtils.getParentModule(newParent); if (updateQName) { newQName = new QName(parent.getNamespace(), parent.getRevision(), parent.getPrefix(), old.getQName() .getLocalName()); - newPath = new ArrayList<>(augment.getTargetNodeSchemaPath().getPath()); - newPath.add(newQName); } else { newQName = old.getQName(); - newPath = new ArrayList<>(augment.getTargetNodeSchemaPath().getPath()); - newPath.add(newQName); } - + newSchemaPath = augment.getTargetNodeSchemaPath().createChild(newQName); } else if (newParent instanceof SchemaNodeBuilder) { SchemaNodeBuilder parent = (SchemaNodeBuilder) newParent; QName parentQName = parent.getQName(); if (updateQName) { newQName = new QName(parentQName.getNamespace(), parentQName.getRevision(), parentQName.getPrefix(), old.getQName().getLocalName()); - newPath = new ArrayList<>(parent.getPath().getPath()); - newPath.add(newQName); } else { newQName = old.getQName(); - newPath = new ArrayList<>(parent.getPath().getPath()); - newPath.add(newQName); } + newSchemaPath = parent.getPath().createChild(newQName); + } else { + newSchemaPath = SchemaPath.ROOT; } - SchemaPath newSchemaPath = SchemaPath.create(newPath, true); return new DataBean(newQName, newSchemaPath); }