@@ -9,15 +9,19 @@ import org.javacs.ktda.core.event.ExitEvent
9
9
import org.javacs.ktda.core.event.BreakpointStopEvent
10
10
import org.javacs.ktda.core.event.ExceptionStopEvent
11
11
import org.javacs.ktda.core.event.StepStopEvent
12
+ import org.javacs.ktda.core.event.ThreadEvent
12
13
import org.javacs.ktda.jdi.exception.JDIException
13
14
import com.sun.jdi.VirtualMachine
14
15
import com.sun.jdi.VMDisconnectedException
15
16
import com.sun.jdi.event.VMDeathEvent
16
17
import com.sun.jdi.event.Event as JDIEvent
17
18
import com.sun.jdi.event.LocatableEvent as JDILocatableEvent
18
19
import com.sun.jdi.event.EventSet as JDIEventSet
20
+ import com.sun.jdi.event.BreakpointEvent as JDIBreakpointEvent
19
21
import com.sun.jdi.event.StepEvent as JDIStepEvent
20
22
import com.sun.jdi.event.ExceptionEvent as JDIExceptionEvent
23
+ import com.sun.jdi.event.ThreadStartEvent as JDIThreadStartEvent
24
+ import com.sun.jdi.event.ThreadDeathEvent as JDIThreadDeathEvent
21
25
import java.util.concurrent.ConcurrentHashMap
22
26
import kotlin.reflect.KClass
23
27
@@ -31,7 +35,8 @@ class VMEventBus(private val vm: VirtualMachine): DebuggeeEventBus {
31
35
override val exitListeners = ListenerList <ExitEvent >()
32
36
override val breakpointListeners = ListenerList <BreakpointStopEvent >()
33
37
override val stepListeners = ListenerList <StepStopEvent >()
34
- override var exceptionListeners = ListenerList <ExceptionStopEvent >()
38
+ override val exceptionListeners = ListenerList <ExceptionStopEvent >()
39
+ override val threadListeners = ListenerList <ThreadEvent >()
35
40
36
41
init {
37
42
startAsyncPoller()
@@ -71,7 +76,7 @@ class VMEventBus(private val vm: VirtualMachine): DebuggeeEventBus {
71
76
}
72
77
73
78
private fun hookListeners () {
74
- subscribe(com.sun.jdi.event. BreakpointEvent ::class ) {
79
+ subscribe(JDIBreakpointEvent ::class ) {
75
80
breakpointListeners.fire(BreakpointStopEvent (
76
81
threadID = toThreadID(it.jdiEvent)
77
82
))
@@ -90,6 +95,12 @@ class VMEventBus(private val vm: VirtualMachine): DebuggeeEventBus {
90
95
))
91
96
it.resumeThreads = false
92
97
}
98
+ subscribe(JDIThreadStartEvent ::class ) {
99
+ threadListeners.fire(ThreadEvent )
100
+ }
101
+ subscribe(JDIThreadDeathEvent ::class ) {
102
+ threadListeners.fire(ThreadEvent )
103
+ }
93
104
}
94
105
95
106
private fun toThreadID (event : JDILocatableEvent ) = event.thread().uniqueID()
0 commit comments