From 2b5988887490b942f1c9978f6792f5b93980afb6 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 15 Oct 2018 12:22:09 +0200 Subject: [PATCH] Speed up DataObjectCodecContext instantiation Do not bounce multiple times to bindingClass(), but rather store it in a local variable. Since we are here, also update other callers of bindingClass(). Change-Id: Ia093d5dbdff16f6ec17f96c71895cb292eb12862 Signed-off-by: Robert Varga --- .../binding/dom/codec/impl/DataObjectCodecContext.java | 10 +++++----- .../dom/codec/impl/KeyedListNodeCodecContext.java | 5 +++-- .../mdsal/binding/dom/codec/impl/LazyDataObject.java | 10 ++++++---- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecContext.java index bef0671c68..9dcd713874 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecContext.java @@ -80,9 +80,10 @@ abstract class DataObjectCodecContext prototype) { super(prototype); - this.leafChild = factory().getLeafNodes(getBindingClass(), getSchema()); + final Class bindingClass = getBindingClass(); + this.leafChild = factory().getLeafNodes(bindingClass, getSchema()); - final Map, Method> clsToMethod = BindingReflections.getChildrenClassToMethod(getBindingClass()); + final Map, Method> clsToMethod = BindingReflections.getChildrenClassToMethod(bindingClass); final Map byYangBuilder = new HashMap<>(); final SortedMap byMethodBuilder = new TreeMap<>(METHOD_BY_ALPHABET); @@ -113,15 +114,14 @@ abstract class DataObjectCodecContext proxyClass = Proxy.getProxyClass(getBindingClass().getClassLoader(), getBindingClass(), + final Class proxyClass = Proxy.getProxyClass(bindingClass.getClassLoader(), bindingClass, AugmentationHolder.class); try { proxyConstructor = MethodHandles.publicLookup().findConstructor(proxyClass, CONSTRUCTOR_TYPE) 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 19e63ec8f8..f9d5a9ae48 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 @@ -29,9 +29,10 @@ final class KeyedListNodeCodecContext> ex KeyedListNodeCodecContext(final DataContainerCodecPrototype prototype) { super(prototype); - this.codec = factory().getPathArgumentCodec(getBindingClass(), getSchema()); + final Class bindingClass = getBindingClass(); + this.codec = factory().getPathArgumentCodec(bindingClass, getSchema()); try { - this.keyGetter = getBindingClass().getMethod(BindingMapping.IDENTIFIABLE_KEY_NAME); + this.keyGetter = bindingClass.getMethod(BindingMapping.IDENTIFIABLE_KEY_NAME); } catch (NoSuchMethodException e) { throw new IllegalStateException("Required method not available", e); } diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/LazyDataObject.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/LazyDataObject.java index 4b3b791509..3b97db08a2 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/LazyDataObject.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/LazyDataObject.java @@ -83,7 +83,8 @@ class LazyDataObject implements InvocationHandler, Augment if (other == null) { return false; } - if (!context.getBindingClass().isAssignableFrom(other.getClass())) { + final Class bindingClass = context.getBindingClass(); + if (!bindingClass.isAssignableFrom(other.getClass())) { return false; } try { @@ -103,7 +104,7 @@ class LazyDataObject implements InvocationHandler, Augment } } - if (Augmentable.class.isAssignableFrom(context.getBindingClass())) { + if (Augmentable.class.isAssignableFrom(bindingClass)) { if (!getAugmentationsImpl().equals(getAllAugmentations(other))) { return false; } @@ -211,12 +212,13 @@ class LazyDataObject implements InvocationHandler, Augment } public String bindingToString() { - final ToStringHelper helper = MoreObjects.toStringHelper(context.getBindingClass()).omitNullValues(); + final Class bindingClass = context.getBindingClass(); + final ToStringHelper helper = MoreObjects.toStringHelper(bindingClass).omitNullValues(); for (final Method m : context.getHashCodeAndEqualsMethods()) { helper.add(m.getName(), getBindingData(m)); } - if (Augmentable.class.isAssignableFrom(context.getBindingClass())) { + if (Augmentable.class.isAssignableFrom(bindingClass)) { helper.add("augmentations", getAugmentationsImpl()); } return helper.toString(); -- 2.36.6