Do not retain java.lang.reflect.Method in ValueNodeCodecContext
[mdsal.git] / binding / mdsal-binding-dom-codec / src / main / java / org / opendaylight / mdsal / binding / dom / codec / impl / DataObjectCodecContext.java
index 92f76510c003af53c66a631720d809d1b2319f47..55e13f1c52f2dcfc9ff6c08817a832759c5efebe 100644 (file)
@@ -111,8 +111,8 @@ public abstract class DataObjectCodecContext<D extends DataObject, T extends Dat
         super(prototype);
 
         final Class<D> bindingClass = getBindingClass();
-        this.leafChild = factory().getLeafNodes(bindingClass, getSchema());
 
+        final Map<Method, ValueNodeCodecContext> tmpLeaves = factory().getLeafNodes(bindingClass, getSchema());
         final Map<Class<?>, Method> clsToMethod = BindingReflections.getChildrenClassToMethod(bindingClass);
 
         final Map<YangInstanceIdentifier.PathArgument, NodeContextSupplier> byYangBuilder = new HashMap<>();
@@ -121,10 +121,15 @@ public abstract class DataObjectCodecContext<D extends DataObject, T extends Dat
         final Map<Class<?>, DataContainerCodecPrototype<?>> byBindingArgClassBuilder = new HashMap<>();
 
         // Adds leaves to mapping
-        for (final ValueNodeCodecContext leaf : leafChild.values()) {
-            tmpMethodToSupplier.put(leaf.getGetter(), leaf);
+        final Builder<String, ValueNodeCodecContext> leafChildBuilder =
+                ImmutableMap.builderWithExpectedSize(tmpLeaves.size());
+        for (final Entry<Method, ValueNodeCodecContext> entry : tmpLeaves.entrySet()) {
+            final ValueNodeCodecContext leaf = entry.getValue();
+            tmpMethodToSupplier.put(entry.getKey(), leaf);
+            leafChildBuilder.put(leaf.getSchema().getQName().getLocalName(), leaf);
             byYangBuilder.put(leaf.getDomPathArgument(), leaf);
         }
+        this.leafChild = leafChildBuilder.build();
 
         for (final Entry<Class<?>, Method> childDataObj : clsToMethod.entrySet()) {
             final Method method = childDataObj.getValue();