package jetbrains.mps.console.tool; /*Generated by MPS */ import com.intellij.openapi.ui.SimpleToolWindowPanel; import com.intellij.openapi.Disposable; import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.project.MPSProject; import com.intellij.openapi.fileEditor.FileEditor; import jetbrains.mps.nodeEditor.UIEditorComponent; import jetbrains.mps.nodeEditor.Highlighter; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.annotations.Nullable; import org.jdom.Element; import jetbrains.mps.project.Project; import jetbrains.mps.nodeEditor.EditorComponent; import org.jetbrains.annotations.NonNls; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.ide.PasteProvider; import jetbrains.mps.nodeEditor.commands.CommandContextImpl; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.openapi.editor.extensions.EditorExtensionUtil; import jetbrains.mps.smodel.tempmodel.TemporaryModels; import jetbrains.mps.smodel.tempmodel.TempModuleOptions; import org.apache.log4j.Level; import jetbrains.mps.smodel.undo.DefaultCommand; import com.intellij.openapi.actionSystem.DefaultActionGroup; import com.intellij.openapi.actionSystem.ActionToolbar; import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.actionSystem.ActionPlaces; import com.intellij.openapi.util.Disposer; import jetbrains.mps.ide.ThreadUtils; import com.intellij.openapi.wm.IdeFocusManager; import org.jetbrains.mps.openapi.language.SLanguage; import java.util.Collection; import jetbrains.mps.smodel.SLanguageHierarchy; import jetbrains.mps.smodel.language.LanguageRegistry; import java.util.Collections; import jetbrains.mps.smodel.SModelInternal; import jetbrains.mps.internal.collections.runtime.CollectionSequence; import org.jetbrains.mps.openapi.module.SModuleReference; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.smodel.Language; import jetbrains.mps.project.AbstractModule; import org.jetbrains.mps.openapi.persistence.PersistenceFacade; import jetbrains.mps.smodel.ModelImports; import jetbrains.mps.smodel.ModelDependencyScanner; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import org.jetbrains.mps.openapi.language.SAbstractConcept; import java.util.HashSet; import jetbrains.mps.internal.collections.runtime.SetSequence; import org.jetbrains.mps.openapi.model.SModelReference; import jetbrains.mps.smodel.SModelOperations; import jetbrains.mps.workbench.action.BaseAction; import com.intellij.openapi.actionSystem.CustomShortcutSet; import javax.swing.KeyStroke; import java.awt.event.KeyEvent; import com.intellij.openapi.actionSystem.MouseShortcut; import java.awt.event.MouseEvent; import com.intellij.openapi.actionSystem.ShortcutSet; import org.jetbrains.annotations.NotNull; import com.intellij.openapi.actionSystem.AnActionEvent; import java.util.Map; import jetbrains.mps.workbench.MPSDataKeys; import javax.swing.SwingUtilities; import jetbrains.mps.openapi.editor.cells.EditorCell; import jetbrains.mps.workbench.action.ActionUtils; import com.intellij.openapi.actionSystem.DataContext; import org.jetbrains.mps.openapi.model.SNodeReference; import java.awt.datatransfer.Transferable; import com.intellij.ide.CopyPasteManagerEx; import jetbrains.mps.ide.datatransfer.SModelDataFlavor; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SConceptOperations; import jetbrains.mps.nodeEditor.datatransfer.NodePaster; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import jetbrains.mps.editor.runtime.selection.SelectionUtil; import jetbrains.mps.openapi.editor.selection.SelectionManager; import jetbrains.mps.baseLanguage.closures.runtime.Wrappers; import jetbrains.mps.persistence.PersistenceUtil; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import jetbrains.mps.internal.collections.runtime.IVisitor; import org.jetbrains.mps.openapi.module.SearchScope; import jetbrains.mps.ide.findusages.model.scopes.ProjectScope; import java.util.Scanner; import jetbrains.mps.smodel.undo.NodeBasedCommand; import jetbrains.mps.lang.typesystem.runtime.HUtil; import java.io.StringWriter; import java.io.PrintWriter; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations; import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes; import jetbrains.mps.console.actions.ClosureHoldingNodeUtil; import jetbrains.mps.ide.findusages.model.SearchResults; import jetbrains.mps.smodel.behaviour.BHReflection; import jetbrains.mps.core.aspects.behaviour.SMethodTrimmedId; import jetbrains.mps.smodel.SModelUtil_new; public abstract class BaseConsoleTab extends SimpleToolWindowPanel implements Disposable { private static final Logger LOG = LogManager.getLogger(BaseConsoleTab.class); private ConsoleTool myTool; private SModel myModel; private MPSProject myProject; private FileEditor myFileEditor; private UIEditorComponent myEditor; private Highlighter myHighlighter; private String myTabTitle; protected SNode myRoot; public BaseConsoleTab(MPSProject project, ConsoleTool tool, String title, @Nullable Element history) { super(false, true); myTool = tool; myTabTitle = title; myProject = project; initConsoleTab(history); } public String getTitle() { return myTabTitle; } public ConsoleTool getTool() { return myTool; } public SModel getConsoleModel() { return myModel; } protected final Project getProject() { return myProject; } public EditorComponent getEditorComponent() { return myEditor; } public SNode getRoot() { return myRoot; } public ConsoleTool getConsoleTool() { return myTool; } protected void createEditor() { this.myEditor = new UIEditorComponent(myProject.getRepository(), null) { @Nullable @Override public Object getData(@NonNls String key) { if (PlatformDataKeys.FILE_EDITOR.is(key)) { return myFileEditor; } if (PlatformDataKeys.PASTE_PROVIDER.is(key)) { PasteProvider parentPasteProvider = as_6q36mf_a0a0a1a0a0a0a0bb(super.getData(key), PasteProvider.class); return (myTool.getPasteAsRef() ? new BaseConsoleTab.MyPasteProvider(parentPasteProvider) : parentPasteProvider); } return super.getData(key); } @Override protected CommandContextImpl createCommandContext() { return new CommandContextImpl(this) { private SNode contextNode; @Override public void updateContextNode() { if (getEditorComponent().getEditedNode() != myRoot) { throw new IllegalStateException("Console editor can be used only for ConsoleRoot nodes."); } contextNode = SLinkOperations.getTarget(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x15fb34051f725bb1L, "commandHolder")); } @Override public SNode getContextNode() { return contextNode; } }; } }; EditorExtensionUtil.extendUsingProject(myEditor, myProject); myEditor.editNode(myRoot); } protected void createConsoleModel() { this.myModel = TemporaryModels.getInstance().create(false, TempModuleOptions.forDefaultModuleWithSourceAndClassesGen()); if (myModel == null) { if (LOG.isEnabledFor(Level.ERROR)) { LOG.error("Error: could not create console model"); } return; } } protected void initConsoleTab(@Nullable final Element history) { if (myProject.getModelAccess().canWrite()) { // non-undoable actions should not affect project files throw new IllegalStateException(); } getProject().getModelAccess().executeCommand(new DefaultCommand() { public void run() { createConsoleModel(); addBuiltInImports(); loadHistory(history); createEditor(); myFileEditor = new ConsoleFileEditor(myEditor); } }); DefaultActionGroup group = new DefaultActionGroup(); registerActions(group); ActionToolbar toolbar = ActionManager.getInstance().createActionToolbar(ActionPlaces.TOOLBAR, group, false); toolbar.setTargetComponent(myEditor); setToolbar(toolbar.getComponent()); setContent(myEditor.getExternalComponent()); Disposer.register(this, myFileEditor); myHighlighter = myProject.getProject().getComponent(Highlighter.class); check_6q36mf_a41a03(myHighlighter, myEditor); } public void dispose() { disposeConsoleTab(); } public void disposeConsoleTab() { myProject.getRepository().getModelAccess().executeCommand(new Runnable() { public void run() { if (myEditor != null) { ThreadUtils.runInUIThreadNoWait(new Runnable() { public void run() { myEditor.dispose(); } }); } TemporaryModels.getInstance().dispose(myModel); } }); if (myHighlighter != null) { myHighlighter.removeAdditionalEditorComponent(myEditor); } } public void activate() { getConsoleTool().getToolWindow().activate(null); getConsoleTool().selectTab(this); } public void selectNode(final SNode nodeToSelect) { myTool.getToolWindow().activate(new Runnable() { public void run() { myProject.getRepository().getModelAccess().runReadAction(new Runnable() { public void run() { myEditor.selectNode(nodeToSelect); getEditorComponent().ensureSelectionVisible(); IdeFocusManager.getInstance(myProject.getProject()).requestFocus(myEditor, false); } }); } }); myTool.selectTab(this); } protected void addBuiltInImports() { SLanguage base = MetaAdapterFactory.getLanguage(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, "jetbrains.mps.console.base"); Collection<SLanguage> baseAndExtensions = new SLanguageHierarchy(LanguageRegistry.getInstance(myProject.getRepository()), Collections.singleton(base)).getExtending(); SModelInternal modelInternal = ((SModelInternal) myModel); for (SLanguage l : CollectionSequence.fromCollection(baseAndExtensions)) { modelInternal.addLanguage(l); SModuleReference langSourceModuleRef = l.getSourceModuleReference(); SModule langSrcModule = (langSourceModuleRef == null ? null : langSourceModuleRef.resolve(myProject.getRepository())); if (!(langSrcModule instanceof Language)) { continue; } SModel structureModel = ((Language) langSrcModule).getStructureModelDescriptor(); if (structureModel == null) { continue; } modelInternal.addModelImport(structureModel.getReference()); ((AbstractModule) myModel.getModule()).addDependency(langSrcModule.getModuleReference(), false); } modelInternal.addDevKit(PersistenceFacade.getInstance().createModuleReference("fbc25dd2-5da4-483a-8b19-70928e1b62d7(jetbrains.mps.devkit.general-purpose)")); } protected void validateImports() { ModelImports modelImports = new ModelImports(myModel); modelImports.clearEmployedDevKits(); modelImports.clearUsedLanguages(); modelImports.clearImportedModels(); // XXX why don't we clear engagedOnGeneration as well? addBuiltInImports(); TemporaryModels.getInstance().addMissingImports(myModel); } protected void addNodeImports(SNode node) { final SModelInternal modelInternal = (SModelInternal) myModel; final AbstractModule module = ((AbstractModule) myModel.getModule()); final Collection<SLanguage> importedLanguages = modelInternal.importedLanguageIds(); ModelDependencyScanner scan = new ModelDependencyScanner().crossModelReferences(true).usedLanguages(true); scan.walk(SNodeOperations.getNodeDescendants(node, null, true, new SAbstractConcept[]{})); HashSet<SLanguage> languagesToImport = new HashSet<SLanguage>(scan.getUsedLanguages()); languagesToImport.removeAll(importedLanguages); for (SLanguage usedLanguage : SetSequence.fromSet(languagesToImport)) { modelInternal.addLanguage(usedLanguage); } HashSet<SModelReference> modelsToImport = new HashSet<SModelReference>(scan.getCrossModelReferences()); modelsToImport.removeAll(SModelOperations.getImportedModelUIDs(myModel)); for (SModelReference ref : SetSequence.fromSet(modelsToImport)) { modelInternal.addModelImport(ref); SModuleReference moduleRef; if (ref.getModuleReference() != null) { moduleRef = ref.getModuleReference(); } else { // models with global identity may omit module reference, however, we still need to add their owning module // into dependencies to get the code compiled SModel usedModel = ref.resolve(myProject.getRepository()); moduleRef = (usedModel == null ? null : usedModel.getModule().getModuleReference()); } if (moduleRef != null) { module.addDependency(moduleRef, false); } } } protected BaseAction registerKeyShortcut(BaseAction a, int key) { return registerShortcutSet(a, new CustomShortcutSet(KeyStroke.getKeyStroke(key, KeyEvent.CTRL_MASK))); } protected BaseAction registerMouseShortcut(BaseAction a) { return registerShortcutSet(a, new CustomShortcutSet(new MouseShortcut(MouseEvent.BUTTON1, 0, 1))); } protected BaseAction registerShortcutSet(BaseAction a, ShortcutSet shortcutSet) { a.registerCustomShortcutSet(shortcutSet, myEditor); return a; } protected void registerActions(DefaultActionGroup group) { // wrapping action with a special action // because usual action cannot be attached to an additional shortcut // using AnAction.setShortcutSet() registerMouseShortcut(new BaseConsoleTab.ExecuteClosureAction()); } protected static class ExecuteClosureAction extends BaseAction { public ExecuteClosureAction() { super("Execute Closure"); this.setExecuteOutsideCommand(true); } public void doUpdate(@NotNull AnActionEvent event, final Map<String, Object> _params) { this.setEnabledState(event.getPresentation(), this.isApplicable(event, _params)); } public boolean isApplicable(AnActionEvent event, Map<String, Object> _params) { if (!(event.getInputEvent() instanceof MouseEvent)) { return false; } MouseEvent inputEvent = (MouseEvent) event.getInputEvent(); EditorComponent editorComponent = event.getData(MPSDataKeys.EDITOR_COMPONENT); if (editorComponent == null) { return false; } MouseEvent mouseEvent = SwingUtilities.convertMouseEvent(inputEvent.getComponent(), inputEvent, editorComponent); EditorCell cell = event.getData(MPSDataKeys.EDITOR_CELL); EditorCell preciseCell = editorComponent.getRootCell().findLeaf(mouseEvent.getX(), mouseEvent.getY()); if (cell != preciseCell) { return false; } return ((BaseAction) ActionManager.getInstance().getAction("jetbrains.mps.console.actions.ExecuteActionAttachedToCurrentNode_Action")).isApplicable(event); } protected void doExecute(AnActionEvent event, Map<String, Object> _params) { ActionUtils.updateAndPerformAction(((BaseAction) ActionManager.getInstance().getAction("jetbrains.mps.console.actions.ExecuteActionAttachedToCurrentNode_Action")), event); } } public class MyPasteProvider implements PasteProvider { private PasteProvider myDefaultPasteProvider; public MyPasteProvider(PasteProvider defaultPasteProvider) { myDefaultPasteProvider = defaultPasteProvider; } public void performPaste(@NotNull final DataContext context) { myProject.getRepository().getModelAccess().executeCommand(new Runnable() { public void run() { SNodeReference pastingNodeReference = null; try { for (Transferable trf : CopyPasteManagerEx.getInstanceEx().getAllContents()) { if (trf != null && trf.isDataFlavorSupported(SModelDataFlavor.sNodeReference)) { pastingNodeReference = (SNodeReference) trf.getTransferData(SModelDataFlavor.sNodeReference); } break; } } catch (UnsupportedFlavorException ignored) { } catch (IOException ignored) { } EditorCell currentCell = myEditor.getSelectedCell(); SNode referenceTarget = check_6q36mf_a0d0a0a5ec(pastingNodeReference, myProject); if (referenceTarget != null && currentCell != null && !(check_6q36mf_a0a4a0a0f65(check_6q36mf_a0a0e0a0a5ec(pastingNodeReference), myModel))) { SNode refContainer = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x51132a123c89fa7eL, "jetbrains.mps.console.base.structure.PastedNodeReference")); SLinkOperations.setTarget(refContainer, MetaAdapterFactory.getReferenceLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x36ac6f29ae8c1fb5L, 0x4904fd89e74fc6fL, "target"), referenceTarget); NodePaster paster = new NodePaster(ListSequence.fromListAndArray(new ArrayList<SNode>(), refContainer)); if (paster.canPaste(currentCell)) { paster.paste(currentCell); } else if (paster.canPasteWithRemove(myEditor.getSelectedNodes())) { paster.pasteWithRemove(myEditor.getSelectedNodes()); } TemporaryModels.getInstance().addMissingImports(myModel); myEditor.getUpdater().flushModelEvents(); SelectionUtil.selectLabelCellAnSetCaret(myEditor.getEditorContext(), refContainer, SelectionManager.LAST_CELL, -1); } else { check_6q36mf_a0a0e0a0a5ec_0(myDefaultPasteProvider, context); } } }); } public boolean isPastePossible(@NotNull DataContext context) { return true; } public boolean isPasteEnabled(@NotNull DataContext context) { return true; } } protected abstract void loadHistory(Element state); @Nullable public Element saveHistory() { final Wrappers._T<Element> result = new Wrappers._T<Element>(null); myProject.getRepository().getModelAccess().runReadAction(new Runnable() { public void run() { try { result.value = (myModel == null ? null : PersistenceUtil.saveModelToXml(myModel)); } catch (Exception e) { if (LOG.isEnabledFor(Level.WARN)) { LOG.warn("Error on console model saving", e); } } } }); return result.value; } protected SModel loadHistoryModel(Element state) { if (state == null) { return null; } try { final Wrappers._T<SModel> loadedModel = new Wrappers._T<SModel>(PersistenceUtil.loadModelFromXml(state)); ListSequence.fromList(jetbrains.mps.lang.smodel.generator.smodelAdapter.SModelOperations.nodes(loadedModel.value, null)).where(new IWhereFilter<SNode>() { public boolean accept(SNode it) { return !(it.getConcept().isValid()); } }).visitAll(new IVisitor<SNode>() { public void visit(SNode it) { if ((SNodeOperations.getNodeAncestor(it, MetaAdapterFactory.getInterfaceConcept(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x5f195a051bd47defL, "jetbrains.mps.console.base.structure.HistoryItem"), false, false) != null)) { SNodeOperations.deleteNode(SNodeOperations.getNodeAncestor(it, MetaAdapterFactory.getInterfaceConcept(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x5f195a051bd47defL, "jetbrains.mps.console.base.structure.HistoryItem"), false, false)); if (LOG.isEnabledFor(Level.ERROR)) { LOG.error("Unknown concept on loading console history: removing enclosing history item"); } } else { loadedModel.value = null; if (LOG.isEnabledFor(Level.ERROR)) { LOG.error("Unknown concept on loading console history: not loading history"); } } } }); return loadedModel.value; } catch (RuntimeException e) { if (LOG.isEnabledFor(Level.ERROR)) { LOG.error("Console history was not loaded. Maybe you are opening project from previous MPS versions?"); } return null; } catch (Throwable e) { if (LOG.isEnabledFor(Level.ERROR)) { LOG.error("Error on loading console history.", e); } return null; } } protected ConsoleContext getConsoleContext() { return new ConsoleContext() { public Project getProject() { return myProject; } public SearchScope getDefaultSearchScope() { return new ProjectScope(myProject); } public BaseConsoleTab getOutputWindow() { return BaseConsoleTab.this; } }; } public ConsoleStream getConsoleStream() { return new ConsoleStream() { public void addText(String text) { Scanner scanner = new Scanner(text); while (scanner.hasNextLine()) { String line = scanner.nextLine(); if ((line != null && line.length() > 0)) { addResponse(createTextResponseItem_6q36mf_a0a0b0b0a0a0a0oc(line)); } if (scanner.hasNextLine() || text.charAt(text.length() - 1) == '\n') { addResponse(createNewLineResponseItem_6q36mf_a0a0c0b0a0a0a0oc()); } } } private void addResponse(final SNode response) { SwingUtilities.invokeLater(new Runnable() { public void run() { // we are not in command here myProject.getModelAccess().executeCommand(new NodeBasedCommand(myRoot) { public void run() { addNodeImports(response); ListSequence.fromList(SLinkOperations.getChildren(getLastReponse(), MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4e3b035171a5ba02L, 0x4e3b035171b356edL, "item"))).addElement(response); } }); } }); } public void addNode(final SNode node) { addResponse(createNodeResponseItem_6q36mf_a0a0c0a0a0oc(SNodeOperations.cast(HUtil.copyIfNecessary(node), MetaAdapterFactory.getConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x10802efe25aL, "jetbrains.mps.lang.core.structure.BaseConcept")))); } public void addNodeRef(SNode target) { SNode node = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x2095ece53bbb600cL, "jetbrains.mps.console.base.structure.NodeReferencePresentation")); SLinkOperations.setTarget(node, MetaAdapterFactory.getReferenceLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x36ac6f29ae8c1fb5L, 0x4904fd89e74fc6fL, "target"), target); addNode(node); } public void addException(Throwable t) { StringWriter writer = new StringWriter(); t.printStackTrace(new PrintWriter(writer)); SNode exceptionHolder = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x5b02f032bc93b714L, "jetbrains.mps.console.base.structure.ExceptionHolder")); SPropertyOperations.set(exceptionHolder, MetaAdapterFactory.getProperty(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x5b02f032bc93b714L, 0x5b02f032bc9cb8a9L, "stackTrace"), writer.toString()); SPropertyOperations.set(exceptionHolder, MetaAdapterFactory.getProperty(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x2095ece53bb9f5b0L, 0x360b134fc047ce2aL, "text"), t.getClass().getName()); addNode(exceptionHolder); } public void addClosure(_FunctionTypes._void_P0_E0 closure, String text) { SNode nodeWithClosure = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0xf6d4d958ec2f2c6L, "jetbrains.mps.console.base.structure.NodeWithClosure")); SPropertyOperations.set(nodeWithClosure, MetaAdapterFactory.getProperty(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x2095ece53bb9f5b0L, 0x360b134fc047ce2aL, "text"), text); ClosureHoldingNodeUtil.getInstance().register(nodeWithClosure, closure); addNode(nodeWithClosure); } public void addSequence(final Project project, final _FunctionTypes._return_P0_E0<? extends SearchResults> results, int resultsCount, String resultDescription) { if (resultsCount == 0) { addText("empty sequence"); } else { addClosure(new _FunctionTypes._void_P0_E0() { public void invoke() { ConsoleUtil.show(project, results); } }, resultsCount + " " + resultDescription); } } }; } protected SNode getLastReponse() { SNode last = SNodeOperations.as(ListSequence.fromList(SLinkOperations.getChildren(SLinkOperations.getTarget(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x15fb34051f725bafL, "history")), MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0xa835f28c1aa02beL, 0x63da33792b5df49aL, "item"))).last(), MetaAdapterFactory.getConcept(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4e3b035171a5ba02L, "jetbrains.mps.console.base.structure.Response")); if (last != null) { return last; } return SLinkOperations.addNewChild(SLinkOperations.getTarget(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x15fb34051f725bafL, "history")), MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0xa835f28c1aa02beL, 0x63da33792b5df49aL, "item"), MetaAdapterFactory.getConcept(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4e3b035171a5ba02L, "jetbrains.mps.console.base.structure.Response")); } public void execute(@Nullable final SNode command, @Nullable final Runnable executeBefore, @Nullable final Runnable executeAfter) { myTool.selectTab(this); final SNode[] typedCommand = new SNode[1]; myProject.getModelAccess().executeCommand(new Runnable() { public void run() { typedCommand[0] = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4e27160acb4484bL, "jetbrains.mps.console.base.structure.CommandHolder")); if (command != null) { addNodeImports(command); SLinkOperations.setTarget(typedCommand[0], MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4e27160acb4484bL, 0x4e27160acb44924L, "command"), SNodeOperations.copyNode(SLinkOperations.getTarget(SLinkOperations.getTarget(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x15fb34051f725bb1L, "commandHolder")), MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4e27160acb4484bL, 0x4e27160acb44924L, "command")))); SLinkOperations.setTarget(SLinkOperations.getTarget(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x15fb34051f725bb1L, "commandHolder")), MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4e27160acb4484bL, 0x4e27160acb44924L, "command"), SNodeOperations.copyNode(command)); } } }); BHReflection.invoke(SLinkOperations.getTarget(SLinkOperations.getTarget(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x15fb34051f725bb1L, "commandHolder")), MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4e27160acb4484bL, 0x4e27160acb44924L, "command")), SMethodTrimmedId.create("execute", null, "5WvH$QO9bva"), getConsoleContext(), getConsoleStream(), new Runnable() { public void run() { if (myProject.getModelAccess().canWrite()) { // non-undoable actions should not affect project files throw new IllegalStateException(); } myProject.getModelAccess().executeCommand(new NodeBasedCommand(myRoot) { public void run() { ListSequence.fromList(SLinkOperations.getChildren(SLinkOperations.getTarget(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x15fb34051f725bafL, "history")), MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0xa835f28c1aa02beL, 0x63da33792b5df49aL, "item"))).addElement(SNodeOperations.copyNode(SLinkOperations.getTarget(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x15fb34051f725bb1L, "commandHolder")))); SLinkOperations.setNewChild(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x15fb34051f725bb1L, "commandHolder"), MetaAdapterFactory.getConcept(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4e27160acb4484bL, "jetbrains.mps.console.base.structure.CommandHolder")); SLinkOperations.setTarget(SLinkOperations.getTarget(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x7d401fa40806ebe7L, "cursor")), MetaAdapterFactory.getReferenceLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4fe9275cea077231L, 0x4fe9275cea077232L, "target"), SLinkOperations.getTarget(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x15fb34051f725bb1L, "commandHolder"))); check_6q36mf_a3a0a0a0a1a0a0c0a3a07(executeBefore); } }); } }, new Runnable() { public void run() { myProject.getRepository().getModelAccess().executeCommand(new Runnable() { public void run() { if (SLinkOperations.getTarget(SLinkOperations.getTarget(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x7d401fa40806ebe7L, "cursor")), MetaAdapterFactory.getReferenceLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4fe9275cea077231L, 0x4fe9275cea077232L, "target")) == SLinkOperations.getTarget(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x15fb34051f725bb1L, "commandHolder"))) { SLinkOperations.setTarget(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x15fb34051f725bb1L, "commandHolder"), typedCommand[0]); SLinkOperations.setTarget(SLinkOperations.getTarget(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x7d401fa40806ebe7L, "cursor")), MetaAdapterFactory.getReferenceLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4fe9275cea077231L, 0x4fe9275cea077232L, "target"), SLinkOperations.getTarget(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x15fb34051f725bb1L, "commandHolder"))); } else { SLinkOperations.setTarget(myRoot, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x15fb34051f725a2cL, 0x15fb34051f725bb1L, "commandHolder"), typedCommand[0]); } check_6q36mf_a1a0a0a0a3a0d0sc(executeAfter); } }); } }); } private static void check_6q36mf_a41a03(Highlighter checkedDotOperand, UIEditorComponent myEditor) { if (null != checkedDotOperand) { checkedDotOperand.addAdditionalEditorComponent(myEditor); } } private static SNode check_6q36mf_a0d0a0a5ec(SNodeReference checkedDotOperand, MPSProject myProject) { if (null != checkedDotOperand) { return checkedDotOperand.resolve(myProject.getRepository()); } return null; } private static boolean check_6q36mf_a0a4a0a0f65(SModelReference checkedDotOperand, SModel myModel) { if (null != checkedDotOperand) { return checkedDotOperand.equals(myModel.getReference()); } return false; } private static SModelReference check_6q36mf_a0a0e0a0a5ec(SNodeReference checkedDotOperand) { if (null != checkedDotOperand) { return checkedDotOperand.getModelReference(); } return null; } private static void check_6q36mf_a0a0e0a0a5ec_0(PasteProvider checkedDotOperand, DataContext context) { if (null != checkedDotOperand) { checkedDotOperand.performPaste(context); } } private static SNode createTextResponseItem_6q36mf_a0a0b0b0a0a0a0oc(Object p0) { PersistenceFacade facade = PersistenceFacade.getInstance(); SNode n1 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4e3b035171b35c38L, "jetbrains.mps.console.base.structure.TextResponseItem"), null, null, false); n1.setProperty(MetaAdapterFactory.getProperty(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4e3b035171b35c38L, 0x4e3b035171b35d11L, "text"), p0 + ""); return n1; } private static SNode createNewLineResponseItem_6q36mf_a0a0c0b0a0a0a0oc() { PersistenceFacade facade = PersistenceFacade.getInstance(); SNode n1 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4e3b035171b35d30L, "jetbrains.mps.console.base.structure.NewLineResponseItem"), null, null, false); return n1; } private static SNode createNodeResponseItem_6q36mf_a0a0c0a0a0oc(Object p0) { PersistenceFacade facade = PersistenceFacade.getInstance(); SNode n1 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4e3b035171b35c14L, "jetbrains.mps.console.base.structure.NodeResponseItem"), null, null, false); if (p0 != null) { n1.addChild(MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x4e3b035171b35c14L, 0x4e3b035171b35c15L, "node"), (SNode) p0); } return n1; } private static void check_6q36mf_a3a0a0a0a1a0a0c0a3a07(Runnable checkedDotOperand) { if (null != checkedDotOperand) { checkedDotOperand.run(); } } private static void check_6q36mf_a1a0a0a0a3a0d0sc(Runnable checkedDotOperand) { if (null != checkedDotOperand) { checkedDotOperand.run(); } } private static <T> T as_6q36mf_a0a0a1a0a0a0a0bb(Object o, Class<T> type) { return (type.isInstance(o) ? (T) o : null); } }