docs: @Nonnull
    public ListenerRegistration addSnapshotListener(
        @Nonnull Executor executor, @Nonnull final EventListener<DocumentSnapshot> listener) {
      return Watch.forDocument(this)
          .runWatch(
              executor,
              new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(
                    @Nullable QuerySnapshot value, @Nullable FirestoreException error) {
                  if (value == null) {
                    listener.onEvent(null, error);
                    return;
                  }
  
                  for (DocumentSnapshot doc : value) {
                    if (doc.getReference().equals(DocumentReference.this)) {
                      listener.onEvent(value.getDocuments().get(0), null);
                      return;
                    }
                  }
                  listener.onEvent(
                      DocumentSnapshot.fromMissing(
                          firestore, DocumentReference.this, value.getReadTime()),
                      null);
                }
              });
    }