Ok. So if I do a skeleton of that layout inside a method like the following, I it works, so I think we're parsing the overall structure correctly. Here's the actual snippet I put in an existing function:
val f = Future { blocking {
try {
do_something()
} catch {
case Bad() => ()
}
} }
Messing around with adding bad syntax to this to this, I can get it to fail to set a breakpoint either by putting bad syntax in the body of the try, or in the body of the catch. So in this case is is possible code coming after the breakpoint can cause it to fail the parse, if we fail in the catch body.
So more blind divide and conquer - remove the body of the catch block, does the breakpoint resolve a class when you toggle it then? If so, put it back, and remove catch clauses until you get to clause that changes the behavior. And then, it's either the destructuring in the catch clause, or something in the body of the clause, and we can go from there.
If clearing the catch clause doesn't make it go away, start removing statements in the try body, before the breakpoint until the breakpoint can resolve, and we can drill down into the last statement you deleted before it started working.