package jetbrains.mps.migration.component.plugin; /*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.ide.actions.MPSCommonDataKeys; import com.intellij.openapi.project.Project; import com.intellij.openapi.actionSystem.CommonDataKeys; import org.jetbrains.annotations.NotNull; import java.util.List; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.migration.component.util.MigrationsUtil; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.progress.Task; import com.intellij.openapi.progress.ProgressIndicator; import jetbrains.mps.progress.ProgressMonitorAdapter; import jetbrains.mps.internal.collections.runtime.ListSequence; import com.intellij.util.WaitForProgressToShow; import java.util.Set; import org.jetbrains.mps.openapi.language.SLanguage; import jetbrains.mps.smodel.SLanguageHierarchy; import jetbrains.mps.smodel.language.LanguageRegistry; import jetbrains.mps.lang.migration.runtime.base.MigrationScript; import jetbrains.mps.internal.collections.runtime.SetSequence; import jetbrains.mps.internal.collections.runtime.ITranslator2; import java.util.Iterator; import jetbrains.mps.baseLanguage.closures.runtime.YieldingIterator; import jetbrains.mps.lang.migration.runtime.base.MigrationScriptReference; import jetbrains.mps.internal.collections.runtime.IVisitor; public class ExecuteRerunnableMigrations_Action extends BaseAction { private static final Icon ICON = null; public ExecuteRerunnableMigrations_Action() { super("Execute Re-Runnable Migrations", "", ICON); this.setIsAlwaysVisible(false); this.setExecuteOutsideCommand(true); } @Override public boolean isDumbAware() { return false; } @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); if (p == null) { return false; } } { Project p = event.getData(CommonDataKeys.PROJECT); if (p == null) { return false; } } return true; } @Override public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) { final List<SModule>[] modules = new List[1]; event.getData(MPSCommonDataKeys.MPS_PROJECT).getRepository().getModelAccess().runReadAction(new Runnable() { public void run() { modules[0] = Sequence.fromIterable(MigrationsUtil.getMigrateableModulesFromProject(event.getData(MPSCommonDataKeys.MPS_PROJECT))).toListSequence(); } }); ProgressManager.getInstance().run(new Task.Modal(event.getData(CommonDataKeys.PROJECT), "Run Migrations", true) { public void run(@NotNull ProgressIndicator progressIndicator) { ProgressMonitorAdapter progressMonitor = new ProgressMonitorAdapter(progressIndicator); int steps = modules[0].size(); progressMonitor.start("Running...", steps); for (final SModule module : ListSequence.fromList(modules[0])) { progressMonitor.step(module.getModuleName()); WaitForProgressToShow.runOrInvokeAndWaitAboveProgress(new Runnable() { public void run() { event.getData(MPSCommonDataKeys.MPS_PROJECT).getRepository().getModelAccess().executeCommand(new Runnable() { public void run() { Set<SLanguage> languages = new SLanguageHierarchy(LanguageRegistry.getInstance(event.getData(MPSCommonDataKeys.MPS_PROJECT).getRepository()), module.getUsedLanguages()).getExtended(); Iterable<MigrationScript> scripts = SetSequence.fromSet(languages).translate(new ITranslator2<SLanguage, MigrationScript>() { public Iterable<MigrationScript> translate(final SLanguage it) { return new Iterable<MigrationScript>() { public Iterator<MigrationScript> iterator() { return new YieldingIterator<MigrationScript>() { private int __CP__ = 0; protected boolean moveToNext() { __loop__: do { __switch__: switch (this.__CP__) { case -1: assert false : "Internal error"; return false; case 2: this._2_ver = 0; case 3: if (!(_2_ver < it.getLanguageVersion())) { this.__CP__ = 1; break; } this.__CP__ = 4; break; case 5: _2_ver++; this.__CP__ = 3; break; case 8: if (_7_script != null && Sequence.fromIterable(_7_script.requiresData()).isEmpty() && _7_script.isRerunnable()) { this.__CP__ = 9; break; } this.__CP__ = 5; break; case 10: this.__CP__ = 5; this.yield(_7_script); return true; case 0: this.__CP__ = 2; break; case 4: this._7_script = new MigrationScriptReference(it, _2_ver).resolve(true); this.__CP__ = 8; break; case 9: this.__CP__ = 10; break; default: break __loop__; } } while (true); return false; } private int _2_ver; private MigrationScript _7_script; }; } }; } }); Sequence.fromIterable(scripts).visitAll(new IVisitor<MigrationScript>() { public void visit(MigrationScript it) { it.execute(module); } }); } }); } }); progressMonitor.advance(1); if (progressMonitor.isCanceled()) { break; } } } }); } }