/* Ċ Ġ* ĠCopyright Ġ 2 0 1 2 - 2 0 1 4 ĠSer ge y ĠIgn at ov Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠJ ake ĠBe cker Ċ Ġ* ĠCopyright Ġ 2 0 1 7 - 2 0 1 8 ĠL uke ĠIm h off Ċ Ġ* Ċ Ġ* Ġ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 . elixir _ lang . debugger Ċ Ċ import Ġcom . eric sson . otp . erlang . O tp Er lang Atom Ċ import Ġcom . eric sson . otp . erlang . O tp Er lang Pid Ċ import Ġcom . intellij . icons . All Icons Ċ import Ġcom . intellij . ui . Colo red Text Container Ċ import Ġcom . intellij . ui . Simple Text Attributes Ċ import Ġcom . intellij . x debugger . X Source Position Ċ import Ġcom . intellij . x debugger . evaluation . X Debugger Evaluator Ċ import Ġcom . intellij . x debugger . frame . X Composite Node Ċ import Ġcom . intellij . x debugger . frame . X Stack Frame Ċ import Ġcom . intellij . x debugger . frame . X Value Children List Ċ import Ġorg . elixir _ lang . debugger . node . Binding Ċ import Ġorg . elixir _ lang . debugger . node . Trace Element Ċ import Ġorg . elixir _ lang . debugger . stack _ frame . variable . Elixir Ċ import Ġorg . elixir _ lang . debugger . stack _ frame . variable . Er lang Ċ import Ġorg . elixir _ lang . utils . Elixir Modules Util Ċ Ċ class ĠStack Frame ( private Ġval Ġprocess : ĠProcess , Ġprivate Ġval Ġpid : ĠO tp Er lang Pid , Ġprivate Ġval Ġtrace Element : ĠTrace Element ) Ġ: ĠX Stack Frame () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsource Position : ĠSource Position ? Ġ= ĠSource Position . create ( trace Element ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Evaluator (): ĠX Debugger Evaluator Ġ= ĠEvalu ator ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Element . level , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang Atom ( trace Element . module ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Element . function , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Element . arguments . size , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Element . file , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Element . line ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Source Position (): ĠX Source Position ? Ġ= Ġsource Position ?. source Position ĊĊĠĠĠ Ġoverride Ġfun Ġcustomize Presentation ( component : ĠCo lo red Text Container ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġel ix ir ModuleName Ġ= ĠE lixir Modules Util . erlang ModuleName To Elixir ( trace Element . module ) ĊĠĠĠĠĠĠĠ Ġval Ġline Suffix Ġ= Ġif Ġ( trace Element . line Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġline Ġ${ trace Element . line }" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġ"$ elixir ModuleName .${ trace Element . function }/${ trace Element . arguments . size }$ line Suffix " ĊĊĠĠĠĠĠĠĠ Ġcomponent . append ( title , ĠSimple Text Attributes . REG ULAR _ ATTRIBUTES ) ĊĠĠĠĠĠĠĠ Ġcomponent . setIcon ( All Icons . Debugger . Stack Frame ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Children ( node : ĠX Composite Node ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= ĠX Value Children List ( trace Element . bindings . size ) ĊĠĠĠĠĠĠĠ Ġtrace Element ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. bindings ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy ( Binding :: elixir Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ( elixir Name , Ġbindings ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerlang Variables Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbindings ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġbinding Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEr lang ( binding . erlang Name , Ġbinding . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( elixir Name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Elixir ( elixir Name , Ġerlang Variables )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerlang Variables ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġchildren . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġnode . add Children ( children , Ġtrue ) ĊĠĠĠ Ġ} Ċ } Ċ