code: @NonNull
      @Override
      public ListenerToken addChangeListener(Executor executor, @NonNull QueryChangeListener listener) {
          if (listener == null) { throw new IllegalArgumentException("listener cannot be null."); }
          return liveQuery().addChangeListener(executor, listener);
      }
docs: Adds a query change listener with the dispatch queue on which changes
  will be posted. If the dispatch queue is not specified, the changes will be
  posted on the main queue.
  
  @param executor The executor object that calls listener. If null, use default executor.
  @param listener The listener to post changes.
  @return An opaque listener token object for removing the listener.