From 810b21789fe259e454dff5ba908190347039fd2a Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 4 May 2020 13:17:34 +0200 Subject: [PATCH] Take advantage of MapNode.size() Checking the size allows us to skip instantiating values, plus we can pass it down to map construction, where a correct strategy can be taken based on the size. JIRA: MDSAL-539 Change-Id: Ib42e290571cf162150b6e94b24df4aca5a9762ff Signed-off-by: Robert Varga --- .../dom/codec/impl/KeyedListNodeCodecContext.java | 9 ++++----- .../binding/dom/codec/impl/ListNodeCodecContext.java | 12 ++++++------ 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/KeyedListNodeCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/KeyedListNodeCodecContext.java index dd44e6896a..5d8445e279 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/KeyedListNodeCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/KeyedListNodeCodecContext.java @@ -17,7 +17,6 @@ import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; import java.lang.invoke.WrongMethodTypeException; import java.lang.reflect.Method; -import java.util.Collection; import java.util.List; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.binding.DataObject; @@ -56,10 +55,10 @@ abstract class KeyedListNodeCodecContext> } @Override - Object fromMap(final MapNode map, final Collection value) { - // FIXME: Could be this lazy transformed map? - final Builder builder = ImmutableMap.builderWithExpectedSize(value.size()); - for (MapEntryNode node : value) { + Object fromMap(final MapNode map, final int size) { + // FIXME: MDSAL-539: Make this a lazily-populated map + final Builder builder = ImmutableMap.builderWithExpectedSize(size); + for (MapEntryNode node : map.getValue()) { final D entry = fromMapEntry(node); builder.put(getKey(entry), entry); } diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ListNodeCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ListNodeCodecContext.java index 1e98817947..2577b615f1 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ListNodeCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ListNodeCodecContext.java @@ -58,15 +58,15 @@ class ListNodeCodecContext extends DataObjectCodecContext< } private Object fromMap(final MapNode map) { - final Collection value = map.getValue(); + final int size; // This should never happen, but we do need to ensure users never see an empty Map - return value.isEmpty() ? null : fromMap(map, value); + return (size = map.size()) == 0 ? null : fromMap(map, size); } - Object fromMap(final MapNode map, final Collection value) { - // FIXME: Could be this lazy transformed list? - final Builder builder = ImmutableList.builderWithExpectedSize(value.size()); - for (MapEntryNode node : value) { + @NonNull Object fromMap(final MapNode map, final int size) { + // FIXME: Make this a lazily-populated list + final Builder builder = ImmutableList.builderWithExpectedSize(size); + for (MapEntryNode node : map.getValue()) { builder.add(createBindingProxy(node)); } return builder.build(); -- 2.36.6