class RetryInterceptor implements Interceptor {
    AppContext appContext;

    public RetryInterceptor(AppContext aopContext) {
        this.appContext = aopContext;
    }

    @Override
    public Object doIntercept(Invocation inv) throws Throwable {<FILL_FUNCTION_BODY>}
}

        Retry anno = inv.getMethodAnnotation(Retry.class);

        if (anno != null) {
            Callee callee = new CalleeImpl(inv);
            Recover recover = appContext.getBeanOrNew(anno.recover());

            return RetryableTask.of(callee)
                    .maxRetryCount(anno.maxAttempts())
                    .interval(anno.interval())
                    .unit(anno.unit())
                    .recover(recover)
                    .retryForIncludes(anno.value())
                    .retryForIncludes(anno.include())
                    .retryForExcludes(anno.exclude())
                    .execute()
                    .get();
        } else {
            return inv.invoke();
        }
    
<no_super_class>