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);
}
}