public Optional<? extends MethodExecutionHandle<?, Object>> findFallbackMethod(MethodInvocationContext<Object, Object> context) {
Class<?> declaringType = context.getTarget().getClass();
Optional<? extends MethodExecutionHandle<?, Object>> result = beanContext
.findExecutionHandle(declaringType, Qualifiers.byStereotype(Fallback.class), context.getMethodName(), context.getArgumentTypes());
if (!result.isPresent()) {
Set<Class> allInterfaces = ReflectionUtils.getAllInterfaces(declaringType);
for (Class i : allInterfaces) {
result = beanContext
.findExecutionHandle(i, Qualifiers.byStereotype(Fallback.class), context.getMethodName(), context.getArgumentTypes());
if (result.isPresent()) {
return result;
}
}
}
return result;
}