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);
}
}
}