protected void fireEventsInWriteAction() {
    final VirtualFileManagerEx manager = (VirtualFileManagerEx) VirtualFileManager.getInstance();

    manager.fireBeforeRefreshStart(myIsAsync);
    try {
      while (!myWorkQueue.isEmpty() || !myEvents.isEmpty()) {
        ManagingFS.getInstance().processEvents(mergeEventsAndReset());
        scan();
      }
    } finally {
      try {
        manager.fireAfterRefreshFinish(myIsAsync);
      } finally {
        if (myFinishRunnable != null) {
          myFinishRunnable.run();
        }
      }
    }
  }