package jetbrains.mps.editor.runtime.impl.cellActions; /*Generated by MPS */ import jetbrains.mps.editor.runtime.cells.AbstractCellAction; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.openapi.editor.EditorContext; import jetbrains.mps.nodeEditor.selection.NodeRangeSelection; public class CommentMultipleNodesAction extends AbstractCellAction { @NotNull private final Iterable<SNode> myNodes; private final boolean myNeedToCommentOut; private final boolean myCanExecute; public CommentMultipleNodesAction(@NotNull Iterable<SNode> nodes) { myNodes = nodes; if (Sequence.fromIterable(myNodes).isEmpty()) { myNeedToCommentOut = false; myCanExecute = false; return; } myNeedToCommentOut = !(SNodeOperations.isInstanceOf(Sequence.fromIterable(myNodes).first(), MetaAdapterFactory.getConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x3dcc194340c24debL, "jetbrains.mps.lang.core.structure.BaseCommentAttribute"))); for (SNode node : Sequence.fromIterable(myNodes)) { if (SNodeOperations.isInstanceOf(node, MetaAdapterFactory.getConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x3dcc194340c24debL, "jetbrains.mps.lang.core.structure.BaseCommentAttribute")) && myNeedToCommentOut || !(SNodeOperations.isInstanceOf(node, MetaAdapterFactory.getConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x3dcc194340c24debL, "jetbrains.mps.lang.core.structure.BaseCommentAttribute"))) && !(myNeedToCommentOut)) { myCanExecute = false; return; } } myCanExecute = true; } @Override public boolean canExecute(EditorContext context) { return myCanExecute; } public void execute(EditorContext context) { SNode firstNodeToSelect = null; SNode lastNodeToSelect = null; int counter = 0; for (SNode node : Sequence.fromIterable(myNodes)) { if (myNeedToCommentOut) { SNode commentedNode = CommentUtil.commentOut(node); if (counter == 0) { firstNodeToSelect = commentedNode; } if (counter == Sequence.fromIterable(myNodes).count() - 1) { lastNodeToSelect = commentedNode; } } else { assert SNodeOperations.isInstanceOf(node, MetaAdapterFactory.getConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x3dcc194340c24debL, "jetbrains.mps.lang.core.structure.BaseCommentAttribute")); SNode uncommentedNode = CommentUtil.uncomment(SNodeOperations.cast(node, MetaAdapterFactory.getConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x3dcc194340c24debL, "jetbrains.mps.lang.core.structure.BaseCommentAttribute"))); if (counter == 0) { firstNodeToSelect = uncommentedNode; } if (counter == Sequence.fromIterable(myNodes).count() - 1) { lastNodeToSelect = uncommentedNode; } } ++counter; } assert firstNodeToSelect != null; assert lastNodeToSelect != null; context.flushEvents(); context.getSelectionManager().setSelection(new NodeRangeSelection(context.getEditorComponent(), firstNodeToSelect, lastNodeToSelect)); } }