/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand Ġother Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġcom . jetbrains . plugin verifier . repository . resources Ċ Ċ import Ġcom . jetbrains . plugin . structure . base . utils . re throw If Inter rupted Ċ import Ġorg . slf 4 j . Logger Ċ Ċ /** Ċ Ġ* ĠData Ġstructure Ġthat Ġmaintains Ġa Ġset Ġof Ġregistered Ġresources Ġand Ġtheir Ġtotal Ġweights . Ċ Ġ* Ċ Ġ* ĠIt Ġis Ġinitialized Ġwith Ġinitial Ġweight Ġof Ġ[ total Weight ], Ċ Ġ* Ġtypically Ġequal Ġzero Ġin Ġthe Ġunits Ġof Ġchosen Ġweights Ġdomain , Ġthe Ġ[ we igh er ] Ġused Ġto Ġassign Ċ Ġ* Ġweights Ġof Ġthe Ġresources Ġin Ġa Ġcontrolled Ġway Ġand Ġthe Ġ[ dis poser ] Ġused Ġto Ġde allocate Ċ Ġ* Ġthe Ġresources Ġbeing Ġremoved . Ċ Ġ*/ Ċ internal Ġclass ĠRepository Resources Registrar < R , ĠK , ĠW Ġ: ĠResource Weight < W >>( ĊĠ Ġinit Weight : ĠW , ĊĠ Ġprivate Ġval Ġwe igh er : Ġ( R ) Ġ-> ĠW , ĊĠ Ġprivate Ġval Ġdis poser : Ġ( R ) Ġ-> ĠUnit , ĊĠ Ġprivate Ġval Ġlogger : ĠLogger Ċ ) Ġ{ ĊĊĠ Ġprivate Ġvar Ġ_ total Weight : ĠW Ġ= Ġinit Weight ĊĊĠ Ġprivate Ġval Ġ_ resources Ġ= Ġhash Map Of < K , ĠResource Info < R , ĠW >>() ĊĊĠ Ġval Ġtotal Weight : ĠW ĊĠĠĠ Ġget () Ġ= Ġ_ total Weight ĊĊĠ Ġval Ġresources : ĠMap < K , ĠResource Info < R , ĠW >> ĊĠĠĠ Ġget () Ġ= Ġ_ resources . toMap () ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAssoci ates Ġthe Ġ[ resource ] Ġwith Ġ[ key ]. ĊĠĠ Ġ* ĊĠĠ Ġ* ĠIt Ġdis poses Ġthe Ġ[ resource ] Ġif Ġthe Ġ[ key ] Ġis ĊĠĠ Ġ* Ġalready Ġassociated , Ġor Ġif Ġan Ġexception Ġoccurs . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠReturns Ġ` true ` Ġif Ġthe Ġresource Ġwas Ġadded , ĊĠĠ Ġ* Ġand Ġ` false ` Ġif Ġthe Ġ[ key ] Ġis Ġoccupied . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġadd Resource ( key : ĠK , Ġresource : ĠR ): ĠBoolean Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġif Ġ( key Ġin Ġ_ resources ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . debug Maybe Ġ{ Ġ" add ($ key ): Ġthe Ġ$ resource Ġis Ġalready Ġavailable . ĠDis posing Ġthe Ġduplicate Ġresource ." Ġ} ĊĠĠĠĠĠĠĠ Ġsafe Dispose ( key , Ġresource ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġresource Weight Ġ= Ġwe igh er ( resource ) ĊĠĠĠĠĠ Ġ_ total Weight Ġ+= Ġresource Weight ĊĠĠĠĠĠ Ġlogger . debug Maybe Ġ{ Ġ" add ($ key ): Ġadding Ġthe Ġ$ resource Ġof Ġweight Ġ$ resource Weight . ĠTotal Ġweight : Ġ$_ total Weight " Ġ} ĊĠĠĠĠĠ Ġ_ resources [ key ] Ġ= ĠResource Info ( resource , Ġresource Weight ) ĊĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġsafe Dispose ( key , Ġresource ) ĊĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun ĠgetAll Keys () Ġ= Ġ_ resources . keys . toSet () ĊĊĠ Ġfun Ġhas ( key : ĠK ) Ġ= Ġkey Ġin Ġ_ resources ĊĊĠ Ġfun Ġget ( key : ĠK ) Ġ= Ġ_ resources [ key ] ĊĊĠ Ġfun Ġremove Resource ( key : ĠK ) Ġ{ ĊĠĠĠ Ġcheck ( key Ġin Ġ_ resources ) ĊĠĠĠ Ġval Ġresource Info Ġ= Ġ_ resources [ key ] !! ĊĠĠĠ Ġval Ġresource Ġ= Ġresource Info . resource ĊĠĠĠ Ġval Ġweight Ġ= Ġresource Info . weight ĊĠĠĠ Ġ_ total Weight Ġ-= Ġweight ĊĠĠĠ Ġlogger . debug Maybe Ġ{ Ġ" remove ($ key ): Ġremoving Ġthe Ġ$ resource Ġof Ġweight Ġ$ weight . ĠTotal Ġweight : Ġ$_ total Weight " Ġ} ĊĠĠĠ Ġ_ resources . remove ( key ) ĊĠĠĠ Ġsafe Dispose ( key , Ġresource ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsafe Dispose ( key : ĠK , Ġresource : ĠR ) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġlogger . debug Maybe Ġ{ Ġ" dispose ($ key )" Ġ} ĊĠĠĠĠĠ Ġdis poser ( resource ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġe . re throw If Inter rupted () ĊĠĠĠĠĠ Ġlogger . error (" unable Ġto Ġdispose Ġthe Ġresource Ġ$ resource ", Ġe ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }