diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java index 9cb61ef6eaee..4279e6ea7aad 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java @@ -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(); diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java index 9feb928c02b7..9c73e63e3d09 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java @@ -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); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java index 4df444162c32..4928340ff8a1 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java @@ -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(); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerSessionTabBase.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerSessionTabBase.java index 6be41239a8ea..e3848ca9b79f 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerSessionTabBase.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerSessionTabBase.java @@ -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; diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java index f1bc76f7b52f..a1ee9be16301 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java @@ -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 myViews = new ArrayList(); - 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; }