package Ġorg . jetbrains . haskell . debugger . breakpoints Ċ Ċ import Ġorg . jetbrains . haskell . debugger . H askell Debug Process Ċ import Ġcom . intellij . x debugger . breakpoints . X Breakpoint Handler Ċ import Ġcom . intellij . x debugger . breakpoints . X Line Breakpoint Ċ import Ġcom . intellij . x debugger . breakpoints . X Breakpoint Type Ċ import Ġcom . intellij . x debugger . breakpoints . X Breakpoint Properties Ċ import Ġorg . jetbrains . haskell . debugger . utils . H askell Utils Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . notification . Notifications Ċ import Ġcom . intellij . notification . Notification Ċ import Ġcom . intellij . notification . Notification Type Ċ import Ġcom . intellij . openapi . util . Key Ċ import Ġjava . util . ArrayList Ċ import Ġorg . jetbrains . haskell . debugger . parser . Hs File Position Ċ import Ġorg . jetbrains . haskell . debugger . parser . Break Info Ċ import Ġorg . jetbrains . haskell . debugger . utils . UI Utils Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ Ċ class ĠHaskell Line Breakpoint Handler ( val Ġproject : ĠProject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreakpoint Type Class : ĠClass < out ĠX Breakpoint Type < X Line Breakpoint < X Breakpoint Properties <* >>, Ġ* >>, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdebug Process : ĠHaskell Debug Process ) Ċ : ĠX Breakpoint Handler < X Line Breakpoint < X Breakpoint Properties <* >> >( breakpoint Type Class ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠPROJECT _ KEY : ĠKey < Project > Ġ= ĠKey (" org . jetbrains . haskell . debugger . breakpoints . Project For Breakpoint ") ĊĠĠĠĠĠĠĠ Ġval ĠBRE AK S _ LIST _ KEY : ĠKey < ArrayList < Break Info >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey (" org . jetbrains . haskell . debugger . breakpoints . Break List For Breakpoint ") ĊĠĠĠĠĠĠĠ Ġval ĠINDEX _ IN _ BREAK S _ LIST _ KEY : ĠKey < Int > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey (" org . jetbrains . haskell . debugger . breakpoints . Break List Index For Breakpoint ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠGET _ MODULE _ ERR _ TITLE Ġ= Ġ" Debug Ġexecution Ġerror " ĊĠĠĠ Ġprivate Ġfun ĠGET _ MODULE _ ERR _ MSG ( file : ĠVirtual File ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Module Ġname Ġis Ġnot Ġs pes ified Ġin Ġfile : Ġ${ file . canonical Path }" ĊĠĠĠ Ġprivate Ġval ĠREMOVE _ WARN _ TITLE Ġ= Ġ" Remove Ġbreakpoint Ġwarning " ĊĠĠĠ Ġprivate Ġval ĠREMOVE _ WARN _ MSG Ġ= ĠĠ Ġ" Attempt Ġto Ġremove Ġbreakpoint Ġwhile Ġdebugger Ġis Ġbusy ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Removing Ġaction Ġwill Ġtake Ġeffect Ġonly Ġafter Ġnext Ġcommand " ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġnew Ġbreakpoint Ġis Ġadded ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbreakpoint Ġadded Ġbreakpoint ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġregister Breakpoint ( breakpoint : ĠX Line Breakpoint < X Breakpoint Properties < out ĠAny ? >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbreakpoint LineNumber : ĠInt ? Ġ= Ġget H askell Breakpoint LineNumber ( breakpoint ) ĊĠĠĠĠĠĠĠ Ġif Ġ( breakpoint LineNumber Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmoduleName Ġ= Ġget ModuleName ( breakpoint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbreaks List Ġ= Ġdebug Process . sync Break List For Line ( moduleName , Ġbreakpoint LineNumber ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd UserData ( breakpoint , Ġbreaks List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Process . add Breakpoint ( moduleName , Ġbreakpoint LineNumber , Ġbreakpoint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġbreakpoint Ġis Ġremoved . ĠIf Ġdebugger Ġis Ġbusy Ġwhen Ġthis Ġmethod Ġis Ġcalled , Ġremove Ġaction Ġwill Ġbe ĊĠĠĠĠ Ġ* Ġperformed Ġany Ġway Ġand Ġwarning Ġwill Ġbe Ġshown Ġto Ġuser . ĠActually , Ġremoving Ġshould Ġbe Ġforbidden Ġbut Ġit Ġrequires ĊĠĠĠĠ Ġ* Ġcontrol Ġover ĠUI Ġpart Ġof Ġbreakpoint Ġremoving Ġand ĠI Ġdon 't Ġknow Ġhow Ġto Ġdo Ġit Ġfor Ġnow ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbreakpoint Ġbreakpoint Ġto Ġremove ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġunregister Breakpoint ( breakpoint : ĠX Line Breakpoint < X Breakpoint Properties < out ĠAny ? >>, Ġis Temporary : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif (! debug Process . is Ready For Next Command ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotifications . Bus . notify ( Notification ("", ĠREMOVE _ WARN _ TITLE , ĠREMOVE _ WARN _ MSG , ĠNotification Type . WARNING )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbreakpoint LineNumber : ĠInt ? Ġ= Ġget H askell Breakpoint LineNumber ( breakpoint ) ĊĠĠĠĠĠĠĠ Ġif Ġ( breakpoint LineNumber Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Process . remove Breakpoint ( H askell Utils . get ModuleName ( project , Ġbreakpoint . source Position !!. file ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreakpoint LineNumber ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget ModuleName ( breakpoint : ĠX Line Breakpoint < X Breakpoint Properties < out ĠAny ? >> ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġbreakpoint . source Position !!. file ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHaskell Utils . get ModuleName ( project , Ġfile ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotifications . Bus . notify ( Notification ("", ĠGET _ MODULE _ ERR _ TITLE , ĠGET _ MODULE _ ERR _ MSG ( file ), ĠNotification Type . ERROR )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget H askell Breakpoint LineNumber ( breakpoint : ĠX Line Breakpoint < X Breakpoint Properties < out ĠAny ? >> ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġline Num Ġ= Ġbreakpoint . source Position ?. line ĊĠĠĠĠĠĠĠ Ġif Ġ( lineNum Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHaskell Utils . zero Based To H askell LineNumber ( lineNum ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġsome Ġdata Ġthat Ġwill Ġbe Ġused Ġin Ġselect Ġbreakpoint Ġmechanism ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġadd UserData ( breakpoint : ĠX Line Breakpoint < X Breakpoint Properties < out ĠAny ? >>, Ġbreaks List : ĠArrayList < Break Info >) Ġ{ ĊĠĠĠĠĠĠĠ Ġbreakpoint . put UserData ( PROJECT _ KEY , Ġproject ) ĊĠĠĠĠĠĠĠ Ġbreakpoint . put UserData ( BREAK S _ LIST _ KEY , Ġbreaks List ) ĊĠĠĠĠĠĠĠ Ġbreakpoint . put UserData ( INDEX _ IN _ BREAK S _ LIST _ KEY , Ġ 0 ) ĊĠĠĠ Ġ} Ċ }