package jetbrains.mps.console.scripts.runtime.util;
/*Generated by MPS */
import jetbrains.mps.console.tool.ConsoleContext;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.console.scripts.behavior.AbstractConsoleScript__BehaviorDescriptor;
import javax.swing.SwingUtilities;
import jetbrains.mps.internal.collections.runtime.Sequence;
import java.util.List;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.console.tool.BaseConsoleTab;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import jetbrains.mps.ide.findusages.model.SearchResults;
import org.jetbrains.mps.openapi.module.SRepository;
import jetbrains.mps.ide.platform.refactoring.RefactoringAccessEx;
import jetbrains.mps.ide.project.ProjectHelper;
import jetbrains.mps.ide.platform.refactoring.RefactoringViewAction;
import jetbrains.mps.ide.platform.refactoring.RefactoringViewItem;
import jetbrains.mps.ide.refactoring.RefactoringViewItemImpl;
import org.jetbrains.mps.openapi.model.SNodeReference;
import jetbrains.mps.internal.collections.runtime.ISelector;
import jetbrains.mps.internal.collections.runtime.IVisitor;
import jetbrains.mps.ide.findusages.model.SearchResult;
public class ScriptsUtil {
public static void executeScript(final ConsoleContext context, SNode script) {
final Iterable<SNode> commands = AbstractConsoleScript__BehaviorDescriptor.getCommands_id1whNchEKZry.invoke(script);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
executeCommands(context, Sequence.fromIterable(commands).toListSequence(), 0);
}
});
}
public static void executeCommands(final ConsoleContext context, final List<SNode> commands, final int startWith) {
if (startWith == ListSequence.fromList(commands).count()) {
return;
}
context.getProject().getModelAccess().executeCommand(new Runnable() {
public void run() {
((BaseConsoleTab) context.getOutputWindow()).execute(ListSequence.fromList(commands).getElement(startWith), null, new Runnable() {
public void run() {
executeCommands(context, commands, startWith + 1);
}
});
}
});
}
public static void refactor(final ConsoleContext context, final Iterable<SNode> nodes, final _FunctionTypes._void_P1_E0<? super SNode> toExecuteWithEachNode) {
SearchResults sr = nodesToRefactoringResult(nodes);
final SRepository projectRepo = context.getProject().getRepository();
RefactoringAccessEx.getInstance().showRefactoringView(ProjectHelper.toIdeaProject(context.getProject()), new RefactoringViewAction() {
public void performAction(final RefactoringViewItem refactoringViewItem) {
projectRepo.getModelAccess().executeCommand(new Runnable() {
public void run() {
Iterable<SNode> includedNodes;
if (refactoringViewItem instanceof RefactoringViewItemImpl) {
List<SNodeReference> nodeRefs = as_bb8vid_a0a0a0a1a0a0a0a0a0a0b0a2a5(refactoringViewItem, RefactoringViewItemImpl.class).getUsagesView().getIncludedResultNodes();
includedNodes = ListSequence.fromList(nodeRefs).select(new ISelector<SNodeReference, SNode>() {
public SNode select(SNodeReference it) {
return it.resolve(projectRepo);
}
});
} else {
includedNodes = nodes;
}
for (SNode resultNode : Sequence.fromIterable(includedNodes)) {
if (resultNode != null) {
toExecuteWithEachNode.invoke(resultNode);
}
}
}
});
refactoringViewItem.close();
context.getOutputWindow().activate();
}
}, sr, false, "refactor");
}
private static SearchResults<SNode> nodesToRefactoringResult(Iterable<SNode> nodes) {
final SearchResults<SNode> result = new SearchResults<SNode>();
Sequence.fromIterable(nodes).visitAll(new IVisitor<SNode>() {
public void visit(SNode it) {
result.getSearchResults().add(new SearchResult<SNode>(it, "Nodes to refactor"));
}
});
return result;
}
private static <T> T as_bb8vid_a0a0a0a1a0a0a0a0a0a0b0a2a5(Object o, Class<T> type) {
return (type.isInstance(o) ? (T) o : null);
}
}