智能工厂.apk(点击下载) / AInterceptorHandler.java


package com.baidu.tts.aop;

import com.baidu.tts.chainofresponsibility.logger.LoggerProxy;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;

public abstract class AInterceptorHandler implements IInterceptorHandler {
    public static final Object DEFAULT = 0;
    public static final Object END = 1;
    protected List<IInterceptor> a;
    protected Object b;
    protected List<String> c = new ArrayList();

    @Override // com.baidu.tts.aop.IInterceptorHandler
    public Object bind(Object obj, List<IInterceptor> list) {
        this.b = obj;
        this.a = list;
        Class<?> cls = this.b.getClass();
        Object newProxyInstance = Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), this);
        LoggerProxy.d("AInterceptorHandler", "proxy=" + newProxyInstance);
        return newProxyInstance;
    }

    @Override // java.lang.reflect.InvocationHandler
    public Object invoke(Object obj, Method method, Object[] objArr) throws Throwable {
        if (!canIntercept(method.getName())) {
            return method.invoke(this.b, objArr);
        }
        if (a(this.b, method, objArr).equals(END)) {
            return null;
        }
        Object invoke = method.invoke(this.b, objArr);
        Object a2 = a(this.b, method, objArr, invoke);
        LoggerProxy.d("AInterceptorHandler", "afterResult=" + a2);
        return invoke;
    }

    @Override // com.baidu.tts.aop.IInterceptorHandler
    public void registerMethod(String str) {
        if (str != null) {
            this.c.add(str);
        }
    }

    @Override // com.baidu.tts.aop.IInterceptorHandler
    public void unregisterMethod(String str) {
        if (str != null) {
            this.c.remove(str);
        }
    }

    @Override // com.baidu.tts.aop.IInterceptorHandler
    public boolean canIntercept(String str) {
        return this.c.contains(str);
    }

    /* access modifiers changed from: protected */
    public Object a(Object obj, Method method, Object[] objArr) {
        Object obj2 = DEFAULT;
        int size = this.a.size();
        for (int i = 0; i < size; i++) {
            obj2 = this.a.get(i).before(obj, method, objArr);
            if (obj2.equals(END)) {
                return obj2;
            }
        }
        return obj2;
    }

    /* access modifiers changed from: protected */
    public Object a(Object obj, Method method, Object[] objArr, Object obj2) {
        Object obj3 = DEFAULT;
        for (int size = this.a.size() - 1; size >= 0; size--) {
            obj3 = this.a.get(size).after(obj, method, objArr, obj2);
        }
        return obj3;
    }
}