void (final InvalidSdkException e, @Nullable final Runnable restartAction) { NotificationListener notificationListener; String notificationMessage; if (e.getCause() instanceof VagrantNotStartedException) { notificationListener = (notification, event) -> { final PythonRemoteInterpreterManager manager = PythonRemoteInterpreterManager.getInstance(); if (manager != null) { try { VagrantNotStartedException cause = (VagrantNotStartedException)e.getCause(); manager.runVagrant(cause.getVagrantFolder(), cause.getMachineName()); } catch (ExecutionException e1) { throw new RuntimeException(e1); } } if (restartAction != null) { restartAction.run(); } }; notificationMessage = new HtmlBuilder() .append(e.getMessage()) .appendLink("#", PyBundle.message("python.vagrant.refresh.skeletons")) .toString(); } else if (ExceptionUtil.causedBy(e, ExceptionFix.class)) { final ExceptionFix fix = ExceptionUtil.findCause(e, ExceptionFix.class); notificationListener = (notification, event) -> { fix.apply(); if (restartAction != null) { restartAction.run(); } }; notificationMessage = fix.getNotificationMessage(e.getMessage()); } else { notificationListener = null; notificationMessage = e.getMessage(); } Notification notification = new Notification("Python SDK Updater", PyBundle.message("sdk.gen.failed.notification.title"), notificationMessage, NotificationType.WARNING); if (notificationListener != null) notification.setListener(notificationListener); notification.notify(null); }