@@ -97,30 +97,36 @@ class JDIDebuggee(
9797 /* * Tries to set a breakpoint */
9898 private fun setBreakpoint (filePath : String , lineNumber : Long ) {
9999 val eventRequestManager = vm.eventRequestManager()
100+
100101 toJVMClassNames(filePath)
101- .flatMap { listOf (it, " $it $*" ) } // For local types
102102 .forEach { className ->
103103 // Try setting breakpoint using a ClassPrepareRequest
104104
105- val request = eventRequestManager
106- .createClassPrepareRequest()
107- .apply { addClassFilter(className) }
105+ for (name in listOf (className, " $className $*" )) { // For local types
106+ val request = eventRequestManager
107+ .createClassPrepareRequest()
108+ .apply { addClassFilter(className) }
108109
109- breakpointSubscriptions.add(eventBus.subscribe(ClassPrepareEvent ::class ) {
110- if (it.jdiEvent.request() == request) {
111- LOG .info(" Setting breakpoint at prepared type {}" , it.jdiEvent.referenceType().name())
112- setBreakpointAtType(it.jdiEvent.referenceType(), lineNumber)
113- }
114- })
115-
116- request.enable()
110+ breakpointSubscriptions.add(eventBus.subscribe(ClassPrepareEvent ::class ) {
111+ if (it.jdiEvent.request() == request) {
112+ val referenceType = it.jdiEvent.referenceType()
113+ LOG .trace(" Setting breakpoint at prepared type {}" , referenceType.name())
114+ setBreakpointAtType(referenceType, lineNumber)
115+ }
116+ })
117+
118+ request.enable()
119+ }
117120
118121 // Try setting breakpoint using loaded VM classes
119122
120- vm.classesByName(className).forEach {
121- LOG .info(" Setting breakpoint at known type {}" , it.name())
122- setBreakpointAtType(it, lineNumber)
123- }
123+ val classPattern = " ^${Regex .escape(className)} (?:\\ $.*)?" .toRegex()
124+ vm.allClasses()
125+ .filter { classPattern.matches(it.name()) }
126+ .forEach {
127+ LOG .trace(" Setting breakpoint at known type {}" , it.name())
128+ setBreakpointAtType(it, lineNumber)
129+ }
124130 }
125131 }
126132
0 commit comments