Tighten AbstractDOMRpcImplementationAdapter.serialize() 69/103369/2
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 24 Nov 2022 21:28:12 +0000 (22:28 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 24 Nov 2022 23:24:06 +0000 (00:24 +0100)
Require non-null arguments and make sure to return RpcInput, as that
what we need. Allows us to tighten up the legacy method handle as well.

JIRA: MDSAL-86
Change-Id: I76b6bc5707babcd2d71c1349672daf750999c998
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AbstractDOMRpcImplementationAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMRpcImplementationAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/CurrentAdapterSerializer.java

index 7ba4a03eeefe5ed849eb1beeb02a67a557512a0d..2778a0bca0d609223904318262366e703d151dd9 100644 (file)
@@ -18,7 +18,7 @@ import org.opendaylight.mdsal.binding.dom.codec.api.BindingLazyContainerNode;
 import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier;
 import org.opendaylight.mdsal.dom.api.DOMRpcImplementation;
 import org.opendaylight.mdsal.dom.api.DOMRpcResult;
-import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.RpcInput;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
@@ -49,10 +49,10 @@ abstract sealed class AbstractDOMRpcImplementationAdapter implements DOMRpcImple
     abstract @NonNull ListenableFuture<RpcResult<?>> invokeRpc(@NonNull CurrentAdapterSerializer serializer,
         @NonNull DOMRpcIdentifier rpc, @NonNull ContainerNode input);
 
-    final @NonNull DataObject deserialize(final @NonNull CurrentAdapterSerializer serializer,
+    final @NonNull RpcInput deserialize(final @NonNull CurrentAdapterSerializer serializer,
             final @NonNull QName rpcName, final @NonNull ContainerNode input) {
         if (ENABLE_CODEC_SHORTCUT && input instanceof BindingLazyContainerNode<?> lazy) {
-            return lazy.getDataObject();
+            return (RpcInput) lazy.getDataObject();
         }
 
         // TODO: this is a bit inefficient: typically we get the same CurrentAdapterSerializer and the path is also
@@ -64,6 +64,6 @@ abstract sealed class AbstractDOMRpcImplementationAdapter implements DOMRpcImple
         //       constant, hence we should be able to cache this lookup and just have the appropriate
         //       BindingDataObjectCodecTreeNode and reuse it directly
         // FIXME: should be a guaranteed return, as innput is @NonNull
-        return verifyNotNull(serializer.fromNormalizedNodeRpcData(Absolute.of(rpcName, inputName), input));
+        return verifyNotNull((RpcInput) serializer.fromNormalizedNodeRpcData(Absolute.of(rpcName, inputName), input));
     }
 }
index a24ebdfdf06958383018d6d2694c46a3d0af146a..29df8615f59f40fb368096baee19b647d4cc4671 100644 (file)
@@ -13,7 +13,6 @@ import com.google.common.util.concurrent.ListenableFuture;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier;
 import org.opendaylight.yangtools.yang.binding.Rpc;
-import org.opendaylight.yangtools.yang.binding.RpcInput;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.YangConstants;
@@ -31,9 +30,9 @@ final class BindingDOMRpcImplementationAdapter extends AbstractDOMRpcImplementat
     }
 
     @Override
+    @SuppressWarnings({ "unchecked", "rawtypes" })
     ListenableFuture<RpcResult<?>> invokeRpc(final CurrentAdapterSerializer serializer, final DOMRpcIdentifier rpc,
             final ContainerNode input) {
-        final var bindingInput = input != null ? deserialize(serializer, rpcName, input) : null;
-        return ((Rpc) delegate).invoke((RpcInput) bindingInput);
+        return ((Rpc) delegate).invoke(deserialize(serializer, rpcName, input));
     }
 }
index 6fe5c99b4cd36d877d35aa5b0c183c4c120b00ec..ac9277cb1b395316bcff786b3906d7cbdd40e74b 100644 (file)
@@ -44,6 +44,7 @@ import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.RpcInput;
 import org.opendaylight.yangtools.yang.binding.RpcService;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
@@ -62,8 +63,9 @@ import org.slf4j.LoggerFactory;
 @VisibleForTesting
 public final class CurrentAdapterSerializer extends ForwardingBindingDOMCodecServices {
     private static final Logger LOG = LoggerFactory.getLogger(CurrentAdapterSerializer.class);
+    @Deprecated
     private static final MethodType RPC_SERVICE_METHOD_SIGNATURE = MethodType.methodType(ListenableFuture.class,
-        RpcService.class, DataObject.class);
+        RpcService.class, RpcInput.class);
 
     private final LoadingCache<InstanceIdentifier<?>, YangInstanceIdentifier> cache = CacheBuilder.newBuilder()
             .softValues().build(new CacheLoader<InstanceIdentifier<?>, YangInstanceIdentifier>() {