/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠR ick ĠBus ar ow Ċ Ġ* Ġ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 Ġmodule check . project Ċ Ċ import Ġmodule check . project . Project Context . Element Ċ import Ġmodule check . project . Project Context . Key Ċ import Ġmodule check . utils . Safe Cache Ċ Ċ interface ĠProject Context Ġ{ ĊĠ Ġsuspend Ġfun Ġ< E Ġ: ĠElement > Ġget ( key : ĠKey < E >): ĠE ĊĊĠ Ġfun Ġclear Context () ĊĊĠ Ġinterface ĠKey < E Ġ: ĠElement > Ġ{ ĊĠĠĠ Ġsuspend Ġoperator Ġfun Ġinvoke ( project : ĠMc Project ): ĠE ĊĠ Ġ} ĊĊĠ Ġinterface ĠElement Ġ{ ĊĠĠĠ Ġval Ġkey : ĠKey < *> ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġoperator Ġfun Ġinvoke ( project : ĠMc Project ): ĠProject Context Ġ= ĠReal Project Context ( project ) ĊĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠReal Project Context ( val Ġproject : ĠMc Project ) Ġ: ĠProject Context Ġ{ ĊĊĠ Ġprivate Ġvar Ġcache Ġ= ĠSafe Cache < Key <* >, ĠElement >() ĊĊĠ Ġoverride Ġsuspend Ġfun Ġ< E Ġ: ĠElement > Ġget ( key : ĠKey < E >): ĠE Ġ{ ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġreturn Ġcache . get Or Put ( key ) Ġ{ Ġkey . invoke ( project ) Ġ} Ġas ĠE ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġclear Context () Ġ{ ĊĠĠĠ Ġcache Ġ= ĠSafe Cache () ĊĠ Ġ} Ċ } Ċ