diff options
author | Polina Koval <kovalp@google.com> | 2022-05-26 22:14:36 +0100 |
---|---|---|
committer | Polina Koval <kovalp@google.com> | 2022-05-26 22:31:27 +0100 |
commit | 237f1adde802c83d5819200a3b9560db1e8e17d0 (patch) | |
tree | 7fc0a8681cbdfcae440d47e38b69e11e063cb8f7 | |
parent | f34afc5c9d7e5fa9e6e66e049a8ade63f7482495 (diff) | |
download | idea-237f1adde802c83d5819200a3b9560db1e8e17d0.tar.gz |
Add necessary information for Apply Changes into Java Debugger process handler
Fixes: 231647054
Test: testAllInformationForApplyChangesAndPositionManger
Change-Id: I132844d286b19a280927e62873fbb1c0271a2b35
3 files changed, 30 insertions, 2 deletions
diff --git a/android/src/com/android/tools/idea/run/debug/StartJavaDebugger.kt b/android/src/com/android/tools/idea/run/debug/StartJavaDebugger.kt index d4e47b0ccdd..9b23bf481e5 100644 --- a/android/src/com/android/tools/idea/run/debug/StartJavaDebugger.kt +++ b/android/src/com/android/tools/idea/run/debug/StartJavaDebugger.kt @@ -19,9 +19,11 @@ import com.android.annotations.concurrency.AnyThread import com.android.ddmlib.Client import com.android.ddmlib.IDevice import com.android.tools.idea.flags.StudioFlags +import com.android.tools.idea.run.AndroidSessionInfo import com.intellij.debugger.DebuggerManagerEx import com.intellij.debugger.engine.JavaDebugProcess import com.intellij.execution.ExecutionException +import com.intellij.execution.configurations.RunConfiguration import com.intellij.execution.runners.ExecutionEnvironment import com.intellij.execution.runners.ProgramRunner import com.intellij.execution.ui.ConsoleView @@ -61,7 +63,15 @@ fun attachJavaDebuggerToClient( runInEdt { promise.catchError { val session = XDebuggerManager.getInstance(project).startSession(executionEnvironment, starter) - session.debugProcess.processHandler.startNotify() + val debugProcessHandler = session.debugProcess.processHandler + debugProcessHandler.startNotify() + val executor = executionEnvironment.executor + AndroidSessionInfo.create(debugProcessHandler, + session.runContentDescriptor, + executionEnvironment.runProfile as? RunConfiguration, + executor.id, + executor.actionName, + executionEnvironment.executionTarget) promise.setResult(session as XDebugSessionImpl) } } @@ -142,6 +152,8 @@ private fun getDebugProcessStarter( val debuggerSession = DebuggerManagerEx.getInstanceEx(project).attachVirtualMachine(debugEnvironment) ?: throw ExecutionException("Unable to start debugger session") + debuggerSession.process.processHandler.putUserData(AndroidSessionInfo.ANDROID_DEVICE_API_LEVEL, client.device.version) + promise.setResult(object : XDebugProcessStarter() { override fun start(session: XDebugSession): XDebugProcess { return JavaDebugProcess.create(session, debuggerSession) diff --git a/android/src/com/android/tools/idea/run/tasks/ConnectJavaDebuggerTask.java b/android/src/com/android/tools/idea/run/tasks/ConnectJavaDebuggerTask.java index 1946e37af7a..3c863edfd4d 100644 --- a/android/src/com/android/tools/idea/run/tasks/ConnectJavaDebuggerTask.java +++ b/android/src/com/android/tools/idea/run/tasks/ConnectJavaDebuggerTask.java @@ -98,7 +98,8 @@ public class ConnectJavaDebuggerTask extends ConnectDebuggerTaskBase { return Unit.INSTANCE; } ).onSuccess(session -> { - processHandler.copyUserDataTo(session.getDebugProcess().getProcessHandler()); + ProcessHandler debugProcessHandler = session.getDebugProcess().getProcessHandler(); + captureLogcatOutput(client, debugProcessHandler); session.showSessionTab(); }); return null; diff --git a/android/testSrc/com/android/tools/idea/run/debug/AndroidJavaDebuggerTest.kt b/android/testSrc/com/android/tools/idea/run/debug/AndroidJavaDebuggerTest.kt index 1f0a905d4cc..a876cc8b2df 100644 --- a/android/testSrc/com/android/tools/idea/run/debug/AndroidJavaDebuggerTest.kt +++ b/android/testSrc/com/android/tools/idea/run/debug/AndroidJavaDebuggerTest.kt @@ -20,6 +20,7 @@ import com.android.sdklib.AndroidVersion import com.android.testutils.MockitoKt.any import com.android.testutils.MockitoKt.eq import com.android.tools.idea.flags.StudioFlags +import com.android.tools.idea.run.AndroidSessionInfo import com.android.tools.idea.run.configuration.execution.RunnableClientsService import com.android.tools.idea.run.editor.AndroidJavaDebugger import com.google.common.truth.Truth.assertThat @@ -84,6 +85,20 @@ class AndroidJavaDebuggerTest { } @Test + fun testAllInformationForApplyChangesAndPositionManger() { + val session = attachJavaDebuggerToClient(project, client, executionEnvironment, null, + onDebugProcessDestroyed = { device -> device.forceStop(APP_PACKAGE) }).blockingGet(10, + TimeUnit.SECONDS) + val processHandler = session!!.debugProcess.processHandler + // For AndroidPositionManager. + assertThat(processHandler.getUserData(AndroidSessionInfo.ANDROID_DEVICE_API_LEVEL)).isEqualTo(AndroidVersion(26)) + // For Apply Changes. + val sessionInfo = processHandler.getUserData(AndroidSessionInfo.KEY)!! + assertThat(sessionInfo.processHandler).isEqualTo(processHandler) + assertThat(sessionInfo.executor).isEqualTo(executionEnvironment.executor) + } + + @Test fun testSessionCreated() { val session = attachJavaDebuggerToClient(project, client, executionEnvironment, null, onDebugProcessDestroyed = { device -> device.forceStop(APP_PACKAGE) }).blockingGet(10, |