@Override
    public boolean isDone() {
      if (super.isDone()) {
        if (!myApplied && !myBatchModeDescriptors.isEmpty()) {
          final ProblemDescriptor representative = myBatchModeDescriptors.get(0);
          LOG.assertTrue(representative.getFixes() != null);
          for (QuickFix<?> fix : representative.getFixes()) {
            if (fix.getClass().isAssignableFrom(myQuickfixClass)) {
              BatchQuickFix batchFix = (BatchQuickFix)fix;
              if (batchFix instanceof ModCommandBatchQuickFix modCommandBatchQuickFix) {
                ThrowableComputable<ModCommand, RuntimeException> actionComputable =
                  () -> ReadAction.nonBlocking(() -> modCommandBatchQuickFix.perform(myProject, myBatchModeDescriptors))
                    .expireWith(myProject)
                    .executeSynchronously();
                ModCommand command = ProgressManager.getInstance().runProcessWithProgressSynchronously(
                  actionComputable, LangBundle.message("apply.fixes"), true, myProject);
                if (command == null) return false;
                ModCommandExecutor.BatchExecutionResult result =
                  ModCommandExecutor.getInstance().executeInBatch(ActionContext.from(representative), command);
                myResultCount.merge(result, 1, Integer::sum);
              } else {
                batchFix.applyFix(myProject,
                                  myBatchModeDescriptors.toArray(ProblemDescriptor.EMPTY_ARRAY),
                                  new ArrayList<>(),
                                  null);
              }
              break;
            }
          }
          myApplied = true;
        }
        return true;
      }
      else {
        return false;
      }
    }
@Override
    public boolean isDone()