diff options
Diffstat (limited to 'java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java')
-rw-r--r-- | java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java | 77 |
1 files changed, 34 insertions, 43 deletions
diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java index 50f525dc5185..c6491a2b8a3f 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java @@ -30,6 +30,7 @@ import com.intellij.execution.Executor; import com.intellij.execution.configurations.*; import com.intellij.execution.executors.DefaultDebugExecutor; import com.intellij.execution.runners.ExecutionEnvironment; +import com.intellij.execution.runners.ExecutionEnvironmentBuilder; import com.intellij.execution.runners.JavaPatchableProgramRunner; import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.openapi.fileEditor.FileDocumentManager; @@ -58,51 +59,43 @@ public class GenericDebuggerRunner extends JavaPatchableProgramRunner<GenericDeb } @Override - protected RunContentDescriptor doExecute(@NotNull final Project project, - @NotNull final RunProfileState state, - final RunContentDescriptor contentToReuse, - @NotNull final ExecutionEnvironment env) throws ExecutionException { + protected RunContentDescriptor doExecute(@NotNull Project project, + @NotNull RunProfileState state, + @Nullable RunContentDescriptor contentToReuse, + @NotNull ExecutionEnvironment env) throws ExecutionException { FileDocumentManager.getInstance().saveAllDocuments(); - return createContentDescriptor(project, state, contentToReuse, env); + return createContentDescriptor(state, contentToReuse == null || env.getContentToReuse() == contentToReuse + ? env + : new ExecutionEnvironmentBuilder(env).contentToReuse(contentToReuse).build()); } @Nullable - protected RunContentDescriptor createContentDescriptor(Project project, RunProfileState state, - RunContentDescriptor contentToReuse, - ExecutionEnvironment env) throws ExecutionException { + protected RunContentDescriptor createContentDescriptor(@NotNull RunProfileState state, @NotNull ExecutionEnvironment environment) throws ExecutionException { if (state instanceof JavaCommandLine) { final JavaParameters parameters = ((JavaCommandLine)state).getJavaParameters(); - runCustomPatchers(parameters, env.getExecutor(), env.getRunProfile()); + runCustomPatchers(parameters, environment.getExecutor(), environment.getRunProfile()); RemoteConnection connection = DebuggerManagerImpl.createDebugParameters(parameters, true, DebuggerSettings.getInstance().DEBUGGER_TRANSPORT, "", false); - return attachVirtualMachine(project, state, contentToReuse, env, connection, true); + return attachVirtualMachine(state, environment, connection, true); } if (state instanceof PatchedRunnableState) { - final RemoteConnection connection = doPatch(new JavaParameters(), env.getRunnerSettings()); - return attachVirtualMachine(project, state, contentToReuse, env, connection, true); + final RemoteConnection connection = doPatch(new JavaParameters(), environment.getRunnerSettings()); + return attachVirtualMachine(state, environment, connection, true); } if (state instanceof RemoteState) { - final RemoteConnection connection = createRemoteDebugConnection((RemoteState)state, env.getRunnerSettings()); - return attachVirtualMachine(project, state, contentToReuse, env, connection, false); + final RemoteConnection connection = createRemoteDebugConnection((RemoteState)state, environment.getRunnerSettings()); + return attachVirtualMachine(state, environment, connection, false); } return null; } @Nullable - protected RunContentDescriptor attachVirtualMachine(final Project project, RunProfileState state, - RunContentDescriptor contentToReuse, - ExecutionEnvironment env, RemoteConnection connection, boolean pollConnection) - throws ExecutionException { - DefaultDebugUIEnvironment debugEnvironment = new DefaultDebugUIEnvironment(project, - env.getExecutor(), - this, - env, - state, - contentToReuse, - connection, - pollConnection); - DebugEnvironment environment = debugEnvironment.getEnvironment(); - final DebuggerSession debuggerSession = DebuggerManagerEx.getInstanceEx(project).attachVirtualMachine(environment); + protected RunContentDescriptor attachVirtualMachine(RunProfileState state, + @NotNull ExecutionEnvironment env, + RemoteConnection connection, + boolean pollConnection) throws ExecutionException { + DebugEnvironment environment = new DefaultDebugUIEnvironment(env, state, connection, pollConnection).getEnvironment(); + final DebuggerSession debuggerSession = DebuggerManagerEx.getInstanceEx(env.getProject()).attachVirtualMachine(environment); if (debuggerSession == null) { return null; } @@ -118,22 +111,20 @@ public class GenericDebuggerRunner extends JavaPatchableProgramRunner<GenericDeb debugProcess.putUserData(BatchEvaluator.REMOTE_SESSION_KEY, Boolean.TRUE); } - XDebugSession debugSession = - XDebuggerManager.getInstance(project).startSession(this, env, contentToReuse, new XDebugProcessStarter() { - @Override - @NotNull - public XDebugProcess start(@NotNull XDebugSession session) { - XDebugSessionImpl sessionImpl = (XDebugSessionImpl)session; - ExecutionResult executionResult = debugProcess.getExecutionResult(); - sessionImpl.addExtraActions(executionResult.getActions()); - if (executionResult instanceof DefaultExecutionResult) { - sessionImpl.addRestartActions(((DefaultExecutionResult)executionResult).getRestartActions()); - sessionImpl.addExtraStopActions(((DefaultExecutionResult)executionResult).getAdditionalStopActions()); - } - return new JavaDebugProcess(session, debuggerSession); + return XDebuggerManager.getInstance(env.getProject()).startSession(env, new XDebugProcessStarter() { + @Override + @NotNull + public XDebugProcess start(@NotNull XDebugSession session) { + XDebugSessionImpl sessionImpl = (XDebugSessionImpl)session; + ExecutionResult executionResult = debugProcess.getExecutionResult(); + sessionImpl.addExtraActions(executionResult.getActions()); + if (executionResult instanceof DefaultExecutionResult) { + sessionImpl.addRestartActions(((DefaultExecutionResult)executionResult).getRestartActions()); + sessionImpl.addExtraStopActions(((DefaultExecutionResult)executionResult).getAdditionalStopActions()); } - }); - return debugSession.getRunContentDescriptor(); + return new JavaDebugProcess(session, debuggerSession); + } + }).getRunContentDescriptor(); } private static RemoteConnection createRemoteDebugConnection(RemoteState connection, final RunnerSettings settings) { |