package jetbrains.mps.ide.modelchecker.actions; /*Generated by MPS */ import jetbrains.mps.workbench.action.BaseAction; import javax.swing.Icon; import jetbrains.mps.icons.MPSIcons; import org.jetbrains.annotations.NotNull; import com.intellij.openapi.actionSystem.AnActionEvent; import java.util.Map; import java.util.List; import org.jetbrains.mps.openapi.model.SModel; import java.util.ArrayList; import jetbrains.mps.internal.collections.runtime.MapSequence; import jetbrains.mps.ide.actions.MPSCommonDataKeys; import com.intellij.openapi.project.Project; import com.intellij.openapi.actionSystem.CommonDataKeys; import jetbrains.mps.smodel.SModelStereotype; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.ide.modelchecker.platform.actions.ModelCheckerTool; public class CheckModel_Action extends BaseAction { private static final Icon ICON = MPSIcons.General.ModelChecker; public CheckModel_Action() { super("Check Model", "Check model for unresolved references and typesystem rules", ICON); this.setIsAlwaysVisible(false); this.setExecuteOutsideCommand(true); this.addPlace(null); } @Override public boolean isDumbAware() { return true; } @Override public void doUpdate(@NotNull AnActionEvent event, final Map<String, Object> _params) { List<SModel> modelsToCheck = new ArrayList<SModel>(); if (((List<SModel>) MapSequence.fromMap(_params).get("models")) != null) { modelsToCheck.addAll(((List<SModel>) MapSequence.fromMap(_params).get("models"))); } if (((SModel) MapSequence.fromMap(_params).get("model")) != null && !(modelsToCheck.contains(((SModel) MapSequence.fromMap(_params).get("model"))))) { modelsToCheck.add(((SModel) MapSequence.fromMap(_params).get("model"))); } String whatToCheck = "Model"; if (modelsToCheck.size() > 1) { whatToCheck = modelsToCheck.size() + " Models"; } event.getPresentation().setText("Check " + whatToCheck); event.getPresentation().setEnabled(!(modelsToCheck.isEmpty())); } @Override protected boolean collectActionData(AnActionEvent event, final Map<String, Object> _params) { if (!(super.collectActionData(event, _params))) { return false; } { SModel p = event.getData(MPSCommonDataKeys.CONTEXT_MODEL); MapSequence.fromMap(_params).put("model", p); } { List<SModel> p = event.getData(MPSCommonDataKeys.MODELS); MapSequence.fromMap(_params).put("models", p); } { Project p = event.getData(CommonDataKeys.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) { // check all models in model List<SModel> modelsToCheck = new ArrayList<SModel>(); if (((List<SModel>) MapSequence.fromMap(_params).get("models")) != null) { modelsToCheck.addAll(((List<SModel>) MapSequence.fromMap(_params).get("models"))); } if (((SModel) MapSequence.fromMap(_params).get("model")) != null && !(modelsToCheck.contains(((SModel) MapSequence.fromMap(_params).get("model"))))) { modelsToCheck.add(((SModel) MapSequence.fromMap(_params).get("model"))); } if (modelsToCheck.isEmpty()) { return; } for (SModel model : modelsToCheck.toArray(new SModel[modelsToCheck.size()])) { String name = model.getName().getLongName(); boolean isStub = SModelStereotype.isStubModel(model); for (SModel innerModel : Sequence.fromIterable(model.getModule().getModels())) { if (innerModel.getName().getLongName().startsWith(name + ".")) { if (isStub == SModelStereotype.isStubModel(innerModel)) { modelsToCheck.add(innerModel); } } } } ModelCheckerTool.getInstance(((Project) MapSequence.fromMap(_params).get("project"))).checkModelsAndShowResult(modelsToCheck); } }