docs: public void addControllerListener(ControllerListener<? super INFO> controllerListener) {
      Preconditions.checkNotNull(controllerListener);
      if (mControllerListener instanceof InternalForwardingListener) {
        ((InternalForwardingListener<INFO>) mControllerListener).addListener(controllerListener);
        return;
      }
      if (mControllerListener != null) {
        mControllerListener = InternalForwardingListener.createInternal(
            mControllerListener,
            controllerListener);
        return;
      }
      // Listener only receives <INFO>, it never produces one.
      // That means if it can accept <? super INFO>, it can very well accept <INFO>.
      mControllerListener = (ControllerListener<INFO>) controllerListener;
    }