refactoring: initialization of debug tabs moved to constructors

This commit is contained in:
nik
2013-03-01 16:29:51 +04:00
parent b8693682b7
commit b17bf92eaf
5 changed files with 53 additions and 63 deletions
@@ -129,9 +129,8 @@ public class DebuggerPanelsManager implements ProjectComponent {
debugProcess.putUserData(BatchEvaluator.REMOTE_SESSION_KEY, Boolean.TRUE);
}
final DebuggerSessionTab sessionTab = new DebuggerSessionTab(myProject, modelEnvironment.getSessionName(), environment.getIcon());
Disposer.register(myProject, sessionTab);
RunContentDescriptor runContentDescriptor = sessionTab.attachToSession(debuggerSession, environment);
final DebuggerSessionTab sessionTab = new DebuggerSessionTab(myProject, modelEnvironment.getSessionName(), environment, debuggerSession);
RunContentDescriptor runContentDescriptor = sessionTab.getRunContentDescriptor();
RunContentDescriptor reuseContent = environment.getReuseContent();
if (reuseContent != null) {
final ProcessHandler prevHandler = reuseContent.getProcessHandler();
@@ -64,6 +64,7 @@ import com.intellij.xdebugger.XDebuggerBundle;
import com.intellij.xdebugger.impl.actions.XDebuggerActions;
import com.intellij.xdebugger.impl.ui.DebuggerSessionTabBase;
import com.intellij.xdebugger.impl.ui.XDebuggerUIConstants;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@@ -87,10 +88,14 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos
private static final String THREAD_DUMP_CONTENT_PREFIX = "Dump";
private final Icon myIcon;
public DebuggerSessionTab(final Project project, final String sessionName, @Nullable final Icon icon) {
public DebuggerSessionTab(final Project project,
final String sessionName,
@NotNull final DebugUIEnvironment environment,
DebuggerSession debuggerSession) throws ExecutionException {
super(project, "JavaDebugger", sessionName);
myIcon = icon;
myIcon = environment.getIcon();
myDebuggerSession = debuggerSession;
myDebugUIEnvironment = environment;
final DefaultActionGroup focus = new DefaultActionGroup();
focus.add(ActionManager.getInstance().getAction("Debugger.FocusOnBreakpoint"));
@@ -179,6 +184,28 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos
updateStatus(event.getContent());
}
}, this);
debuggerSession.getContextManager().addListener(new DebuggerContextListener() {
public void changeEvent(DebuggerContextImpl newContext, int event) {
if (!myUi.isDisposed()) {
attractFramesOnPause(event);
myStateManager.fireStateChanged(newContext, event);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if (!myUi.isDisposed()) {
myUi.updateActionsNow();
}
}
});
}
}
});
ExecutionResult executionResult = debuggerSession.getProcess().getExecutionResult();
myConsole = executionResult.getExecutionConsole();
myRunContentDescriptor = new RunContentDescriptor(myConsole, executionResult.getProcessHandler(), myUi.getComponent(), getSessionName(), myIcon);
initUI(executionResult);
}
private static void updateStatus(final Content content) {
@@ -205,13 +232,9 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos
return myRunContentDescriptor;
}
private RunContentDescriptor initUI(ExecutionResult executionResult) {
myConsole = executionResult.getExecutionConsole();
myRunContentDescriptor = new RunContentDescriptor(myConsole, executionResult.getProcessHandler(), myUi.getComponent(), getSessionName(), myIcon);
private void initUI(ExecutionResult executionResult) {
if (ApplicationManager.getApplication().isUnitTestMode()) {
return myRunContentDescriptor;
return;
}
@@ -314,8 +337,6 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos
myDebugUIEnvironment.initActions(myRunContentDescriptor, leftToolbar);
myUi.getOptions().setLeftToolbar(leftToolbar, ActionPlaces.DEBUGGER_TOOLBAR);
return myRunContentDescriptor;
}
private static void addAction(DefaultActionGroup group, String actionId) {
@@ -411,30 +432,6 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos
return myDebugUIEnvironment != null ? myDebugUIEnvironment.getRunProfile() : null;
}
public RunContentDescriptor attachToSession(final DebuggerSession session, DebugUIEnvironment environment) throws ExecutionException {
disposeSession();
myDebuggerSession = session;
myDebugUIEnvironment = environment;
session.getContextManager().addListener(new DebuggerContextListener() {
public void changeEvent(DebuggerContextImpl newContext, int event) {
if (!myUi.isDisposed()) {
attractFramesOnPause(event);
myStateManager.fireStateChanged(newContext, event);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if (!myUi.isDisposed()) {
myUi.updateActionsNow();
}
}
});
}
}
});
return initUI(session.getProcess().getExecutionResult());
}
private void attractFramesOnPause(final int event) {
if (DebuggerSession.EVENT_PAUSE == event) {
myUi.attractBy(XDebuggerUIConstants.LAYOUT_VIEW_BREAKPOINT_CONDITION);
@@ -39,7 +39,6 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.markup.GutterIconRenderer;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.MessageType;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.wm.ToolWindowId;
import com.intellij.util.EventDispatcher;
@@ -237,12 +236,7 @@ public class XDebugSessionImpl implements XDebugSession {
}
private void initSessionTab() {
mySessionTab = new XDebugSessionTab(myProject, mySessionName, myIcon);
if (myEnvironment != null) {
mySessionTab.setEnvironment(myEnvironment);
}
Disposer.register(myProject, mySessionTab);
mySessionTab.attachToSession(this, myRunner, myEnvironment, mySessionData, myConsoleView);
mySessionTab = new XDebugSessionTab(myProject, this, myIcon, myEnvironment, myRunner);
myDebugProcess.sessionInitialized();
}
@@ -33,6 +33,7 @@ import com.intellij.ide.ui.customization.CustomActionsSchema;
import com.intellij.openapi.actionSystem.ActionGroup;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.ui.AppIcon;
import com.intellij.ui.content.Content;
@@ -57,6 +58,7 @@ public abstract class DebuggerSessionTabBase extends LogConsoleManagerBase imple
public DebuggerSessionTabBase(Project project, @NotNull String runnerId, @NotNull final String sessionName) {
super(project);
Disposer.register(project, this);
myManager = new LogFilesManager(project, this, this);
mySessionName = sessionName;
@@ -19,12 +19,10 @@ import com.intellij.debugger.ui.DebuggerContentInfo;
import com.intellij.execution.Executor;
import com.intellij.execution.configurations.RunProfile;
import com.intellij.execution.executors.DefaultDebugExecutor;
import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.execution.runners.RestartAction;
import com.intellij.execution.runners.RunContentBuilder;
import com.intellij.execution.ui.ConsoleView;
import com.intellij.execution.ui.ExecutionConsole;
import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.execution.ui.actions.CloseAction;
@@ -40,6 +38,7 @@ import com.intellij.ui.content.tabs.PinToolwindowTabAction;
import com.intellij.xdebugger.XDebugProcess;
import com.intellij.xdebugger.XDebugSession;
import com.intellij.xdebugger.XDebuggerBundle;
import com.intellij.xdebugger.impl.XDebugSessionImpl;
import com.intellij.xdebugger.impl.actions.XDebuggerActions;
import com.intellij.xdebugger.impl.frame.XDebugViewBase;
import com.intellij.xdebugger.impl.frame.XFramesView;
@@ -59,11 +58,17 @@ import java.util.List;
public class XDebugSessionTab extends DebuggerSessionTabBase {
private XWatchesView myWatchesView;
private final List<XDebugViewBase> myViews = new ArrayList<XDebugViewBase>();
private final Icon myIcon;
public XDebugSessionTab(@NotNull final Project project, @NotNull final String sessionName, final @Nullable Icon icon) {
super(project, "Debug", sessionName);
myIcon = icon;
public XDebugSessionTab(@NotNull final Project project, @NotNull final XDebugSessionImpl session, final @Nullable Icon icon,
ExecutionEnvironment environment, ProgramRunner runner) {
super(project, "Debug", session.getSessionName());
if (environment != null) {
setEnvironment(environment);
}
myConsole = session.getConsoleView();
XDebugProcess debugProcess = session.getDebugProcess();
myRunContentDescriptor = new RunContentDescriptor(myConsole, debugProcess.getProcessHandler(), myUi.getComponent(), mySessionName, icon);
attachToSession(session, runner, environment, session.getSessionData(), debugProcess);
}
private Content createConsoleContent() {
@@ -123,14 +128,9 @@ public class XDebugSessionTab extends DebuggerSessionTabBase {
return myWatchesView;
}
public RunContentDescriptor attachToSession(final @NotNull XDebugSession session, final @Nullable ProgramRunner runner,
final @Nullable ExecutionEnvironment env,
final @NotNull XDebugSessionData sessionData, ConsoleView consoleView) {
final XDebugProcess debugProcess = session.getDebugProcess();
ProcessHandler processHandler = debugProcess.getProcessHandler();
myConsole = consoleView;
myRunContentDescriptor = new RunContentDescriptor(myConsole, processHandler, myUi.getComponent(), mySessionName, myIcon);
private void attachToSession(final @NotNull XDebugSession session, final @Nullable ProgramRunner runner,
final @Nullable ExecutionEnvironment env, final @NotNull XDebugSessionData sessionData,
final @NotNull XDebugProcess debugProcess) {
myUi.addContent(createFramesContent(session), 0, PlaceInGrid.left, false);
myUi.addContent(createVariablesContent(session), 0, PlaceInGrid.center, false);
myUi.addContent(createWatchesContent(session, sessionData), 0, PlaceInGrid.right, false);
@@ -142,7 +142,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase {
RunContentBuilder.addAdditionalConsoleEditorActions(myConsole, consoleContent);
if (ApplicationManager.getApplication().isUnitTestMode()) {
return myRunContentDescriptor;
return;
}
DefaultActionGroup leftToolbar = new DefaultActionGroup();
@@ -196,7 +196,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase {
DefaultActionGroup topToolbar = new DefaultActionGroup();
topToolbar.addAll(getCustomizedActionGroup(XDebuggerActions.TOOL_WINDOW_TOP_TOOLBAR_GROUP));
session.getDebugProcess().registerAdditionalActions(leftToolbar, topToolbar);
debugProcess.registerAdditionalActions(leftToolbar, topToolbar);
myUi.getOptions().setLeftToolbar(leftToolbar, ActionPlaces.DEBUGGER_TOOLBAR);
myUi.getOptions().setTopToolbar(topToolbar, ActionPlaces.DEBUGGER_TOOLBAR);
@@ -207,8 +207,6 @@ public class XDebugSessionTab extends DebuggerSessionTabBase {
}
rebuildViews();
return myRunContentDescriptor;
}