void (@NotNull ProgressIndicator indicator) { String[] command; try { if (myTestPatch != null) { command = UpdateInstaller.preparePatchCommand(List.of(myTestPatch), indicator); } else { @SuppressWarnings("DataFlowIssue") var files = UpdateInstaller.downloadPatchChain(myLoadedResult.getPatches().getChain(), indicator); command = UpdateInstaller.preparePatchCommand(files, indicator); } } catch (ProcessCanceledException e) { throw e; } catch (Exception e) { Logger.getInstance(UpdateInfoDialog.class).warn(e); var title = IdeBundle.message("updates.notification.title", ApplicationNamesInfo.getInstance().getFullProductName()); var downloadUrl = UpdateInfoPanel.downloadUrl(myLoadedResult.getNewBuild(), myLoadedResult.getUpdatedChannel()); var message = IdeBundle.message("update.downloading.patch.error", e.getMessage()); UpdateChecker.getNotificationGroupForIdeUpdateResults() .createNotification(title, message, NotificationType.ERROR) .addAction(NotificationAction.createSimpleExpiring(IdeBundle.message("update.downloading.patch.open"), () -> BrowserUtil.browse(downloadUrl))) .setDisplayId("ide.patch.download.failed") .notify(myProject); return; } if (!ContainerUtil.isEmpty(myUpdatedPlugins)) { UpdateInstaller.installPluginUpdates(myUpdatedPlugins, indicator); } if (ApplicationManager.getApplication().isRestartCapable()) { if (indicator.isShowing()) { restartLaterAndRunCommand(command); } else { var title = IdeBundle.message("updates.notification.title", ApplicationNamesInfo.getInstance().getFullProductName()); var message = IdeBundle.message("update.ready.message"); UpdateChecker.getNotificationGroupForIdeUpdateResults() .createNotification(title, message, NotificationType.INFORMATION) .addAction(NotificationAction.createSimpleExpiring(IdeBundle.message("update.ready.restart"), () -> restartLaterAndRunCommand(command))) .setDisplayId("ide.update.suggest.restart") .notify(myProject); } } else { showPatchInstructions(command); } }