From 4a0b9b0a117d39d5954a03c03f3c3caa370d5631 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 2 Jul 2014 18:42:18 +0200 Subject: [PATCH] BUG-1275: optimize AugmentationSchemaProxy for lookup speed This patch uses ImmutableMap to bias the map from creation speed to lookup performance. Also, in the lookup path we perform a single lookup, and check the null result, instead of contains() followed by a lookup. Change-Id: Iba50dc5fae7ef87da79072be4936690587f46018 Signed-off-by: Robert Varga --- .../base/AugmentationSchemaProxy.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/base/AugmentationSchemaProxy.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/base/AugmentationSchemaProxy.java index be9a1fb86f..a766a28d6b 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/base/AugmentationSchemaProxy.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/base/AugmentationSchemaProxy.java @@ -7,6 +7,11 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema.transform.base; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; + +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -22,9 +27,6 @@ import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.UsesNode; -import com.google.common.base.Optional; -import com.google.common.collect.Maps; - /** * Proxy for AugmentationSchema. Child node schemas are replaced with actual schemas from parent. */ @@ -37,10 +39,12 @@ public final class AugmentationSchemaProxy implements AugmentationSchema { this.delegate = augmentSchema; this.realChildSchemas = realChildSchemas; - this.mappedChildSchemas = Maps.newHashMap(); + final Map m = new HashMap<>(realChildSchemas.size()); for (DataSchemaNode realChildSchema : realChildSchemas) { - mappedChildSchemas.put(realChildSchema.getQName(), realChildSchema); + m.put(realChildSchema.getQName(), realChildSchema); } + + this.mappedChildSchemas = ImmutableMap.copyOf(m); } @Override @@ -90,11 +94,9 @@ public final class AugmentationSchemaProxy implements AugmentationSchema { @Override public DataSchemaNode getDataChildByName(final QName name) { - if(mappedChildSchemas.containsKey(name)) { - return mappedChildSchemas.get(name); - } - - throw new IllegalArgumentException("Unknown child: " + name + " in: " + delegate); + final DataSchemaNode ret = mappedChildSchemas.get(name); + Preconditions.checkArgument(ret != null, "Unknown child: %s in: %s", name, delegate); + return ret; } @Override -- 2.36.6