docs: protected static <P extends AbstractEncoderProxy<T>, T> Object newInstance(
          final ClassLoader loader, final Class<?>[] interfaces,
          final Class<P> proxyType, final Class<T> encoderType, final T encoder) {
  
          if (loader == null) {
              throw new NullPointerException("loader");
          }
  
          if (interfaces == null) {
              throw new NullPointerException("interfaces");
          }
  
          if (proxyType == null) {
              throw new NullPointerException("proxyType");
          }
  
          if (encoderType == null) {
              throw new NullPointerException("encoderType");
          }
  
          if (encoder == null) {
              //throw new NullPointerException("encoder");
          }
  
          try {
              final Constructor<P> constructor =
                  proxyType.getDeclaredConstructor(encoderType);
              if (!constructor.isAccessible()) {
                  constructor.setAccessible(true);
              }
              try {
                  return Proxy.newProxyInstance(
                      loader, interfaces, constructor.newInstance(encoder));
              } catch (final IllegalAccessException iae) {
                  throw new RuntimeException(iae);
              } catch (final InstantiationException ie) {
                  throw new RuntimeException(ie);
              } catch (final InvocationTargetException ite) {
                  throw new RuntimeException(ite);
              }
          } catch (final NoSuchMethodException nsme) {
              throw new RuntimeException(nsme);
          }
      }