Clean up addYangPathArgument() 87/106487/1
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 14 Jun 2023 20:38:45 +0000 (22:38 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 14 Jun 2023 20:40:18 +0000 (22:40 +0200)
The nullability is confused here. Make sure we separate the two
invocation paths, so that we check builder for non-null as few times as
practicable.

Change-Id: Iceafa279fb3b69ffdaa54d4250ecf370edaa2622
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AugmentationCodecContext.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CaseNodeCodecContext.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/KeyedListNodeCodecContext.java

index a6a1198f6c1fcca6e3de54c7cde8820bf7a712a8..5552daea8ddb36a60522403ce3bf6b8593ad41f1 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.mdsal.binding.dom.codec.impl;
 
 import com.google.common.collect.ImmutableSet;
+import java.util.List;
 import java.util.Map;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingAugmentationCodecTreeNode;
 import org.opendaylight.mdsal.binding.runtime.api.AugmentRuntimeType;
@@ -61,6 +62,11 @@ final class AugmentationCodecContext<D extends DataObject & Augmentation<?>>
         return filterFrom(checkDataArgument(DataContainerNode.class, normalizedNode));
     }
 
+    @Override
+    void addYangPathArgument(final List<PathArgument> builder, final InstanceIdentifier.PathArgument arg) {
+        // No-op
+    }
+
     @Override
     protected NodeIdentifier getDomPathArgument() {
         return null;
index 6d15c2077049ac5a35240168560e87b5684503b1..5377a4ef695913f6bb994baf5a959db57531fa84 100644 (file)
@@ -23,7 +23,7 @@ final class CaseNodeCodecContext<D extends DataObject> extends DataObjectCodecCo
     }
 
     @Override
-    void addYangPathArgument(final PathArgument arg, final List<YangInstanceIdentifier.PathArgument> builder) {
+    void addYangPathArgument(final List<YangInstanceIdentifier.PathArgument> builder, final PathArgument arg) {
         // NOOP
     }
 
index f4c014acf91daa2cf1e908f251f8bff9fa21e059..804bdb10e32e9083ebe078f6ebfa21c907f28f87 100644 (file)
@@ -123,10 +123,8 @@ abstract sealed class DataContainerCodecContext<D extends DataObject, T extends
     @Override
     public DataContainerCodecContext<?, ?> bindingPathArgumentChild(final PathArgument arg,
             final List<YangInstanceIdentifier.PathArgument> builder) {
-        final DataContainerCodecContext<?, ?> child = streamChild(arg.getType());
-        if (builder != null) {
-            child.addYangPathArgument(arg, builder);
-        }
+        final var child = streamChild(arg.getType());
+        child.addYangPathArgument(arg, builder);
         return child;
     }
 
@@ -136,12 +134,16 @@ abstract sealed class DataContainerCodecContext<D extends DataObject, T extends
      * @param arg Binding Path Argument
      * @param builder DOM Path argument.
      */
-    void addYangPathArgument(final PathArgument arg, final List<YangInstanceIdentifier.PathArgument> builder) {
+    final void addYangPathArgument(final PathArgument arg, final List<YangInstanceIdentifier.PathArgument> builder) {
         if (builder != null) {
-            final var yangArg = getDomPathArgument();
-            if (yangArg != null) {
-                builder.add(yangArg);
-            }
+            addYangPathArgument(builder, arg);
+        }
+    }
+
+    void addYangPathArgument(final @NonNull List<YangInstanceIdentifier.PathArgument> builder, final PathArgument arg) {
+        final var yangArg = getDomPathArgument();
+        if (yangArg != null) {
+            builder.add(yangArg);
         }
     }
 
index 2a59ae1548a69f212259f25f6a00388983bc648c..163fb812c840d5fabe710f2ff89530b05a78d636 100644 (file)
@@ -74,22 +74,20 @@ abstract sealed class KeyedListNodeCodecContext<I extends Identifier<D>, D exten
     }
 
     @Override
-    void addYangPathArgument(final InstanceIdentifier.PathArgument arg,
-            final List<YangInstanceIdentifier.PathArgument> builder) {
+    void addYangPathArgument(final List<YangInstanceIdentifier.PathArgument> builder,
+            final InstanceIdentifier.PathArgument arg) {
         /*
          * DOM Instance Identifier for list is always represent by two entries one for map and one for children. This
          * is also true for wildcarded instance identifiers
          */
-        if (builder == null) {
-            return;
-        }
+        final var yangArg = getDomPathArgument();
+        builder.add(yangArg);
 
-        super.addYangPathArgument(arg, builder);
         if (arg instanceof IdentifiableItem<?, ?> identifiable) {
             builder.add(codec.bindingToDom(identifiable));
         } else {
             // Adding wildcarded
-            super.addYangPathArgument(arg, builder);
+            builder.add(yangArg);
         }
     }