code: protected Object unwrapSurrogate(final Method method,
                                       final Object[] args) throws Throwable {
  
          Object result = method.invoke(this.delegate, args);
  
          return (result == this.delegate) ? this.surrogate
                                           : result;
      }
docs: Surrogate for the delegate's unwrap(...) method. <p>
  
  If invocation of the method returns the delegate itself, then
  the delegate's surrogate is returned instead.
  
  @param method the unwrap method
  @param args the argument(s) to the unwrap method
  @throws java.lang.Throwable the exception, if any, thrown by invoking
  the given method with the given arguments upon the delegate
  @return proxy if the method returns the delegate itself; else the actual
  result of invoking the method upon the delegate.