@@ -9,15 +9,19 @@ import org.javacs.ktda.core.event.ExitEvent
99import org.javacs.ktda.core.event.BreakpointStopEvent
1010import org.javacs.ktda.core.event.ExceptionStopEvent
1111import org.javacs.ktda.core.event.StepStopEvent
12+ import org.javacs.ktda.core.event.ThreadEvent
1213import org.javacs.ktda.jdi.exception.JDIException
1314import com.sun.jdi.VirtualMachine
1415import com.sun.jdi.VMDisconnectedException
1516import com.sun.jdi.event.VMDeathEvent
1617import com.sun.jdi.event.Event as JDIEvent
1718import com.sun.jdi.event.LocatableEvent as JDILocatableEvent
1819import com.sun.jdi.event.EventSet as JDIEventSet
20+ import com.sun.jdi.event.BreakpointEvent as JDIBreakpointEvent
1921import com.sun.jdi.event.StepEvent as JDIStepEvent
2022import 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
2125import java.util.concurrent.ConcurrentHashMap
2226import kotlin.reflect.KClass
2327
@@ -31,7 +35,8 @@ class VMEventBus(private val vm: VirtualMachine): DebuggeeEventBus {
3135 override val exitListeners = ListenerList <ExitEvent >()
3236 override val breakpointListeners = ListenerList <BreakpointStopEvent >()
3337 override val stepListeners = ListenerList <StepStopEvent >()
34- override var exceptionListeners = ListenerList <ExceptionStopEvent >()
38+ override val exceptionListeners = ListenerList <ExceptionStopEvent >()
39+ override val threadListeners = ListenerList <ThreadEvent >()
3540
3641 init {
3742 startAsyncPoller()
@@ -71,7 +76,7 @@ class VMEventBus(private val vm: VirtualMachine): DebuggeeEventBus {
7176 }
7277
7378 private fun hookListeners () {
74- subscribe(com.sun.jdi.event. BreakpointEvent ::class ) {
79+ subscribe(JDIBreakpointEvent ::class ) {
7580 breakpointListeners.fire(BreakpointStopEvent (
7681 threadID = toThreadID(it.jdiEvent)
7782 ))
@@ -90,6 +95,12 @@ class VMEventBus(private val vm: VirtualMachine): DebuggeeEventBus {
9095 ))
9196 it.resumeThreads = false
9297 }
98+ subscribe(JDIThreadStartEvent ::class ) {
99+ threadListeners.fire(ThreadEvent )
100+ }
101+ subscribe(JDIThreadDeathEvent ::class ) {
102+ threadListeners.fire(ThreadEvent )
103+ }
93104 }
94105
95106 private fun toThreadID (event : JDILocatableEvent ) = event.thread().uniqueID()
0 commit comments