private Interceptor wrapByScope(Interceptor interceptor, InterceptorScope scope, ExecutionPolicy policy) {
        if (interceptor instanceof AroundInterceptor) {
            return new ScopedInterceptor((AroundInterceptor) interceptor, scope, policy);
        } else if (interceptor instanceof StaticAroundInterceptor) {
            return new ScopedStaticAroundInterceptor((StaticAroundInterceptor) interceptor, scope, policy);
        } else if (interceptor instanceof AroundInterceptor5) {
            return new ScopedInterceptor5((AroundInterceptor5) interceptor, scope, policy);
        } else if (interceptor instanceof AroundInterceptor4) {
            return new ScopedInterceptor4((AroundInterceptor4) interceptor, scope, policy);
        } else if (interceptor instanceof AroundInterceptor3) {
            return new ScopedInterceptor3((AroundInterceptor3) interceptor, scope, policy);
        } else if (interceptor instanceof AroundInterceptor2) {
            return new ScopedInterceptor2((AroundInterceptor2) interceptor, scope, policy);
        } else if (interceptor instanceof AroundInterceptor1) {
            return new ScopedInterceptor1((AroundInterceptor1) interceptor, scope, policy);
        } else if (interceptor instanceof AroundInterceptor0) {
            return new ScopedInterceptor0((AroundInterceptor0) interceptor, scope, policy);
        } else if (interceptor instanceof ApiIdAwareAroundInterceptor) {
            return new ScopedApiIdAwareAroundInterceptor((ApiIdAwareAroundInterceptor) interceptor, scope, policy);
        } else if (interceptor instanceof BlockAroundInterceptor) {
            return new ScopedBlockInterceptor((BlockAroundInterceptor) interceptor, scope, policy);
        } else if (interceptor instanceof BlockStaticAroundInterceptor) {
            return new ScopedBlockStaticAroundInterceptor((BlockStaticAroundInterceptor) interceptor, scope, policy);
        } else if (interceptor instanceof BlockAroundInterceptor5) {
            return new ScopedBlockInterceptor5((BlockAroundInterceptor5) interceptor, scope, policy);
        } else if (interceptor instanceof BlockAroundInterceptor4) {
            return new ScopedBlockInterceptor4((BlockAroundInterceptor4) interceptor, scope, policy);
        } else if (interceptor instanceof BlockAroundInterceptor3) {
            return new ScopedBlockInterceptor3((BlockAroundInterceptor3) interceptor, scope, policy);
        } else if (interceptor instanceof BlockAroundInterceptor2) {
            return new ScopedBlockInterceptor2((BlockAroundInterceptor2) interceptor, scope, policy);
        } else if (interceptor instanceof BlockAroundInterceptor1) {
            return new ScopedBlockInterceptor1((BlockAroundInterceptor1) interceptor, scope, policy);
        } else if (interceptor instanceof BlockAroundInterceptor0) {
            return new ScopedBlockInterceptor0((BlockAroundInterceptor0) interceptor, scope, policy);
        } else if (interceptor instanceof BlockApiIdAwareAroundInterceptor) {
            return new ScopedBlockApiIdAwareAroundInterceptor((BlockApiIdAwareAroundInterceptor) interceptor, scope, policy);
        }

        throw new IllegalArgumentException("Unexpected interceptor type: " + interceptor.getClass());
    }
@author Jongho Moon
@author jaehong.kim
agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/interceptor/factory/AnnotatedInterceptorFactory.java