package com.nominanuda.zen.obj.wrap;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* Created by azum on 29/04/17.
*/
public class EnhancedInvocationHandler implements InvocationHandler {
private final Object mOriginalProxy, mEnhancementProxy;
private final Class<?> mEnhancement;
EnhancedInvocationHandler(Object enhancementProxy, Class<?> originalRole, Object originalProxy) throws Exception {
mOriginalProxy = originalProxy;
mEnhancementProxy = enhancementProxy;
mEnhancement = enhancementProxy.getClass();
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
try {
Method m = mEnhancement.getMethod(method.getName(), method.getParameterTypes());
return m.invoke(mEnhancementProxy, args);
} catch (NoSuchMethodException e) {
return method.invoke(mOriginalProxy, args);
}
}
}