package jetbrains.mps.lang.migration.actions.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 org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.internal.collections.runtime.MapSequence; import jetbrains.mps.smodel.Language; import jetbrains.mps.smodel.adapter.ids.SLanguageId; import jetbrains.mps.smodel.adapter.ids.MetaIdByDeclaration; import org.jetbrains.mps.openapi.language.SLanguage; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SModuleOperations; import java.util.List; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SModelOperations; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.lang.migration.behavior.IMigrationUnit__BehaviorDescriptor; import jetbrains.mps.internal.collections.runtime.ISelector; import org.jetbrains.annotations.NotNull; import jetbrains.mps.ide.actions.MPSCommonDataKeys; import com.intellij.openapi.project.Project; import com.intellij.openapi.actionSystem.CommonDataKeys; import jetbrains.mps.project.MPSProject; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.ui.InputValidator; import com.intellij.openapi.ui.Messages; public class CorrectLanguageVersion_Action extends BaseAction { private static final Icon ICON = null; public CorrectLanguageVersion_Action() { super("Correct Language Version", "", ICON); this.setIsAlwaysVisible(false); this.setExecuteOutsideCommand(false); } @Override public boolean isDumbAware() { return true; } @Override public boolean isApplicable(AnActionEvent event, final Map<String, Object> _params) { if (!(((SModule) MapSequence.fromMap(_params).get("module")) instanceof Language)) { return false; } Language lang = ((Language) ((SModule) MapSequence.fromMap(_params).get("module"))); SLanguageId langId = MetaIdByDeclaration.getLanguageId(lang); SLanguage slang = MetaAdapterFactory.getLanguage(langId, lang.getModuleName()); SModel mig = SModuleOperations.getAspect(lang, "migration"); if (mig == null) { return slang.getLanguageVersion() != 0; } List<SNode> migrations = SModelOperations.roots(((SModel) mig), MetaAdapterFactory.getInterfaceConcept(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x47bb811da2acc4d6L, "jetbrains.mps.lang.migration.structure.IMigrationUnit")); if (lang.getLanguageVersion() == 0) { return false; } if (ListSequence.fromList(migrations).isEmpty() && lang.getLanguageVersion() != 0) { return true; } int maxFrom = (int) IMigrationUnit__BehaviorDescriptor.fromVersion_id4uVwhQyFcnl.invoke(ListSequence.fromList(migrations).sort(new ISelector<SNode, Integer>() { public Integer select(SNode it) { return (int) IMigrationUnit__BehaviorDescriptor.fromVersion_id4uVwhQyFcnl.invoke(it); } }, false).first()); if (lang.getModuleDescriptor().getLanguageVersions().containsKey(slang)) { if (lang.getModuleDescriptor().getLanguageVersions().get(slang) != lang.getLanguageVersion()) { return true; } } return lang.getLanguageVersion() != maxFrom + 1; } @Override public void doUpdate(@NotNull AnActionEvent event, final Map<String, Object> _params) { this.setEnabledState(event.getPresentation(), this.isApplicable(event, _params)); } @Override protected boolean collectActionData(AnActionEvent event, final Map<String, Object> _params) { if (!(super.collectActionData(event, _params))) { return false; } { SModule p = event.getData(MPSCommonDataKeys.MODULE); MapSequence.fromMap(_params).put("module", p); if (p == null) { return false; } } { Project p = event.getData(CommonDataKeys.PROJECT); MapSequence.fromMap(_params).put("project", p); if (p == null) { return false; } } { MPSProject p = event.getData(MPSCommonDataKeys.MPS_PROJECT); MapSequence.fromMap(_params).put("mpsProject", p); if (p == null) { return false; } } return true; } @Override public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) { final Language lang = ((Language) ((SModule) MapSequence.fromMap(_params).get("module"))); SModel mig = SModuleOperations.getAspect(lang, "migration"); List<SNode> scripts = check_wnyb8b_a0c0a(((SModel) mig)); if (ListSequence.fromList(scripts).isNotEmpty()) { int maxFrom = (int) IMigrationUnit__BehaviorDescriptor.fromVersion_id4uVwhQyFcnl.invoke(ListSequence.fromList(scripts).sort(new ISelector<SNode, Integer>() { public Integer select(SNode it) { return (int) IMigrationUnit__BehaviorDescriptor.fromVersion_id4uVwhQyFcnl.invoke(it); } }, false).first()); lang.setLanguageVersion(maxFrom + 1); } else { final int v = lang.getLanguageVersion(); ApplicationManager.getApplication().invokeLater(new Runnable() { public void run() { InputValidator validator = new InputValidator() { public boolean checkInput(String s) { try { return Integer.parseInt(s) >= 0; } catch (NumberFormatException e) { return false; } } public boolean canClose(String s) { return checkInput(s); } }; final String result = Messages.showInputDialog(((Project) MapSequence.fromMap(_params).get("project")), "No scripts found\n" + "Current language version is " + v + "\n" + "Please enter new version", "Set Language Version", null, "0", validator); if (result == null) { return; } ((MPSProject) MapSequence.fromMap(_params).get("mpsProject")).getRepository().getModelAccess().executeCommand(new Runnable() { public void run() { lang.setLanguageVersion(Integer.parseInt(result)); } }); } }); } } private static List<SNode> check_wnyb8b_a0c0a(SModel checkedDotOperand) { if (null != checkedDotOperand) { return SModelOperations.roots(checkedDotOperand, MetaAdapterFactory.getInterfaceConcept(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x47bb811da2acc4d6L, "jetbrains.mps.lang.migration.structure.IMigrationUnit")); } return null; } }