import com.intellij.debugger.engine.events.DebuggerCommandImpl;
import com.intellij.debugger.impl.DebuggerContextImpl;
import com.intellij.debugger.impl.DebuggerSession;
+import com.intellij.debugger.impl.DebuggerUtilsEx;
import com.intellij.debugger.jdi.VirtualMachineProxyImpl;
-import com.intellij.debugger.ui.DebuggerSessionTab;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
public void run() {
XDebugSession xSession = session.getXDebugSession();
if (xSession != null) {
- DebuggerSessionTab.addThreadDump(project, threads, xSession.getUI(), session);
+ DebuggerUtilsEx.addThreadDump(project, threads, xSession.getUI(), session);
}
}
}, ModalityState.NON_MODAL);
import com.intellij.debugger.ui.CompletionEditor;
import com.intellij.debugger.ui.breakpoints.Breakpoint;
import com.intellij.debugger.ui.tree.DebuggerTreeNode;
+import com.intellij.execution.filters.ExceptionFilters;
+import com.intellij.execution.filters.TextConsoleBuilder;
+import com.intellij.execution.filters.TextConsoleBuilderFactory;
+import com.intellij.execution.ui.ConsoleView;
+import com.intellij.execution.ui.RunnerLayoutUi;
+import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.DataContext;
+import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.ui.classFilter.ClassFilter;
+import com.intellij.ui.content.Content;
+import com.intellij.unscramble.ThreadDumpPanel;
+import com.intellij.unscramble.ThreadState;
import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.xdebugger.XSourcePosition;
return null;
}
+ private static int myThreadDumpsCount = 0;
+ private static int myCurrentThreadDumpId = 1;
+
+ private static final String THREAD_DUMP_CONTENT_PREFIX = "Dump";
+
+ public static void addThreadDump(Project project, List<ThreadState> threads, final RunnerLayoutUi ui, DebuggerSession session) {
+ final TextConsoleBuilder consoleBuilder = TextConsoleBuilderFactory.getInstance().createBuilder(project);
+ consoleBuilder.filters(ExceptionFilters.getFilters(session.getSearchScope()));
+ final ConsoleView consoleView = consoleBuilder.getConsole();
+ final DefaultActionGroup toolbarActions = new DefaultActionGroup();
+ consoleView.allowHeavyFilters();
+ final ThreadDumpPanel panel = new ThreadDumpPanel(project, consoleView, toolbarActions, threads);
+
+ final String id = THREAD_DUMP_CONTENT_PREFIX + " #" + myCurrentThreadDumpId;
+ final Content content = ui.createContent(id, panel, id, null, null);
+ content.setCloseable(true);
+ content.setDescription("Thread Dump");
+ ui.addContent(content);
+ ui.selectAndFocus(content, true, true);
+ myThreadDumpsCount++;
+ myCurrentThreadDumpId++;
+ Disposer.register(content, new Disposable() {
+ @Override
+ public void dispose() {
+ myThreadDumpsCount--;
+ if (myThreadDumpsCount == 0) {
+ myCurrentThreadDumpId = 1;
+ }
+ }
+ });
+ Disposer.register(content, consoleView);
+ ui.selectAndFocus(content, true, false);
+ if (threads.size() > 0) {
+ panel.selectStackFrame(0);
+ }
+ }
+
public abstract DebuggerTreeNode getSelectedNode (DataContext context);
public abstract EvaluatorBuilder getEvaluatorBuilder();
import com.intellij.execution.ExecutionResult;
import com.intellij.execution.configurations.RunProfile;
import com.intellij.execution.executors.DefaultDebugExecutor;
-import com.intellij.execution.filters.ExceptionFilters;
-import com.intellij.execution.filters.TextConsoleBuilder;
-import com.intellij.execution.filters.TextConsoleBuilderFactory;
import com.intellij.execution.ui.ConsoleView;
import com.intellij.execution.ui.ExecutionConsoleEx;
-import com.intellij.execution.ui.RunnerLayoutUi;
import com.intellij.execution.ui.layout.PlaceInGrid;
import com.intellij.icons.AllIcons;
import com.intellij.idea.ActionsBundle;
import com.intellij.ui.content.ContentManagerAdapter;
import com.intellij.ui.content.ContentManagerEvent;
import com.intellij.ui.content.tabs.PinToolwindowTabAction;
-import com.intellij.unscramble.ThreadDumpPanel;
-import com.intellij.unscramble.ThreadState;
import com.intellij.xdebugger.XDebuggerBundle;
import com.intellij.xdebugger.impl.actions.XDebuggerActions;
import com.intellij.xdebugger.impl.settings.XDebuggerSettingsManager;
import javax.swing.*;
import javax.swing.tree.TreePath;
-import java.util.List;
public class DebuggerSessionTab extends DebuggerSessionTabBase implements Disposable {
private static final Logger LOG = Logger.getInstance(DebuggerSessionTab.class);
private final DebugUIEnvironment myDebugUIEnvironment;
private final ThreadsPanel myThreadsPanel;
- private static final String THREAD_DUMP_CONTENT_PREFIX = "Dump";
public DebuggerSessionTab(final Project project, final String sessionName, @NotNull final DebugUIEnvironment environment,
@NotNull DebuggerSession debuggerSession) {
myUi.selectAndFocus(myUi.findContent(DebuggerContentInfo.FRAME_CONTENT), true, false);
}
- private static int myThreadDumpsCount = 0;
- private static int myCurrentThreadDumpId = 1;
-
- public static void addThreadDump(Project project, List<ThreadState> threads, final RunnerLayoutUi ui, DebuggerSession session) {
- final TextConsoleBuilder consoleBuilder = TextConsoleBuilderFactory.getInstance().createBuilder(project);
- consoleBuilder.filters(ExceptionFilters.getFilters(session.getSearchScope()));
- final ConsoleView consoleView = consoleBuilder.getConsole();
- final DefaultActionGroup toolbarActions = new DefaultActionGroup();
- consoleView.allowHeavyFilters();
- final ThreadDumpPanel panel = new ThreadDumpPanel(project, consoleView, toolbarActions, threads);
-
- final String id = createThreadDumpContentId();
- final Content content = ui.createContent(id, panel, id, null, null);
- content.setCloseable(true);
- content.setDescription("Thread Dump");
- ui.addContent(content);
- ui.selectAndFocus(content, true, true);
- myThreadDumpsCount += 1;
- myCurrentThreadDumpId += 1;
- //Disposer.register(this, new Disposable() {
- // @Override
- // public void dispose() {
- // ui.removeContent(content, true);
- // }
- //});
- Disposer.register(content, new Disposable() {
- @Override
- public void dispose() {
- myThreadDumpsCount -= 1;
- if (myThreadDumpsCount == 0) {
- myCurrentThreadDumpId = 1;
- }
- }
- });
- Disposer.register(content, consoleView);
- ui.selectAndFocus(content, true, false);
- if (threads.size() > 0) {
- panel.selectStackFrame(0);
- }
- }
-
- private static String createThreadDumpContentId() {
- return THREAD_DUMP_CONTENT_PREFIX + " #" + myCurrentThreadDumpId;
- }
-
private class MyDebuggerStateManager extends DebuggerStateManager {
@Override
public void fireStateChanged(DebuggerContextImpl newContext, int event) {