/** Ċ Ġ* ĠDesign ed Ġand Ġdeveloped Ġby ĠA id an ĠFol le st ad Ġ(@ af ol le st ad ) Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ @ file : Suppress (" unused ") Ċ Ċ package Ġcom . af ol le st ad . ul f ber ht . common Ċ Ċ import Ġcom . af ol le st ad . ul f ber ht . Components Ċ import Ġcom . af ol le st ad . ul f ber ht . Provider Ċ import Ġcom . af ol le st ad . ul f ber ht . scopes . Scope Observer Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠThe Ġbase Ġclass Ġfor Ġall Ġgenerated Ġcomponents . Ċ Ġ* Ċ Ġ* Ġ@ author ĠA id an ĠFol le st ad Ġ(@ af ol le st ad ) Ċ Ġ*/ Ċ interface ĠBase Component Ġ: ĠScope Observer Ġ{ ĊĠ Ġval Ġscope : ĠString ĊĠ Ġval Ġoriginal Type : ĠK Class < *> ĊĠ Ġval Ġparent : ĠBase Component ? ĊĠ Ġval Ġchildren : ĠMutable Set < Base Component > ĊĠ Ġval Ġmodules : ĠSet < Base Module > ĊĠ Ġvar Ġruntime Dependencies : ĠMap < String ?, ĠAny >? ĊĊĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠ Ġfun Ġ< T Ġ: ĠAny > Ġget ( ĊĠĠĠ Ġwanted Type : ĠK Class <* >, ĊĠĠĠ Ġgeneric Args : ĠSet < K Class <* >> Ġ= Ġempty Set (), ĊĠĠĠ Ġqualifier : ĠString ? Ġ= Ġnull ĊĠ Ġ): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġget Provider < T >( ĊĠĠĠĠĠĠĠ Ġwanted Type Ġ= Ġwanted Type , ĊĠĠĠĠĠĠĠ Ġgeneric Args Ġ= Ġgeneric Args , ĊĠĠĠĠĠĠĠ Ġqualifier Ġ= Ġqualifier , ĊĠĠĠĠĠĠĠ Ġcalled By Ġ= Ġnull ĊĠĠĠ Ġ) ?. get () Ġ?: Ġerror ( ĊĠĠĠĠĠĠĠ Ġ" Did n 't Ġfind Ġprovider Ġfor Ġtype Ġ${ wanted Type . qualified Name } Ġ( qual ifier =\" $ qual ifier \") " ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ< T Ġ: ĠAny > Ġget Provider ( ĊĠĠĠ Ġwanted Type : ĠK Class <* >, ĊĠĠĠ Ġgeneric Args : ĠSet < K Class <* >> Ġ= Ġempty Set (), ĊĠĠĠ Ġqualifier : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġcalled By : ĠBase Component ? Ġ= Ġnull ĊĠ Ġ): ĠProvider < T >? ĊĊĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠ Ġfun Ġ< T Ġ: ĠAny > Ġget Runtime Dependency ( qual ifier : ĠString ?): ĠT ? Ġ{ ĊĠĠĠ Ġreturn Ġruntime Dependencies ?. get ( qual ifier ) Ġas ? ĠT ĊĠ Ġ} ĊĊĠ Ġfun Ġdestroy () Ġ{ ĊĠĠĠ Ġchildren . forEach Ġ{ Ġit . destroy () Ġ} ĊĠĠĠ Ġmodules . forEach Ġ{ Ġit . destroy () Ġ} ĊĠĠĠ Ġruntime Dependencies Ġ= Ġnull ĊĠĠĠ ĠComponents . remove ( original Type ) ĊĠĠĠ ĠLogger . log (" Destroyed Ġcomponent Ġ${ original Type . qualified Name }") ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Exit () Ġ= Ġdestroy () Ċ } Ċ