code: @Override
      public Object invoke(final Object proxy, final Method method, final Object[] rawArgs) throws
              Throwable {
          // args can be null if the method invoked has no arguments, but Mockito expects a non-null
          Object[] args = rawArgs;
          if (rawArgs == null) {
              args = new Object[0];
          }
  
          if (isEqualsMethod(method)) {
              return proxy == args[0];
          } else if (isHashCodeMethod(method)) {
              return System.identityHashCode(proxy);
          }
  
          return handler.handle(Mockito.framework().getInvocationFactory().createInvocation(proxy,
                  withSettings().build(proxy.getClass().getSuperclass()), method,
                  new RealMethodBehavior() {
                      @Override
                      public Object call() throws Throwable {
                          return ProxyBuilder.callSuper(proxy, method, rawArgs);
                      }
                  }, args));
      }
docs: Intercept a method call. Called <u>before</u> a method is called by the proxied method.
  
  <p>This does the same as {@link #interceptEntryHook(Object, Method, Object[], SuperMethod)}
  but this handles proxied methods. We only proxy abstract methods.
  
  @param proxy proxies object
  @param method method that was called
  @param rawArgs arguments to the method
  
  @return mocked result
  @throws Throwable An exception if thrown