@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (method.getDeclaringClass() == Object.class) {
return method.invoke(this, args);
}
InterceptorMetadata interceptor = getInterceptorMetadata.
with(mockingClass, method, args);
try {
applyValidationsToParams(method, args);
Type adaptedTypeMethod = interceptor
.adaptType(method.getGenericReturnType());
MockeryMetadata mockery = getMockeryMetadata
.fromMethod(mockingClass, method, adaptedTypeMethod, args);
checkSupportType.from(mockingClass, method,
mockery, adaptedTypeMethod);
Object response = mockery.legal();
return interceptor.onLegalMock(response);
} catch (AssertionError e) {
return interceptor.onIllegalMock(e);
}
}