@Override
protected MethodResolver createResolver(Method method) throws VirtualMethodCreationException {
Class<?> declaringClass = method.getDeclaringClass();
if(declaringClass.equals(FieldProjector.class)) {
// Oh my god ! The dread projector method
return new CallMethodResolver(method) {
@Override
protected Object callMethod(Method method, Object[] invokedArgs) throws Throwable{
return invokeProjectorMethod(method, invokedArgs);
}
};
} else if (declaringClass.equals(FieldInformerAPI.class)) {
return new CallMethodResolver(method) {
@Override
protected Object callMethod(Method method, Object[] invokedArgs) throws Throwable {
return invokeAPIMethod(method, invokedArgs);
}
};
} else if (declaringClass.equals(Validable.class)) {
return new CallMethodResolver(method) {
@Override
protected Object callMethod(Method method, Object[] invokedArgs) {
return invokeValidableMethod(method, invokedArgs);
}
};
} else if (declaringClass.equals(Proxied.class)) {
return new CallMethodResolver(method) {
@Override
protected Object callMethod(Method method, Object[] invokedArgs) {
return invokeProxiedMethod(method, invokedArgs);
}
};
} else if (declaringClass.isAssignableFrom(Informer.class)) {
return new CallMethodResolver(method) {
@Override
protected Object callMethod(Method method, Object[] invokedArgs) {
return invokeInformerMethod(method, invokedArgs);
}
};