void fireEvents(@NotNull List<CompoundVFileEvent> events, @NotNull List<AsyncFileListener.ChangeApplier> appliers, boolean asyncProcessing) {
    try {
      var app = ApplicationManagerEx.getApplicationEx();
      if ((myFinishRunnable != null || !events.isEmpty()) && !app.isDisposed()) {
        if (LOG.isDebugEnabled()) LOG.debug("events are about to fire: " + events);
        app.runWriteActionWithNonCancellableProgressInDispatchThread(IdeCoreBundle.message("progress.title.file.system.synchronization"), null, null, indicator -> {
          indicator.setText(IdeCoreBundle.message("progress.text.processing.detected.file.changes", events.size()));
          ((ProgressIndicatorWithDelayedPresentation)indicator).setDelayInMillis(PROGRESS_THRESHOLD_MILLIS);
          var t = System.nanoTime();
          fireEventsInWriteAction(events, appliers, asyncProcessing);
          t = NANOSECONDS.toMillis(System.nanoTime() - t);
          if (t > PROGRESS_THRESHOLD_MILLIS) {
            LOG.warn("Long VFS change processing (" + t + "ms, " + events.size() + " events): " + StringUtil.trimLog(events.toString(), 10_000));
          }
        });
      }
    }
    finally {
      mySemaphore.up();
    }
  }
void fireEvents(@NotNull List<CompoundVFileEvent> events, @NotNull List<AsyncFileListener.ChangeApplier> appliers, boolean asyncProcessing)