private static void checkForUpdateInBackgroundThread(@NotNull Project project) {
    ApplicationManager.getApplication().assertIsNonDispatchThread();
    Pair<String, String> newVersionAvailable = getVersionUpdate();
    if (newVersionAvailable == null) return;

    String currentVersion = newVersionAvailable.first;
    String newVersion = newVersionAvailable.second;

    Notification notification = NOTIFICATION_GROUP.createNotification(
      message("sh.shell.script"),
      message("sh.fmt.update.question", currentVersion, newVersion),
      NotificationType.INFORMATION);
    notification.setSuggestionType(true);
    notification.setDisplayId(ShNotificationDisplayIds.UPDATE_FORMATTER);
    notification.addAction(
      NotificationAction.createSimple(messagePointer("sh.update"), () -> {
        notification.expire();
        download(project,
                 () -> NOTIFICATION_GROUP.createNotification(message("sh.shell.script"), message("sh.fmt.success.update"),
                                                             NotificationType.INFORMATION)
                   .setDisplayId(ShNotificationDisplayIds.UPDATE_FORMATTER_SUCCESS).notify(project),
                 () -> NOTIFICATION_GROUP.createNotification(message("sh.shell.script"), message("sh.fmt.cannot.update"),
                                                             NotificationType.ERROR)
                   .setDisplayId(ShNotificationDisplayIds.UPDATE_FORMATTER_ERROR).notify(project),
                 true);
      }));
    notification.addAction(NotificationAction.createSimple(messagePointer("sh.skip.version"), () -> {
      notification.expire();
      ShSettings.setSkippedShfmtVersion(SHFMT_VERSION);
    }));
    notification.notify(project);
  }
private static void checkForUpdateInBackgroundThread(@NotNull Project project)