private void launch() {
    LOG.debug("launch");
    if (disposed.get() || launched.getAndSet(true)) return;
    RefreshSession session;
    synchronized (files) {
      if (this.session != null || files.isEmpty()) return;
      ModalityState state = producer.produce();
      LOG.debug("modality state ", state);
      session = RefreshQueue.getInstance().createSession(true, recursive, this::finish, state);
      session.addAllFiles(files);
      this.session = session;
    }
    scheduled.set(false);
    launched.set(false);
    LOG.debug("launched at ", System.currentTimeMillis());
    session.launch();
  }
private void launch()