@@ -17,6 +17,8 @@ import com.intellij.xdebugger.XDebugProcessStarter
17
17
import com.intellij.xdebugger.XDebugSession
18
18
import com.jetbrains.debugger.wip.WipLocalVmConnection
19
19
import com.jetbrains.nodeJs.NodeChromeDebugProcess
20
+ import kotlinx.coroutines.Dispatchers
21
+ import kotlinx.coroutines.withContext
20
22
import org.jetbrains.io.LocalFileFinder
21
23
import software.aws.toolkits.jetbrains.services.PathMapping
22
24
import software.aws.toolkits.jetbrains.services.lambda.execution.sam.SamRunningState
@@ -25,36 +27,42 @@ import java.net.InetSocketAddress
25
27
object NodeJsDebugUtils {
26
28
private const val NODE_MODULES = " node_modules"
27
29
28
- fun createDebugProcess (
30
+ suspend fun createDebugProcess (
29
31
environment : ExecutionEnvironment ,
30
32
state : SamRunningState ,
31
33
debugHost : String ,
32
34
debugPorts : List <Int >
33
- ): XDebugProcessStarter = object : XDebugProcessStarter () {
34
- override fun start (session : XDebugSession ): XDebugProcess {
35
- val mappings = createBiMapMappings(state.pathMappings)
36
- val fileFinder = RemoteDebuggingFileFinder (mappings, LocalFileSystemFileFinder ())
35
+ ): XDebugProcessStarter {
36
+ val executionResult = withContext(Dispatchers .IO ) {
37
+ // needs to run off EDT since it resolves credentials
38
+ state.execute(environment.executor, environment.runner)
39
+ }
40
+
41
+ return object : XDebugProcessStarter () {
42
+ override fun start (session : XDebugSession ): XDebugProcess {
43
+ val mappings = createBiMapMappings(state.pathMappings)
44
+ val fileFinder = RemoteDebuggingFileFinder (mappings, LocalFileSystemFileFinder ())
37
45
38
- val connection = WipLocalVmConnection ()
39
- val executionResult = state.execute(environment.executor, environment.runner)
46
+ val connection = WipLocalVmConnection ()
40
47
41
- val process = NodeChromeDebugProcess (session, fileFinder, connection, executionResult)
48
+ val process = NodeChromeDebugProcess (session, fileFinder, connection, executionResult)
42
49
43
- val processHandler = executionResult.processHandler
44
- val socketAddress = InetSocketAddress (debugHost, debugPorts.first())
50
+ val processHandler = executionResult.processHandler
51
+ val socketAddress = InetSocketAddress (debugHost, debugPorts.first())
45
52
46
- if (processHandler == null || processHandler.isStartNotified) {
47
- connection.open(socketAddress)
48
- } else {
49
- processHandler.addProcessListener(
50
- object : ProcessAdapter () {
51
- override fun startNotified (event : ProcessEvent ) {
52
- connection.open(socketAddress)
53
+ if (processHandler == null || processHandler.isStartNotified) {
54
+ connection.open(socketAddress)
55
+ } else {
56
+ processHandler.addProcessListener(
57
+ object : ProcessAdapter () {
58
+ override fun startNotified (event : ProcessEvent ) {
59
+ connection.open(socketAddress)
60
+ }
53
61
}
54
- }
55
- )
62
+ )
63
+ }
64
+ return process
56
65
}
57
- return process
58
66
}
59
67
}
60
68
0 commit comments