package jetbrains.mps.ide.actions; /*Generated by MPS */ import jetbrains.mps.workbench.action.BaseAction; import javax.swing.Icon; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnActionEvent; import java.util.Map; import org.jetbrains.annotations.NotNull; import com.intellij.openapi.project.Project; import com.intellij.openapi.actionSystem.CommonDataKeys; import jetbrains.mps.internal.collections.runtime.MapSequence; import jetbrains.mps.project.MPSProject; import jetbrains.mps.openapi.editor.cells.EditorCell; import jetbrains.mps.ide.editor.MPSEditorDataKeys; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.openapi.editor.Editor; import jetbrains.mps.ide.hierarchy.HierarchyViewTool; import jetbrains.mps.nodeEditor.cells.APICellAdapter; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.ide.editor.tabs.TabbedEditor; public class ShowConceptInHierarchy_Action extends BaseAction { private static final Icon ICON = AllIcons.Toolwindows.ToolWindowHierarchy; public ShowConceptInHierarchy_Action() { super("Show Concept in Hierarchy", "", ICON); this.setIsAlwaysVisible(false); this.setExecuteOutsideCommand(false); } @Override public boolean isDumbAware() { return true; } @Override public boolean isApplicable(AnActionEvent event, final Map<String, Object> _params) { return (ShowConceptInHierarchy_Action.this.getConceptNode(_params) != null); } @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; } { Project p = event.getData(CommonDataKeys.PROJECT); MapSequence.fromMap(_params).put("ideaProject", p); if (p == null) { return false; } } { MPSProject p = event.getData(MPSCommonDataKeys.MPS_PROJECT); MapSequence.fromMap(_params).put("mpsProject", p); if (p == null) { return false; } } { EditorCell p = event.getData(MPSEditorDataKeys.EDITOR_CELL); MapSequence.fromMap(_params).put("editorCell", p); if (p == null) { return false; } } { SNode node = event.getData(MPSCommonDataKeys.NODE); MapSequence.fromMap(_params).put("node", node); if (node == null) { return false; } } { Editor p = event.getData(MPSEditorDataKeys.MPS_EDITOR); MapSequence.fromMap(_params).put("editor", p); if (p == null) { return false; } } return true; } @Override public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) { HierarchyViewTool tool = ((Project) MapSequence.fromMap(_params).get("ideaProject")).getComponent(HierarchyViewTool.class); tool.showItemInHierarchy(ShowConceptInHierarchy_Action.this.getConceptNode(_params)); tool.openToolLater(true); } private SNode getConceptNode(final Map<String, Object> _params) { SNode refNode = APICellAdapter.getSNodeWRTReference(((EditorCell) MapSequence.fromMap(_params).get("editorCell"))); if (SNodeOperations.isInstanceOf(refNode, MetaAdapterFactory.getConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0x1103553c5ffL, "jetbrains.mps.lang.structure.structure.AbstractConceptDeclaration"))) { return SNodeOperations.cast(refNode, MetaAdapterFactory.getConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0x1103553c5ffL, "jetbrains.mps.lang.structure.structure.AbstractConceptDeclaration")); } if (SNodeOperations.isInstanceOf(refNode, MetaAdapterFactory.getConcept(0xaf65afd8f0dd4942L, 0x87d963a55f2a9db1L, 0x11d43471eedL, "jetbrains.mps.lang.behavior.structure.ConceptConstructorDeclaration"))) { SNode concept = SNodeOperations.getNodeAncestor(refNode, MetaAdapterFactory.getConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0x1103553c5ffL, "jetbrains.mps.lang.structure.structure.AbstractConceptDeclaration"), false, false); if (concept != null) { return concept; } } SNode outerConcept = SNodeOperations.getNodeAncestor(((SNode) MapSequence.fromMap(_params).get("node")), MetaAdapterFactory.getConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0x1103553c5ffL, "jetbrains.mps.lang.structure.structure.AbstractConceptDeclaration"), true, false); if (outerConcept != null) { return outerConcept; } if (!(((Editor) MapSequence.fromMap(_params).get("editor")) instanceof TabbedEditor)) { return null; } TabbedEditor tabbedEditor = (TabbedEditor) ((Editor) MapSequence.fromMap(_params).get("editor")); SNode editedNode = tabbedEditor.getCurrentlyEditedNode().resolve(((MPSProject) MapSequence.fromMap(_params).get("mpsProject")).getRepository()); if (!(SNodeOperations.isInstanceOf(editedNode, MetaAdapterFactory.getConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0x1103553c5ffL, "jetbrains.mps.lang.structure.structure.AbstractConceptDeclaration")))) { return null; } return SNodeOperations.cast(editedNode, MetaAdapterFactory.getConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0x1103553c5ffL, "jetbrains.mps.lang.structure.structure.AbstractConceptDeclaration")); } }