package Ġcom . gitlab . la e . intellij . actions . tree . app Ċ Ċ import Ġcom . gitlab . la e . intellij . actions . tree . Action Node Ċ import Ġcom . gitlab . la e . intellij . actions . tree . When Ċ import Ġcom . gitlab . la e . intellij . actions . tree . util . setEnabled Modal Context Ċ import Ġcom . intellij . ide . DataManager Ċ import Ġcom . intellij . ide . Ide Popup Manager Ċ import Ġcom . intellij . openapi . action System .* Ċ import Ġcom . intellij . openapi . ui . popup . JB Popup Factory Ċ import Ġcom . intellij . openapi . wm . Ide Focus Manager Ċ import Ġjavax . swing . KeyStroke Ċ Ċ data Ġclass ĠRoot Action ( ĊĠ Ġval Ġid : ĠString , ĊĠ Ġval Ġkey St ro kes : ĠList < KeyStroke >, ĊĠ Ġval Ġactions : ĠList < Pair < An Action , ĠWhen >>, Ċ ) Ġ: ĠAn Action ( ĊĠ Ġactions . join ToString (", Ġ") Ġ{ ĊĠĠĠ Ġit . first . template Presentation . text Ġ?: Ġ"" ĊĠ Ġ}, Ċ ) Ġ{ ĊĠ Ġinit Ġ{ ĊĠĠĠ Ġsuper . set Shortcut Set ( ĊĠĠĠĠĠ ĠCustom Shortcut Set ( ĊĠĠĠĠĠĠĠ Ġ* key St ro kes ĊĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠKeyboard Shortcut ( it , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. to Typed Array (), ĊĠĠĠĠĠ Ġ), ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġis Enabled In Modal Context Ġ= ĊĠĠĠĠĠ Ġactions . any Ġ{ Ġit . first . isEnabled In Modal Context Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġset Shortcut Set ( ignored : ĠShort cut Set ) Ġ{} ĊĊĠ Ġprivate Ġfun Ġfind Action ( e : ĠAn ActionEvent ): ĠAn Action ? Ġ= Ġactions ĊĠĠĠ Ġ. as Sequence () ĊĠĠĠ Ġ. filter Ġ{ Ġit . second . test ( e . data Context ) Ġ} ĊĠĠĠ Ġ. map Ġ{ Ġit . first Ġ} ĊĠĠĠ Ġ. first OrNull () ĊĊĠ Ġoverride Ġfun ĠactionPerformed ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠ Ġfind Action ( e )?. action Performed ( e ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġbefore ActionPerformed Update ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠ Ġsuper . before ActionPerformed Update ( e ) ĊĠĠĠ Ġfind Action ( e )?. before ActionPerformed Update ( e ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġupdate ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠ Ġsuper . update ( e ) ĊĊĠĠĠ Ġ/* ĠIt 's Ġimportant Ġto Ġdisable Ġthis Ġaction Ġwhen Ġnone Ġinner Ġaction ĊĠĠĠĠ Ġ* Ġis Ġavailable Ġto Ġexecute , Ġso Ġthat Ġthe Ġkey Ġstroke Ġwill Ġbe Ġpassed ĊĠĠĠĠ Ġ* Ġthrough Ġto Ġthe ĠIDE Ġfor Ġprocessing . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġexample , Ġif Ġthe Ġ' N ' Ġkey Ġis Ġconfigured Ġto Ġbe Ġthe Ġ' Down ' ĊĠĠĠĠ Ġ* Ġaction Ġwhen Ġthe ĠProject Ġtool Ġwindow Ġis Ġactive , Ġit Ġshould Ġdo ĊĠĠĠĠ Ġ* Ġthat Ġwhen Ġthe ĠProject Ġtool Ġwindow Ġis Ġactive , Ġbut Ġwhen Ġthe Ġeditor ĊĠĠĠĠ Ġ* Ġis Ġactive , Ġit Ġshould Ġstill Ġinsert Ġthe Ġ' N ' Ġcharacter , Ġbecause ĊĠĠĠĠ Ġ* Ġthe Ġ' N ' Ġkey Ġis Ġnot Ġbounded Ġto Ġany Ġaction Ġwhen Ġthe Ġeditor Ġis ĊĠĠĠĠ Ġ* Ġactive , Ġdisabling Ġthe Ġaction Ġcorrectly Ġallows Ġthis Ġbehaviour . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġaction Ġ= Ġfind Action ( e ) ĊĠĠĠ Ġe . presentation . isEnabled Ġ= Ġaction Ġ!= Ġnull ĊĠĠĠ Ġif Ġ( action Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġaction . update ( e ) ĊĠĠĠĠĠ Ġset Enabled Modal Context ( e , Ġaction ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġis D umb Aware () Ġ= Ġtrue ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMerge s Ġthe Ġroot Ġlevel Ġactions Ġby Ġtheir Ġkey Ġst ro kes . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġexample : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĠAction Node { key St ro kes =[" ctrl ĠX "], Ġid = 1 Ġ... } ĊĠĠĠĠ Ġ* ĠAction Node { key St ro kes =[" ctrl ĠX ", Ġ" ctrl ĠY "], Ġid = 2 Ġ... } ĊĠĠĠĠ Ġ* ĠAction Node { key St ro kes =[" ctrl ĠA ", Ġ" ctrl ĠB "], Ġid = 3 Ġ... } ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĠBe come s : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĠRoot Action { key St ro kes =[" ctrl ĠX "], Ġactions =[ { id = 2 , Ġ... }, Ġ{ id = 1 , Ġ... }]} ĊĠĠĠĠ Ġ* ĠRoot Action { key St ro kes =[" ctrl ĠY "], Ġactions =[ { id = 2 , Ġ... }]} ĊĠĠĠĠ Ġ* ĠRoot Action { key St ro kes =[" ctrl ĠA ", Ġ" ctrl ĠB "], Ġactions =[ { id = 3 , Ġ... }]} ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĠThe Ġorder Ġof Ġthe Ġinner Ġactions Ġof Ġeach Ġ[ Root Action ] Ġis Ġreverse . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmerge ( ĊĠĠĠĠĠ Ġactions : ĠCollection < Action Node >, ĊĠĠĠĠĠ Ġaction Manager : ĠAction Manager , ĊĠĠĠĠĠ Ġfocus Manager : ĠIde Focus Manager , ĊĠĠĠĠĠ Ġpopup Manager : ĠIde Popup Manager , ĊĠĠĠĠĠ Ġpopup Factory : ĠJ B Popup Factory , ĊĠĠĠĠĠ Ġdata Manager : ĠData Manager , ĊĠĠĠ Ġ): ĠList < Root Action > Ġ{ ĊĊĠĠĠĠĠ Ġval Ġ( no Keys , Ġby Keys ) Ġ= Ġactions ĊĠĠĠĠĠĠĠ Ġ. partition Ġ{ Ġit . keys . isEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġ( no Keys , Ġhas Keys ) Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġno Keys Ġto Ġhas Keys . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . keys . as Sequence (). map Ġ{ Ġkey Ġ-> Ġkey Ġto Ġit Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit . first Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Values Ġ{ Ġit . value . map Ġ{ Ġp Ġ-> Ġp . second Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġby Actions Ġ= ĊĠĠĠĠĠĠĠ Ġby Keys . entries ĊĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit . value Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. map Values Ġ{ Ġit . value . map Ġ{ Ġe Ġ-> Ġe . key Ġ} Ġ} Ġ+ ĊĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( no Keys . isEmpty ()) Ġempty Map () ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġmap Of ( no Keys Ġto Ġempty List ())) ĊĊĠĠĠĠĠ Ġreturn Ġgenerate Sequence ( 0 , ĠInt :: inc ) ĊĠĠĠĠĠĠĠ Ġ. zip ( by Actions . as Sequence ()) Ġ{ Ġi , Ġ( k , Ġv ) Ġ-> ĠTrip le ( i , Ġk , Ġv ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( i , Ġnodes , Ġkeys ) Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠ Ġ* ĠIf Ġlist Ġcontains Ġa Ġsingle Ġaction Ġgroup , Ġuse Ġthat Ġgroup 's ĊĠĠĠĠĠĠĠĠĠĠ Ġ* ĠID Ġas Ġthe Ġaction ĠID , Ġthis Ġallows Ġuser Ġspecified ĠIDs Ġto Ġbe ĊĠĠĠĠĠĠĠĠĠĠ Ġ* Ġmaintained Ġand Ġreferenced Ġin Ġother Ġplugins Ġsuch Ġas ĠIde a V im 's ĊĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ: action Ġcommand Ġif Ġthey Ġwish . ĊĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠĠĠ Ġ* ĠWe Ġonly Ġdo Ġthis Ġfor Ġcustom Ġaction Ġgroups Ġand Ġnot Ġfor Ġreferences ĊĠĠĠĠĠĠĠĠĠĠ Ġ* Ġto Ġexisting Ġaction Ġitems Ġbecause Ġit Ġwill Ġresult Ġin Ġduplicate ĊĠĠĠĠĠĠĠĠĠĠ Ġ* ĠID Ġerror Ġwhen Ġregistering Ġlater . ĊĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġif Ġ( nodes . size Ġ== Ġ 1 Ġ&& Ġnodes [ 0 ]. items . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes [ 0 ]. id ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Actions Tree . Root .$ i " ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ ĠRoot Action ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeys , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . to Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfocus Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġto Ġit . condition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. reversed (), ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ Ċ } Ċ