Speed up DataObjectCodecContext instantiation 88/76988/3
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 15 Oct 2018 10:22:09 +0000 (12:22 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 15 Oct 2018 10:52:53 +0000 (12:52 +0200)
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 <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecContext.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/KeyedListNodeCodecContext.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/LazyDataObject.java

index bef0671c68dacc1b6326f0ac66823e2fddbb6b8d..9dcd71387447c76f8cbd7a95568e96ae353f9a6e 100644 (file)
@@ -80,9 +80,10 @@ abstract class DataObjectCodecContext<D extends DataObject, T extends DataNodeCo
     DataObjectCodecContext(final DataContainerCodecPrototype<T> prototype) {
         super(prototype);
 
-        this.leafChild = factory().getLeafNodes(getBindingClass(), getSchema());
+        final Class<D> bindingClass = getBindingClass();
+        this.leafChild = factory().getLeafNodes(bindingClass, getSchema());
 
-        final Map<Class<?>, Method> clsToMethod = BindingReflections.getChildrenClassToMethod(getBindingClass());
+        final Map<Class<?>, Method> clsToMethod = BindingReflections.getChildrenClassToMethod(bindingClass);
 
         final Map<YangInstanceIdentifier.PathArgument, NodeContextSupplier> byYangBuilder = new HashMap<>();
         final SortedMap<Method, NodeContextSupplier> byMethodBuilder = new TreeMap<>(METHOD_BY_ALPHABET);
@@ -113,15 +114,14 @@ abstract class DataObjectCodecContext<D extends DataObject, T extends DataNodeCo
         byBindingArgClassBuilder.putAll(byStreamClass);
         this.byBindingArgClass = ImmutableMap.copyOf(byBindingArgClassBuilder);
 
-
-        if (Augmentable.class.isAssignableFrom(getBindingClass())) {
+        if (Augmentable.class.isAssignableFrom(bindingClass)) {
             this.possibleAugmentations = factory().getRuntimeContext().getAvailableAugmentationTypes(getSchema());
         } else {
             this.possibleAugmentations = ImmutableMap.of();
         }
         reloadAllAugmentations();
 
-        final Class<?> proxyClass = Proxy.getProxyClass(getBindingClass().getClassLoader(), getBindingClass(),
+        final Class<?> proxyClass = Proxy.getProxyClass(bindingClass.getClassLoader(), bindingClass,
             AugmentationHolder.class);
         try {
             proxyConstructor = MethodHandles.publicLookup().findConstructor(proxyClass, CONSTRUCTOR_TYPE)
index 19e63ec8f83da1c586f925882da0c1b0b9da8164..f9d5a9ae4836f3bee4164dee7989b9318a578cdb 100644 (file)
@@ -29,9 +29,10 @@ final class KeyedListNodeCodecContext<D extends DataObject & Identifiable<?>> ex
     KeyedListNodeCodecContext(final DataContainerCodecPrototype<ListSchemaNode> prototype) {
         super(prototype);
 
-        this.codec = factory().getPathArgumentCodec(getBindingClass(), getSchema());
+        final Class<D> 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);
         }
index 4b3b791509bc3e68befacd14fc34c666a86b46e0..3b97db08a2e7f25dda072cbe9720359cafc1f925 100644 (file)
@@ -83,7 +83,8 @@ class LazyDataObject<D extends DataObject> implements InvocationHandler, Augment
         if (other == null) {
             return false;
         }
-        if (!context.getBindingClass().isAssignableFrom(other.getClass())) {
+        final Class<D> bindingClass = context.getBindingClass();
+        if (!bindingClass.isAssignableFrom(other.getClass())) {
             return false;
         }
         try {
@@ -103,7 +104,7 @@ class LazyDataObject<D extends DataObject> 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<D extends DataObject> implements InvocationHandler, Augment
     }
 
     public String bindingToString() {
-        final ToStringHelper helper = MoreObjects.toStringHelper(context.getBindingClass()).omitNullValues();
+        final Class<D> 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();