@Override
        public byte[] doInTransform(Instrumentor instrumentor, ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws InstrumentException {
            InstrumentClass target = instrumentor.getInstrumentClass(loader, className, classfileBuffer);

            target.addField(AsyncContextAccessor.class);

            InstrumentMethod get = target.getDeclaredMethod("get");
            if (get != null) {
                get.addInterceptor(BasicFutureMethodInterceptor.class);
            }

            InstrumentMethod get2 = target.getDeclaredMethod("get", "long", "java.util.concurrent.TimeUnit");
            if (get2 != null) {
                get2.addInterceptor(BasicFutureMethodInterceptor.class);
            }

            InstrumentMethod completed = target.getDeclaredMethod("completed", "java.lang.Object");
            if (completed != null) {
                completed.addInterceptor(BasicFutureMethodInterceptor.class);
            }

            InstrumentMethod failed = target.getDeclaredMethod("failed", "java.lang.Exception");
            if (failed != null) {
                failed.addInterceptor(BasicFutureFailedMethodInterceptor.class);

            }

            InstrumentMethod cancel = target.getDeclaredMethod("cancel", "boolean");
            if (cancel != null) {
                cancel.addInterceptor(BasicFutureMethodInterceptor.class);
            }

            return target.toBytecode();
        }
@author netspider
@author emeroad
@author minwoo.jung
@author jaehong.kim
agent-module/plugins/httpclient4/src/main/java/com/navercorp/pinpoint/plugin/httpclient4/HttpClient4Plugin.java