Make RPC implementations return ListenableFuture
[mdsal.git] / binding / yang-binding / src / main / java / org / opendaylight / yangtools / yang / binding / util / RpcMethodInvoker.java
index 69f4e6f4aea67b05c4448e22139d8d24b1d108d6..2b0e451153a418ffbb82a5ec9405d739eca87541 100644 (file)
@@ -8,11 +8,11 @@
 package org.opendaylight.yangtools.yang.binding.util;
 
 import com.google.common.base.Optional;
+import com.google.common.util.concurrent.ListenableFuture;
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.MethodHandles.Lookup;
 import java.lang.reflect.Method;
-import java.util.concurrent.Future;
 import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.RpcService;
@@ -22,18 +22,20 @@ abstract class RpcMethodInvoker {
 
     private static final Lookup LOOKUP = MethodHandles.publicLookup();
 
-    protected abstract Future<RpcResult<?>> invokeOn(RpcService impl, DataObject input);
+    abstract ListenableFuture<RpcResult<?>> invokeOn(RpcService impl, DataObject input);
 
     protected static RpcMethodInvoker from(final Method method) {
-        Optional<Class<? extends DataContainer>> input = BindingReflections.resolveRpcInputClass(method);
+        final MethodHandle methodHandle;
         try {
-            MethodHandle methodHandle = LOOKUP.unreflect(method);
-            if (input.isPresent()) {
-                return new RpcMethodInvokerWithInput(methodHandle);
-            }
-            return new RpcMethodInvokerWithoutInput(methodHandle);
+            methodHandle = LOOKUP.unreflect(method);
         } catch (IllegalAccessException e) {
             throw new IllegalStateException("Lookup on public method failed.",e);
         }
+
+        final Optional<Class<? extends DataContainer>> input = BindingReflections.resolveRpcInputClass(method);
+        if (input.isPresent()) {
+            return new RpcMethodInvokerWithInput(methodHandle);
+        }
+        return new RpcMethodInvokerWithoutInput(methodHandle);
     }
 }
\ No newline at end of file