class AnnotationProxy<A, PA> {

    // 原始注解
    public A rawAnnotation;

    // 代理后新注解
    public A proxyAnnotation;

    // 向上引用
    protected AnnotationProxy<PA, ?> parent;

    protected abstract Object invocation(MethodInvocation invocation);

    public A newProxy(A annotation) {
        return this.newProxy(annotation, null);
    }

    //创建注解注解代理类
    public A newProxy(A annotation, AnnotationProxy<PA, ?> parent) {<FILL_FUNCTION_BODY>}

    // annotation method invoke
    @SneakyThrows
    public Object invoke(MethodInvocation invocation) {
        return invocation.getMethod().invoke(invocation.getThis());
    }

    public <T extends Annotation, R> boolean matchMethod(MethodInvocation invocation, SFunction<T, R> annoLambda) {
        return invocation.getMethod().getName().equals(LambdaSee.info(annoLambda).getMethod());
    }

}

        this.parent = parent;
        this.rawAnnotation = annotation;
        ProxyFactory proxyFactory = new ProxyFactory(annotation);
        MethodInterceptor interceptor = this::invocation;
        proxyFactory.addAdvice(interceptor);
        this.proxyAnnotation = (A) proxyFactory.getProxy(this.getClass().getClassLoader());
        return this.proxyAnnotation;
    
<no_super_class>