private static void cleanupQueueForModal(@NotNull final Object modalEntity) {
   synchronized (LOCK) {
     for (Iterator<RunnableInfo> iterator = ourQueue.iterator(); iterator.hasNext(); ) {
       RunnableInfo runnableInfo = iterator.next();
       if (runnableInfo.modalityState instanceof ModalityStateEx) {
         ModalityStateEx stateEx = (ModalityStateEx) runnableInfo.modalityState;
         if (stateEx.contains(modalEntity)) {
           ourForcedFlushQueue.add(runnableInfo);
           iterator.remove();
         }
       }
     }
   }
 }
  @NotNull
  static ModalityStateEx modalityStateForWindow(@NotNull Window window) {
    int index = ourModalEntities.indexOf(window);
    if (index < 0) {
      Window owner = window.getOwner();
      if (owner == null) {
        return (ModalityStateEx) ApplicationManager.getApplication().getNoneModalityState();
      }
      ModalityStateEx ownerState = modalityStateForWindow(owner);
      if (window instanceof Dialog && ((Dialog) window).isModal()) {
        return ownerState.appendEntity(window);
      }
      return ownerState;
    }

    List<Object> result = new ArrayList<Object>();
    for (Object entity : ourModalEntities) {
      if (entity instanceof Window
          || entity instanceof ProgressIndicator && ((ProgressIndicator) entity).isModal()) {
        result.add(entity);
      }
    }
    return new ModalityStateEx(result.toArray());
  }