code: @NonNull
      public ListenerToken addDocumentChangeListener(
          @NonNull String id,
          Executor executor,
          @NonNull DocumentChangeListener listener) {
          if (id == null) { throw new IllegalArgumentException("id cannot be null."); }
          if (listener == null) { throw new IllegalArgumentException("listener cannot be null."); }
  
          synchronized (lock) {
              mustBeOpen();
              return addDocumentChangeListener(executor, listener, id);
          }
      }
docs: Add the given DocumentChangeListener to the specified document with an executor on which
  the changes will be posted to the listener.