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 jetbrains.mps.lang.migration.runtime.base.Problem; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import org.jetbrains.mps.openapi.module.SModule; import org.jetbrains.mps.openapi.module.SRepository; 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.ide.migration.ScriptApplied; import jetbrains.mps.internal.collections.runtime.ITranslator2; 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 java.util.Iterator; import jetbrains.mps.baseLanguage.closures.runtime.YieldingIterator; import jetbrains.mps.lang.migration.runtime.base.MigrationScriptReference; import jetbrains.mps.internal.collections.runtime.ISelector; import jetbrains.mps.internal.collections.runtime.CollectionSequence; import jetbrains.mps.ide.migration.check.MigrationCheckUtil; import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes; import com.intellij.openapi.ui.Messages; import jetbrains.mps.ide.migration.check.MigrationOutputUtil; public class RunPreUpdateCheck_Action extends BaseAction { private static final Icon ICON = null; public RunPreUpdateCheck_Action() { super("Run Pre-Update Check", "", 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<Problem> problems = ListSequence.fromList(new ArrayList<Problem>()); final List<SModule> modules = ListSequence.fromList(new ArrayList<SModule>()); final SRepository repos = event.getData(MPSCommonDataKeys.MPS_PROJECT).getRepository(); repos.getModelAccess().runReadAction(new Runnable() { public void run() { ListSequence.fromList(modules).addSequence(Sequence.fromIterable(MigrationsUtil.getMigrateableModulesFromProject(event.getData(MPSCommonDataKeys.MPS_PROJECT)))); } }); ProgressManager.getInstance().run(new Task.Modal(event.getData(CommonDataKeys.PROJECT), "Pre-Update Check", true) { public void run(@NotNull final ProgressIndicator progressIndicator) { progressIndicator.setIndeterminate(false); repos.getModelAccess().runReadAction(new Runnable() { public void run() { Iterable<ScriptApplied> checks = ListSequence.fromList(modules).translate(new ITranslator2<SModule, ScriptApplied>() { public Iterable<ScriptApplied> translate(final SModule module) { Set<SLanguage> allLanguages = new SLanguageHierarchy(LanguageRegistry.getInstance(module.getRepository()), module.getUsedLanguages()).getExtended(); Iterable<MigrationScript> scripts = SetSequence.fromSet(allLanguages).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) { 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; }; } }; } }); return Sequence.fromIterable(scripts).select(new ISelector<MigrationScript, ScriptApplied>() { public ScriptApplied select(MigrationScript script) { return new ScriptApplied(module, script.getReference()); } }); } }); ListSequence.fromList(problems).addSequence(CollectionSequence.fromCollection(MigrationCheckUtil.getNotMigrated(checks, new _FunctionTypes._void_P1_E0<Double>() { public void invoke(Double d) { progressIndicator.setFraction(d); } }, 1000))); } }); } }); if (ListSequence.fromList(problems).isEmpty()) { Messages.showMessageDialog(event.getData(CommonDataKeys.PROJECT), "No problems found.\nProject can be migrated", "Migration", null); } else { MigrationOutputUtil.showProblems(event.getData(CommonDataKeys.PROJECT), problems); } } }