@ApiStatus.Experimental
  @RequiresEdt
  static void executeInteractively(@NotNull ActionContext context,
                                   @Nls String title,
                                   @Nullable Editor editor,
                                   @NotNull Supplier<@NotNull ModCommand> commandSupplier) {
    ModCommand command = ProgressManager.getInstance().runProcessWithProgressSynchronously(
      () -> ReadAction.nonBlocking(commandSupplier::get).executeSynchronously(),
      title, true, context.project());
    if (command != null) {
      CommandProcessor commandProcessor = CommandProcessor.getInstance();
      if (commandProcessor.getCurrentCommand() == null) {
        commandProcessor.executeCommand(context.project(), 
                                        () -> getInstance().executeInteractively(context, command, editor), title, null);
      } else {
        getInstance().executeInteractively(context, command, editor);
      }
    }
  }
@ApiStatus.Experimental
  @RequiresEdt
  static void executeInteractively(@NotNull ActionContext context,
                                   @Nls String title,
                                   @Nullable Editor editor,
                                   @NotNull Supplier<@NotNull ModCommand> commandSupplier)