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 java.util.List; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.internal.collections.runtime.MapSequence; import com.intellij.openapi.project.Project; import com.intellij.openapi.actionSystem.CommonDataKeys; import jetbrains.mps.project.MPSProject; import org.jetbrains.annotations.NotNull; import jetbrains.mps.baseLanguage.closures.runtime.Wrappers; import org.jetbrains.mps.openapi.module.SRepository; import com.intellij.openapi.progress.Task; import com.intellij.openapi.progress.ProgressIndicator; import jetbrains.mps.progress.ProgressMonitorAdapter; import com.intellij.util.WaitForProgressToShow; import jetbrains.mps.project.OptimizeImportsHelper; import com.intellij.openapi.application.ApplicationManager; import jetbrains.mps.project.Solution; import jetbrains.mps.smodel.Language; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.ui.Messages; public class OptimizeModuleImports_Action extends BaseAction { private static final Icon ICON = null; public OptimizeModuleImports_Action() { super("Optimize Imports", "", ICON); this.setIsAlwaysVisible(false); 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; } { List<SModule> p = event.getData(MPSCommonDataKeys.MODULES); MapSequence.fromMap(_params).put("modules", p); if (p == null) { return false; } } { Project p = event.getData(CommonDataKeys.PROJECT); MapSequence.fromMap(_params).put("ideaProject", p); if (p == null) { return false; } } { MPSProject p = event.getData(MPSCommonDataKeys.MPS_PROJECT); MapSequence.fromMap(_params).put("project", 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 SRepository repo = ((MPSProject) MapSequence.fromMap(_params).get("project")).getRepository(); final Task.Modal task = new Task.Modal(((Project) MapSequence.fromMap(_params).get("ideaProject")), "Optimizing module imports", true) { public void run(@NotNull ProgressIndicator indicator) { ProgressMonitorAdapter monitor = new ProgressMonitorAdapter(indicator); try { int modulesNumber = ((List<SModule>) MapSequence.fromMap(_params).get("modules")).size(); monitor.start("Optimizing the imports of the " + modulesNumber + " modules", modulesNumber + 1); WaitForProgressToShow.runOrInvokeAndWaitAboveProgress(new Runnable() { public void run() { } }); final OptimizeImportsHelper helper = new OptimizeImportsHelper(repo); for (final SModule module : ((List<SModule>) MapSequence.fromMap(_params).get("modules"))) { monitor.step("Optimizing imports of the " + module); ApplicationManager.getApplication().invokeAndWait(new Runnable() { public void run() { repo.getModelAccess().executeCommand(new Runnable() { public void run() { if (module instanceof Solution) { report.value += helper.optimizeSolutionImports(((Solution) module)); } else if (module instanceof Language) { report.value += helper.optimizeLanguageImports(((Language) module)); } } }); } }, ModalityState.defaultModalityState()); monitor.advance(1); 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()); } }