package jetbrains.mps.ide.actions; /*Generated by MPS */ import jetbrains.mps.workbench.action.BaseAction; import javax.swing.Icon; import com.intellij.openapi.actionSystem.AnActionEvent; import java.util.Map; import jetbrains.mps.project.MPSProject; import jetbrains.mps.internal.collections.runtime.MapSequence; import com.intellij.openapi.project.Project; import com.intellij.openapi.actionSystem.CommonDataKeys; import org.jetbrains.annotations.NotNull; import jetbrains.mps.baseLanguage.closures.runtime.Wrappers; import com.intellij.openapi.progress.Task; import com.intellij.openapi.progress.ProgressIndicator; import jetbrains.mps.progress.ProgressMonitorAdapter; import com.intellij.util.WaitForProgressToShow; import org.jetbrains.mps.openapi.module.SRepository; import jetbrains.mps.project.OptimizeImportsHelper; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.ui.Messages; public class OptimizeProjectImports_Action extends BaseAction { private static final Icon ICON = null; public OptimizeProjectImports_Action() { super("Optimize Imports", "", ICON); this.setIsAlwaysVisible(true); this.setExecuteOutsideCommand(true); } @Override public boolean isDumbAware() { return true; } @Override protected boolean collectActionData(AnActionEvent event, final Map<String, Object> _params) { if (!(super.collectActionData(event, _params))) { return false; } { MPSProject p = event.getData(MPSCommonDataKeys.MPS_PROJECT); MapSequence.fromMap(_params).put("project", p); if (p == null) { return false; } } { Project p = event.getData(CommonDataKeys.PROJECT); MapSequence.fromMap(_params).put("ideaProject", p); if (p == null) { return false; } } return true; } @Override public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) { final Wrappers._T<String> report = new Wrappers._T<String>(""); final Task.Modal task = new Task.Modal(((Project) MapSequence.fromMap(_params).get("ideaProject")), "Optimizing project imports", true) { public void run(@NotNull ProgressIndicator indicator) { final ProgressMonitorAdapter monitor = new ProgressMonitorAdapter(indicator); try { monitor.start("Optimizing project imports", 2); WaitForProgressToShow.runOrInvokeAndWaitAboveProgress(new Runnable() { public void run() { } }); final SRepository repo = ((MPSProject) MapSequence.fromMap(_params).get("project")).getRepository(); final OptimizeImportsHelper helper = new OptimizeImportsHelper(repo); ApplicationManager.getApplication().invokeAndWait(new Runnable() { public void run() { repo.getModelAccess().executeCommand(new Runnable() { public void run() { report.value += helper.optimizeProjectImports(((MPSProject) MapSequence.fromMap(_params).get("project")), monitor.subTask(1)); } }); } }, ModalityState.defaultModalityState()); if (monitor.isCanceled()) { return; } monitor.step("Saving..."); WaitForProgressToShow.runOrInvokeAndWaitAboveProgress(new Runnable() { public void run() { repo.getModelAccess().executeCommand(new Runnable() { public void run() { repo.saveAll(); } }); } }); monitor.advance(1); } finally { monitor.done(); } } }; ApplicationManager.getApplication().invokeLater(new Runnable() { public void run() { ProgressManager.getInstance().run(task); Messages.showMessageDialog(((Project) MapSequence.fromMap(_params).get("ideaProject")), (report.value.equals("") ? "Nothing to optimize" : report.value), "Optimize Imports", Messages.getInformationIcon()); } }, ModalityState.defaultModalityState()); } }