@@ -97,30 +97,36 @@ class JDIDebuggee(
97
97
/* * Tries to set a breakpoint */
98
98
private fun setBreakpoint (filePath : String , lineNumber : Long ) {
99
99
val eventRequestManager = vm.eventRequestManager()
100
+
100
101
toJVMClassNames(filePath)
101
- .flatMap { listOf (it, " $it $*" ) } // For local types
102
102
.forEach { className ->
103
103
// Try setting breakpoint using a ClassPrepareRequest
104
104
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) }
108
109
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
+ }
117
120
118
121
// Try setting breakpoint using loaded VM classes
119
122
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
+ }
124
130
}
125
131
}
126
132
0 commit comments