@Override public void actionPerformed(final AnActionEvent e) { final PsiFile psiFile = LangDataKeys.PSI_FILE.getData(e.getDataContext()); if (!(psiFile instanceof DartFile)) { return; } final VirtualFile virtualFile = DartResolveUtil.getRealVirtualFile(psiFile); if (virtualFile == null) { return; } final DartSettings settings = DartSettingsUtil.getSettings(); final VirtualFile dart2js = settings.getDart2JS(); if (dart2js == null) { Messages.showOkCancelDialog( e.getProject(), DartBundle.message("dart.sdk.bad.dart2js.path", settings.getDart2JSUrl()), DartBundle.message("dart.warning"), icons.DartIcons.Dart_16); return; } final String jsFilePath = virtualFile.getPath() + ".js"; final Dart2JSSettingsDialog dialog = new Dart2JSSettingsDialog(psiFile.getProject(), jsFilePath); dialog.show(); if (!dialog.isOK()) { return; } new Task.Backgroundable(psiFile.getProject(), "dart2js", true) { public void run(@NotNull ProgressIndicator indicator) { indicator.setText("Running dart2js..."); indicator.setFraction(0.0); final GeneralCommandLine command = new GeneralCommandLine(); command.setExePath(dart2js.getPath()); if (dialog.isCheckedMode()) { command.addParameter("--checked"); } if (dialog.isMinify()) { command.addParameter("--minify"); } command.addParameter("--out=" + dialog.getOutputPath()); command.addParameter(virtualFile.getPath()); // save on disk ApplicationManager.getApplication() .invokeAndWait( new Runnable() { @Override public void run() { FileDocumentManager.getInstance().saveAllDocuments(); } }, ModalityState.defaultModalityState()); try { final String output = ScriptRunnerUtil.getProcessOutput(command); ProgressManager.progress(""); LOG.debug(output); boolean error = !output.isEmpty(); if (error) { Notifications.Bus.notify( new Notification( e.getPresentation().getText(), DartBundle.message("dart2js.title"), DartBundle.message("dart2js.js.file.creation.error", output), NotificationType.ERROR)); return; } Notifications.Bus.notify( new Notification( e.getPresentation().getText(), DartBundle.message("dart2js.title"), DartBundle.message("dart2js.js.file.created", jsFilePath), NotificationType.INFORMATION)); final String parentDir = VfsUtil.getParentDir(dialog.getOutputPath()); assert parentDir != null; final VirtualFile outputParentVirtualFile = VirtualFileManager.getInstance().findFileByUrl(VfsUtilCore.pathToUrl(parentDir)); if (outputParentVirtualFile != null) { outputParentVirtualFile.refresh(true, false); } } catch (ExecutionException ex) { LOG.error(ex); Notifications.Bus.notify( new Notification( e.getPresentation().getText(), DartBundle.message("dart2js.title"), DartBundle.message("dart2js.js.file.creation.error", ex.getMessage()), NotificationType.ERROR)); } indicator.setFraction(1.0); } }.setCancelText("Stop").queue(); }