@Override
  public @Nullable ModCommandWithContext chooseFileAndPerform(@NotNull PsiFile hostFile,
                                                              @Nullable Editor hostEditor,
                                                              @NotNull ModCommandAction commandAction,
                                                              int fixOffset) {
    Project project = hostFile.getProject();
    ThrowableComputable<ModCommandWithContext, RuntimeException> computable =
      () -> ReadAction.nonBlocking(() -> {
          ActionContext context = chooseContextForAction(hostFile, hostEditor, commandAction, fixOffset);
          if (context == null) {
            return new ModCommandWithContext(ActionContext.from(null, hostFile), ModCommand.nop());
          }
          return new ModCommandWithContext(context, commandAction.perform(context));
        })
        .expireWhen(() -> project.isDisposed())
        .executeSynchronously();
    //noinspection DialogTitleCapitalization
    return ProgressManager.getInstance().
      runProcessWithProgressSynchronously(computable, commandAction.getFamilyName(), true, project);
  }
@Override
  public @Nullable ModCommandWithContext chooseFileAndPerform(@NotNull PsiFile hostFile,
                                                              @Nullable Editor hostEditor,
                                                              @NotNull ModCommandAction commandAction,
                                                              int fixOffset)