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;
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