/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 5 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . idea . debugger Ċ Ċ import Ġcom . intellij . debugger . Debugger Invocation Util Ċ import Ġcom . intellij . debugger . Debugger Manager Ex Ċ import Ġcom . intellij . debugger . Source Position Ċ import Ġcom . intellij . debugger . engine . Debug Process Impl Ċ import Ġcom . intellij . debugger . engine . Method Filter Ċ import Ġcom . intellij . debugger . engine . Suspend Context Impl Ċ import Ġcom . intellij . debugger . engine . evaluation . Evaluation Context Impl Ċ import Ġcom . intellij . debugger . impl . Debugger Context Impl Ċ import Ġcom . intellij . debugger . impl . Position Util Ċ import Ġcom . intellij . debugger . settings . Debugger Settings Ċ import Ġcom . intellij . debugger . ui . breakpoints . Breakpoint Manager Ċ import Ġcom . intellij . execution . process . Process Output Types Ċ import Ġcom . intellij . openapi . application . Modal ity State Ċ import Ġcom . intellij . openapi . roots . J dk Order Entry Ċ import Ġcom . intellij . openapi . roots . libraries . Library Util Ċ import Ġcom . intellij . openapi . util . io . File Util Ċ import Ġcom . intellij . psi . Psi Document Manager Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . Psi Manager Ċ import Ġcom . intellij . psi . search . Filename Index Ċ import Ġcom . intellij . x debugger . X Debugger Manager Ċ import Ġcom . intellij . x debugger . X Debugger Util Ċ import Ġcom . intellij . x debugger . breakpoints . X Breakpoint Ċ import Ġcom . intellij . x debugger . breakpoints . X Breakpoint Properties Ċ import Ġcom . intellij . x debugger . breakpoints . X Breakpoint Type Ċ import Ġcom . intellij . x debugger . breakpoints . X Line Breakpoint Type Ċ import Ġorg . jetbrains . kotlin . idea . debugger . breakpoints . Kotlin Field Breakpoint Ċ import Ġorg . jetbrains . kotlin . idea . debugger . breakpoints . Kotlin Field Breakpoint Type Ċ import Ġorg . jetbrains . kotlin . idea . test . Jet J dk And Library Project Descriptor Ċ import Ġorg . jetbrains . kotlin . idea . util . application . run Read Action Ċ import Ġorg . jetbrains . kotlin . idea . util . application . run Write Action Ċ import Ġorg . jetbrains . kotlin . test . In Text Directives Utils Ċ import Ġorg . jetbrains . kotlin . test . In Text Directives Utils . find String With Prefixes Ċ import Ġjavax . swing . Swing Utilities Ċ Ċ abstract Ġclass ĠKotlin Debugger TestBase Ġ: ĠKotlin Debugger TestCase () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġold Settings : ĠDebugger Settings ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġold Is Filter For Std lib Already Added Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġold Disable Kotlin Internal Classes Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġold Render Deleg ated Properties Ġ= Ġfalse ĊĊĠĠĠ Ġprotected Ġvar Ġevaluation Context : ĠEvaluation Context Impl ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġdebugger Context : ĠDebugger Context Impl ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġinit Application () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . init Application () ĊĠĠĠĠĠĠĠ Ġsave Default Settings () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . te ar Down () ĊĠĠĠĠĠĠĠ Ġrestore Default Settings () ĊĊĠĠĠĠĠĠĠ Ġevaluation Context Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġdebugger Context Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġconfigure Settings ( file Text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Settings Ġ= ĠKotlin Debugger Settings . getInstance () ĊĠĠĠĠĠĠĠ Ġkotlin Settings . DEBUG _ IS _ FILTER _ FOR _ STD LIB _ AL READY _ AD DED Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġkotlin Settings . DEBUG _ DISABLE _ K OT LIN _ INTERNAL _ CLASSES Ġ= Ġfile Text . getValue For Setting (" DISABLE _ K OT LIN _ INTERNAL _ CLASSES ", Ġold Disable Kotlin Internal Classes ) ĊĠĠĠĠĠĠĠ Ġkotlin Settings . DEBUG _ RENDER _ DE LEG ATED _ PROPERTIES Ġ= Ġfile Text . getValue For Setting (" RENDER _ DE LEG ATED _ PROPERTIES ", Ġold Render Deleg ated Properties ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdebugger Settings Ġ= ĠDebugger Settings . getInstance () !! ĊĠĠĠĠĠĠĠ Ġdebugger Settings . SKIP _ SYN TH ET IC _ METHO DS Ġ= Ġfile Text . getValue For Setting (" SKIP _ SYN TH ET IC _ METHO DS ", Ġold Settings !!. SKIP _ SYN TH ET IC _ METHO DS ) ĊĠĠĠĠĠĠĠ Ġdebugger Settings . SKIP _ CON STRUCT ORS Ġ= Ġfile Text . getValue For Setting (" SKIP _ CON STRUCT ORS ", Ġold Settings !!. SKIP _ CON STRUCT ORS ) ĊĠĠĠĠĠĠĠ Ġdebugger Settings . SKIP _ CLASS LOAD ERS Ġ= Ġfile Text . getValue For Setting (" SKIP _ CLASS LOAD ERS ", Ġold Settings !!. SKIP _ CLASS LOAD ERS ) ĊĠĠĠĠĠĠĠ Ġdebugger Settings . TR ACING _ FILTER S _ ENABLED Ġ= Ġfile Text . getValue For Setting (" TR ACING _ FILTER S _ ENABLED ", Ġold Settings !!. TR ACING _ FILTER S _ ENABLED ) ĊĠĠĠĠĠĠĠ Ġdebugger Settings . SKIP _ GET TER S Ġ= Ġfile Text . getValue For Setting (" SKIP _ GET TER S ", Ġold Settings !!. SKIP _ GET TER S ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠString . getValue For Setting ( name : ĠString , ĠdefaultValue : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind String With Prefixes ( this , Ġ"// Ġ$ name : Ġ") ?. to Boolean () Ġ?: ĠdefaultValue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Default Settings () Ġ{ ĊĠĠĠĠĠĠĠ Ġold Is Filter For Std lib Already Added Ġ= ĠKotlin Debugger Settings . getInstance (). DEBUG _ IS _ FILTER _ FOR _ STD LIB _ AL READY _ AD DED ĊĠĠĠĠĠĠĠ Ġold Disable Kotlin Internal Classes Ġ= ĠKotlin Debugger Settings . getInstance (). DEBUG _ DISABLE _ K OT LIN _ INTERNAL _ CLASSES ĊĠĠĠĠĠĠĠ Ġold Render Deleg ated Properties Ġ= ĠKotlin Debugger Settings . getInstance (). DEBUG _ RENDER _ DE LEG ATED _ PROPERTIES ĊĠĠĠĠĠĠĠ Ġold Settings Ġ= ĠDebugger Settings . getInstance () !!. clone () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrestore Default Settings () Ġ{ ĊĠĠĠĠĠĠĠ ĠKotlin Debugger Settings . getInstance (). DEBUG _ IS _ FILTER _ FOR _ STD LIB _ AL READY _ AD DED Ġ= Ġold Is Filter For Std lib Already Added ĊĠĠĠĠĠĠĠ ĠKotlin Debugger Settings . getInstance (). DEBUG _ DISABLE _ K OT LIN _ INTERNAL _ CLASSES Ġ= Ġold Disable Kotlin Internal Classes ĊĠĠĠĠĠĠĠ ĠKotlin Debugger Settings . getInstance (). DEBUG _ RENDER _ DE LEG ATED _ PROPERTIES Ġ= Ġold Render Deleg ated Properties ĊĊĠĠĠĠĠĠĠ Ġval Ġdebugger Settings Ġ= ĠDebugger Settings . getInstance () !! ĊĠĠĠĠĠĠĠ Ġdebugger Settings . SKIP _ SYN TH ET IC _ METHO DS Ġ= Ġold Settings !!. SKIP _ SYN TH ET IC _ METHO DS ĊĠĠĠĠĠĠĠ Ġdebugger Settings . SKIP _ CON STRUCT ORS Ġ= Ġold Settings !!. SKIP _ CON STRUCT ORS ĊĠĠĠĠĠĠĠ Ġdebugger Settings . SKIP _ CLASS LOAD ERS Ġ= Ġold Settings !!. SKIP _ CLASS LOAD ERS ĊĠĠĠĠĠĠĠ Ġdebugger Settings . TR ACING _ FILTER S _ ENABLED Ġ= Ġold Settings !!. TR ACING _ FILTER S _ ENABLED ĊĠĠĠĠĠĠĠ Ġdebugger Settings . SKIP _ GET TER S Ġ= Ġold Settings !!. SKIP _ GET TER S ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġval Ġdp : ĠDebug Process Impl ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Debug Process () Ġ?: Ġthrow ĠAssertionError (" create Local Process () Ġshould Ġbe Ġcalled Ġbefore Ġget Debug Process () ") ĊĊĠĠĠ Ġpublic Ġfun Ġdo On Breakpoint ( action : ĠS uspend Context Impl . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Breakpoint Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Contexts ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . print Context () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . action () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġinit Contexts ( suspend Context : ĠS uspend Context Impl ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevaluation Context Ġ= Ġcreate Evaluation Context ( suspend Context ) ĊĠĠĠĠĠĠĠ Ġdebugger Context Ġ= Ġcreate Debugger Context ( suspend Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun ĠS uspend Context Impl . step Into ( ignore Filters : ĠBoolean , Ġsmart Step Filter : ĠMethod Filter ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdp . getManager Thread () !!. schedule ( dp . create Step Into Command ( this , Ġignore Filters , Ġsmart Step Filter )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun ĠS uspend Context Impl . step Out () Ġ{ ĊĠĠĠĠĠĠĠ Ġdp . getManager Thread () !!. schedule ( dp . create Step Out Command ( this )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun ĠS uspend Context Impl . print Context () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Read Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . get Frame Proxy () Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Read Action Ġprintln (" Context Ġthread Ġis Ġnull ", ĠProcess Output Types . SYSTEM ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Position Ġ= ĠPosition Util . getSource Position ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( render Source Position ( source Position ), ĠProcess Output Types . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġrender Source Position ( source Position : ĠSource Position ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( source Position Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" null " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġvirtual File Ġ= Ġsource Position . getFile (). get Virtual File () ĊĠĠĠĠĠĠĠ Ġif Ġ( virtual File Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Virtual File Ġfor Ġposition Ġis Ġnull " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlibrary Entry Ġ= ĠLibrary Util . find Library Entry ( virtual File , Ġget Project ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( library Entry Ġ!= Ġnull Ġ&& Ġ( library Entry Ġis ĠJ dk Order Entry Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Entry . get Present able Name () Ġ== ĠJet J dk And Library Project Descriptor . LIBRARY _ NAME )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFile Util . getName Without Extension ( virtual File . getName ()) Ġ+ Ġ". ! EXT !" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġvirtual File . getName () Ġ+ Ġ":" Ġ+ Ġ( source Position . getLine () Ġ+ Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġfinish () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo On Breakpoint Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresume ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Break points ( file : ĠPsi File ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . create Break points ( file ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( file Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠPsi Document Manager . getInstance ( my Project ). getDocument ( file ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġbreakpoint Manager Ġ= ĠX Debugger Manager . getInstance ( my Project ). get Breakpoint Manager () ĊĠĠĠĠĠĠĠ Ġval Ġbreakpoint Type Ġ= Ġjava Class < Kotlin Field Breakpoint Type >() Ġas ĠClass < out ĠX Breakpoint Type < X Breakpoint < X Breakpoint Properties <* >>, ĠX Breakpoint Properties <* >>> ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠX Debugger Util . getInstance (). find Breakpoint Type < X Breakpoint < X Breakpoint Properties <* >> >( breakpoint Type ) Ġas ĠKotlin Field Breakpoint Type ĊĠĠĠĠĠĠĠ Ġval Ġvirtual File Ġ= Ġfile . get Virtual File () ĊĊĠĠĠĠĠĠĠ Ġval Ġrunnable Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoffset Ġ= Ġ- 1 ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Text Ġ= Ġdocument . getText () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġfile Text . indexOf (" Field Watch point !", Ġoffset Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( offset Ġ== Ġ- 1 ) Ġbreak ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Line Ġ= Ġdocument . get LineNumber ( offset ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Ġ= Ġfile Text . substring ( document . getLine Start Offset ( comment Line ), Ġdocument . getLine End Offset ( comment Line )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Index Ġ= Ġcomment Line Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= Ġcomment . substring After ("// Field Watch point ! Ġ( "). substring Before (" )") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! type . can Put At ( virtual File , Ġline Index , Ġmy Project )) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Breakpoint Ġ= Ġrun Write Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreakpoint Manager . add Line Breakpoint ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġas ĠX Line Breakpoint Type < X Breakpoint Properties <* >>, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual File . getUrl (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype . create Breakpoint Properties ( virtual File , Ġline Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjava Breakpoint Ġ= ĠBreak point Manager . get Java Breakpoint ( xB reak point ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( java Breakpoint Ġis ĠKotlin Field Breakpoint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava Breakpoint . set FieldName ( fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava Breakpoint . set Watch Access ( file Text . getValue For Setting (" WATCH _ FIELD _ ACCESS ", Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava Breakpoint . set Watch Modification ( file Text . getValue For Setting (" WATCH _ FIELD _ MO DIF ICATION ", Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava Breakpoint . set Watch Initialization ( file Text . getValue For Setting (" WATCH _ FIELD _ INITIAL IS ATION ", Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBreak point Manager . add Breakpoint ( java Breakpoint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Kotlin Field Breakpoint Ġcreated Ġat Ġ${ file . get Virtual File (). getName ()} :$ line Index ", ĠProcess Output Types . SYSTEM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Swing Utilities . is Event Dispatch Thread ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDebugger Invocation Util . invoke And Wait ( my Project , Ġrunnable , ĠMod ality State . default Modal ity State ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrunnable . invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġcreate Additional Break points ( file Text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbreak points Ġ= ĠIn Text Directives Utils . find Lines With Prefixes Removed ( file Text , Ġ"// ĠADD ITION AL _ BREAK POINT : Ġ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( breakpoint Ġin Ġbreak points ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġbreakpoint . split (". kt :") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( position . size () Ġ== Ġ 2 ) Ġ{ Ġ" Couldn 't Ġparse Ġposition Ġfrom Ġtest Ġdirective : Ġdirective Ġ= Ġ$ breakpoint " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Breakpoint ( position [ 0 ], Ġposition [ 1 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Breakpoint ( fileName : ĠString , Ġline Marker : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġget Project () !! ĊĠĠĠĠĠĠĠ Ġval Ġsource Files Ġ= Ġrun Read Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFilename Index . getAll Files By Ext ( project , Ġ" kt "). filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getName (). contains ( fileName ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . contents To ByteArray (). toString (" UTF - 8 "). contains ( line Marker ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġassert ( source Files . size () Ġ== Ġ 1 ) Ġ{ Ġ" One Ġsource Ġfile Ġshould Ġbe Ġfound : Ġname Ġ= Ġ$ fileName , Ġsource Files Ġ= Ġ$ source Files " Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrunnable Ġ= ĠRunnable () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpsi SourceFile Ġ= ĠPsi Manager . getInstance ( project ). find File ( source Files . first ()) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbreakpoint Manager Ġ= ĠDebugger Manager Ex . getInstance Ex ( project )?. get Breakpoint Manager () !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠPsi Document Manager . getInstance ( project ). getDocument ( psi SourceFile ) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġpsi SourceFile . getText () !!. indexOf ( line Marker ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠlineNumber Ġ= Ġdocument . get LineNumber ( index ) Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbreakpoint Ġ= Ġbreakpoint Manager . add Line Breakpoint ( document , ĠlineNumber ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( breakpoint Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Line Breakpoint Ġcreated Ġat Ġ" Ġ+ Ġpsi SourceFile . getName () Ġ+ Ġ":" Ġ+ ĠlineNumber , ĠProcess Output Types . SYSTEM ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠDebugger Invocation Util . invoke And Wait ( project , Ġrunnable , ĠMod ality State . default Modal ity State ()) ĊĠĠĠ Ġ} Ċ } Ċ