package jetbrains.mps.debugger.api.ui.actions;
/*Generated by MPS */
import jetbrains.mps.workbench.action.BaseAction;
import javax.swing.Icon;
import com.intellij.icons.AllIcons;
import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.actionSystem.AnActionEvent;
import java.util.Map;
import jetbrains.mps.debug.api.AbstractDebugSession;
import jetbrains.mps.debugger.api.ui.DebugActionsUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import jetbrains.mps.internal.collections.runtime.MapSequence;
import jetbrains.mps.debug.api.AbstractUiState;
import jetbrains.mps.debug.api.programState.IThread;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.debug.api.programState.IStackFrame;
import jetbrains.mps.debug.api.programState.ILocation;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
public class ExportThreads_Action extends BaseAction {
private static final Icon ICON = AllIcons.Actions.Export;
public ExportThreads_Action() {
super("Export Threads", "", ICON);
this.setIsAlwaysVisible(false);
this.setExecuteOutsideCommand(true);
}
@Override
public boolean isDumbAware() {
return true;
}
@Override
public void doUpdate(@NotNull AnActionEvent event, final Map<String, Object> _params) {
AbstractDebugSession debugSession = DebugActionsUtil.getDebugSession(event);
event.getPresentation().setEnabled(debugSession != null);
event.getPresentation().setVisible(true);
}
@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("project", p);
if (p == null) {
return false;
}
}
return true;
}
@Override
public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) {
AbstractDebugSession debugSession = DebugActionsUtil.getDebugSession(event);
AbstractUiState uiState = ((AbstractUiState) debugSession.getUiState());
StringBuffer sb = new StringBuffer();
for (IThread thread : ListSequence.fromList(uiState.getThreads())) {
sb.append(thread.getPresentation());
sb.append('\n');
for (IStackFrame frame : ListSequence.fromList(thread.getFrames())) {
ILocation location = frame.getLocation();
sb.append('\t');
sb.append("at ");
sb.append(location.getUnitName());
sb.append(".");
sb.append(location.getRoutineName());
sb.append("(");
sb.append(frame.getLocation().getFileName());
sb.append(":");
sb.append(location.getLineNumber());
sb.append(")");
sb.append('\n');
}
sb.append('\n');
}
final ExportThreadsDialog dialog = new ExportThreadsDialog(((Project) MapSequence.fromMap(_params).get("project")), sb);
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
dialog.show();
}
}, ModalityState.NON_MODAL);
}
}