package Ġorg . kode in . di . internal Ċ Ċ import Ġorg . kode in . di .* Ċ import Ġorg . kode in . di . bindings .* Ċ Ċ internal Ġclass ĠDI Container Impl Ġprivate Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtree : ĠD IT ree , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnode : ĠNode ?, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfull Description OnError : ĠBoolean Ċ ) Ġ: ĠDI Container Ġ{ ĊĊĠĠĠ Ġ@ Volatile Ġvar Ġinit Callbacks : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ" Main " Ġconstructor Ġthat Ġuses Ġthe Ġbindings Ġmap Ġconfigured Ġby Ġa Ġ[ DI Container . Builder ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġconstructor ( builder : ĠDI Container Builder Impl , Ġexternal Sources : ĠList < External Source >, Ġfull Description OnError : ĠBoolean , Ġrun Callbacks : ĠBoolean ) Ġ: Ġthis ( D IT ree Impl ( builder . bindings Map , Ġexternal Sources , Ġbuilder . trans l ators ), Ġnull , Ġfull Description OnError ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinit : Ġ() Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirect Ġ= ĠDirect DI Impl ( this , ĠAny DI Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . callbacks . forEach Ġ{ Ġ@ Suppress (" UNUSED _ EXPRESSION ") Ġit ( direct ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( run Callbacks ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlock Ġ= ĠAny () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Callbacks Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized If NotNull ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Ġ= Ġlock , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpredicate Ġ= Ġthis :: init Callbacks , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Null Ġ= Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif NotNull Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Callbacks Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClass Ġused Ġto Ġcheck Ġfor Ġrecursive Ġdependencies , Ġrepresents Ġa Ġnode Ġin Ġthe Ġdependency Ġtree . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠEach Ġfactory , Ġin Ġtheir ĠBinding @ getInstance Ġmethods Ġreceives Ġa ĠDI Ġinstance Ġto Ġenable Ġtransient Ġdependency . ĊĠĠĠĠ Ġ* ĠHowever , Ġit Ġis Ġnot Ġthe Ġsame Ġk ode in Ġinstance Ġas Ġthe Ġone Ġused Ġto Ġget Ġthe Ġmain Ġdependency . ĊĠĠĠĠ Ġ* ĠEach Ġtime Ġa Ġtransient Ġdependency Ġis Ġneeded , Ġa Ġnew ĠDI Ġinstance Ġis Ġconstructed , Ġwith Ġa Ġnew ĠNode Ġthat Ġhas ĊĠĠĠĠ Ġ* Ġthe Ġcurrent ĠNode Ġas Ġit 's Ġparent . ĊĠĠĠĠ Ġ* ĠThis Ġallows , Ġat Ġeach Ġstep , Ġto Ġwalk Ġup Ġthe Ġnode Ġtree Ġand Ġcheck Ġif Ġthe Ġrequested Ġkey Ġhas Ġnot Ġyet Ġbeen Ġrequested . ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġsame Ġkey Ġexists Ġtwice Ġin Ġthe Ġtree , Ġit Ġmeans Ġthat Ġit Ġhas , Ġand Ġthat Ġthere 's Ġa Ġdependency Ġrecursion . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġkey ĠThe Ġkey Ġof Ġthis Ġnode , Ġmeaning Ġthat Ġthis Ġkey Ġhas Ġbeen Ġlooked Ġfor Ġonce . ĊĠĠĠĠ Ġ* Ġ@ property Ġparent ĠThe Ġparent Ġnode , Ġmeaning Ġthe Ġparent Ġlookup Ġthat Ġneeded Ġthis Ġkey . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġclass ĠNode ( private Ġval Ġkey : ĠDI . Key < *, Ġ*, Ġ* >, Ġprivate Ġval Ġoverride Level : ĠInt , Ġprivate Ġval Ġparent : ĠNode ?, Ġprivate Ġval Ġfull Description OnError : ĠBoolean ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCheck Ġthat Ġgiven Ġkey Ġdoes Ġ** not ** Ġexist Ġin Ġthe Ġnode Ġtree Ġor Ġthrows Ġan Ġexception Ġif Ġit Ġdoes . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws ĠDI . Dependency Loop Exception Ġif Ġthe Ġkey Ġexists Ġin Ġthe Ġdependency Ġtree . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġcheck ( sear ched Key : ĠDI . Key < *, Ġ*, Ġ* >, Ġsearched Override Level : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! recursive Check ( this , Ġsearched Key , Ġsearched Override Level )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġrecursive Loop ( this , Ġsearched Key , Ġsearched Override Level , Ġempty List ()) Ġ+ Ġdisplay String ( sear ched Key , Ġoverride Level ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . forEach Indexed Ġ{ Ġindex , Ġstring Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" Ġ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġsb . append (" ĠĠ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġsb . append (" Ġ Ġâķ Ķ âķ © >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" Ġ Ġâķĳ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" Ġ Ġ". repeat ( index Ġ- Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" âķ ļ >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( string ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("\ n ") Ġ// Ġappend ln Ġdoes Ġnot Ġexist Ġin ĠJS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" ĠĠĠ Ġâķ ļ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" âķĲâķĲ ". repeat ( list . size Ġ- Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" âķ Ŀ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDI . Dependency Loop Exception (" Dependency Ġrecursion :\ n $ sb ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdisplay String ( key : ĠDI . Key < *, Ġ*, Ġ* >, Ġoverride Level : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdesc Prop Ġ= Ġif Ġ( full Description OnError ) Ġkey :: bind Full Description Ġelse Ġkey :: bind Description ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( override Level Ġ!= Ġ 0 ) Ġ" over ridden Ġ${ desc Prop . get () }" Ġelse Ġdesc Prop . get () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠThe Ġcurrent Ġtrans itive Ġdependency Ġtree Ġas Ġa Ġlist Ġof Ġstring . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġtail rec Ġfun Ġrecursive Loop ( node : ĠNode , Ġfirst Key : ĠDI . Key < *, Ġ*, Ġ* >, Ġfirst Override Level : ĠInt , Ġtail : ĠList < String >): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( node . parent Ġ== Ġnull Ġ|| Ġ( first Key Ġ== Ġnode . key Ġ&& Ġfirst Override Level Ġ== Ġnode . override Level )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( display String ( node . key , Ġnode . override Level )) Ġ+ Ġtail ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrecursive Loop ( node . parent , Ġfirst Key , Ġfirst Override Level , ĠlistOf ( display String ( node . key , Ġnode . override Level )) Ġ+ Ġtail ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRecursive Ġfunction Ġthat Ġwalk s Ġup Ġthe Ġnode Ġtree Ġto Ġcheck Ġif Ġa Ġspecific Ġkey Ġcan Ġbe Ġfound . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġwhether Ġthe Ġgiven Ġkey Ġexists Ġin Ġthe Ġtree . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġtail rec Ġfun Ġrecursive Check ( node : ĠNode , Ġsearched Key : ĠDI . Key < *, Ġ*, Ġ* >, Ġsearched Override Level : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( node . key Ġ== Ġsearched Key Ġ&& Ġnode . override Level Ġ== Ġsearched Override Level ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( node . parent Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecursive Check ( node . parent , Ġsearched Key , Ġsearched Override Level ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< C Ġ: ĠAny , ĠA , ĠT : ĠAny > Ġbinding DI ( key : ĠDI . Key < C , ĠA , ĠT >, Ġcontext : ĠDI Context < C >, Ġtree : ĠD IT ree , Ġoverride Level : ĠInt ) Ġ: ĠBinding DI < C > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= ĠDI Container Impl ( tree , ĠNode ( key , Ġoverride Level , Ġnode , Ġfull Description OnError ), Ġfull Description OnError ) ĊĠĠĠĠĠĠĠ Ġreturn ĠBinding DI Impl ( Direct DI Impl ( container , Ġcontext ), Ġkey , Ġoverride Level ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġ< C Ġ: ĠAny , ĠA , ĠT : ĠAny > Ġfactory OrNull ( key : ĠDI . Key < C , ĠA , ĠT >, Ġcontext : ĠC , Ġoverride Level : ĠInt ): Ġ(( A ) Ġ-> ĠT )? Ġ{ ĊĠĠĠĠĠĠĠ Ġtree . find ( key , Ġ 0 ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ(_, Ġdefinition , Ġtranslator ) Ġ= Ġit [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode ?. check ( key , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Context Ġ= ĠDI Context ( key . context Type , Ġcontext ) Ġas ĠDI Context < Any > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Context Ġ= Ġtranslator ?. to K Context ( Direct DI Impl ( this , Ġoriginal Context ), Ġcontext ) Ġ?: Ġoriginal Context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġas ĠDI . Key < Any , ĠA , ĠT > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding DI Ġ= Ġbinding DI ( key , Ġk Context , Ġdefinition . tree , Ġoverride Level ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdefinition . binding . get Factory ( key , Ġbinding DI ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbinding DI Ġ= Ġbinding DI ( key , ĠDI Context ( key . context Type , Ġcontext ), Ġtree , Ġoverride Level ) ĊĠĠĠĠĠĠĠ Ġtree . external Sources . forEach Ġ{ Ġsource Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . get Factory ( binding DI , Ġkey )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode ?. check ( key , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit Ġas Ġ( A ) Ġ-> ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġ< C Ġ: ĠAny , ĠA , ĠT : ĠAny > Ġfactory ( key : ĠDI . Key < C , ĠA , ĠT >, Ġcontext : ĠC , Ġoverride Level : ĠInt ): Ġ( A ) Ġ-> ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtree . find ( key , Ġoverride Level ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( result . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ(_, Ġdefinition , Ġtranslator ) Ġ= Ġresult [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode ?. check ( key , Ġoverride Level ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Context Ġ= ĠDI Context ( key . context Type , Ġcontext ) Ġas ĠDI Context < Any > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Context Ġ= Ġtranslator ?. to K Context ( Direct DI Impl ( this , Ġoriginal Context ), Ġcontext ) Ġ?: Ġoriginal Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġas ĠDI . Key < Any , ĠA , ĠT > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding DI Ġ= Ġbinding DI ( key , Ġk Context , Ġdefinition . tree , Ġoverride Level ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdefinition . binding . get Factory ( key , Ġbinding DI ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbinding DI Ġ= Ġbinding DI ( key , ĠDI Context ( key . context Type , Ġcontext ), Ġtree , Ġoverride Level ) ĊĠĠĠĠĠĠĠ Ġtree . external Sources . forEach Ġ{ Ġsource Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . get Factory ( binding DI , Ġkey )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode ?. check ( key , Ġoverride Level ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit Ġas Ġ( A ) Ġ-> ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġwith Overrides Ġ= Ġoverride Level Ġ!= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġdesc Prop Ġ= Ġif Ġ( full Description OnError ) Ġkey :: full Description Ġelse Ġkey :: description ĊĠĠĠĠĠĠĠ Ġval Ġdesc Fun : ĠBind ings Map .( Boolean ) Ġ-> ĠString Ġ= Ġif Ġ( full Description OnError ) Ġ({ Ġfull Description ( it ) Ġ}) Ġelse Ġ({ Ġdescription ( it ) Ġ}) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( result . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" No Ġbinding Ġfound Ġfor Ġ${ desc Prop . get () }\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfor Type Ġ= Ġtree . find ( Search Specs ( type Ġ= Ġkey . type )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( for Type . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Available Ġbindings Ġfor Ġthis Ġtype :\ n ${ for Type . associate Ġ{ Ġit . first Ġto Ġit . second Ġ}. desc Fun ( with Overrides )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Registered Ġin Ġthis ĠDI Ġcontainer :\ n ${ tree . bindings . desc Fun ( with Overrides )} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDI . NotFoundException ( key , Ġdescription ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpotential s : ĠBind ings Map Ġ= Ġresult . associate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . first Ġto Ġtree [ it . first ] !!. second ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġothers : ĠBind ings Map Ġ= Ġtree . bindings . filter Ġ{ Ġ( key , Ġ_) Ġ-> Ġkey Ġ! in Ġpotential s . keys Ġ} Ġ// ĠMap . minus Ġdoes Ġnot Ġyet Ġexist Ġin ĠKon an ĊĠĠĠĠĠĠĠ Ġthrow ĠDI . NotFoundException ( key , Ġ"${ pot entials . size } Ġbindings Ġfound Ġthat Ġmatch Ġ$ key :\ n ${ pot entials . desc Fun ( with Overrides )} Other Ġbindings Ġregistered Ġin ĠDI :\ n ${ others . desc Fun ( with Overrides )} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġ< C Ġ: ĠAny , ĠA , ĠT : ĠAny > Ġall Factories ( key : ĠDI . Key < C , ĠA , ĠT >, Ġcontext : ĠC , Ġoverride Level : ĠInt ): ĠList <( A ) Ġ-> ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtree . find ( key , Ġoverride Level , Ġall Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult . map Ġ{ Ġ(_, Ġdefinition , Ġtranslator ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode ?. check ( key , Ġoverride Level ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Context Ġ= ĠDI Context ( key . context Type , Ġcontext ) Ġas ĠDI Context < Any > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Context Ġ= Ġtranslator ?. to K Context ( Direct DI Impl ( this , Ġoriginal Context ), Ġcontext ) Ġ?: Ġoriginal Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġas ĠDI . Key < Any , ĠA , ĠT > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding DI Ġ= Ġbinding DI ( key , Ġk Context , Ġdefinition . tree , Ġoverride Level ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefinition . binding . get Factory ( key , Ġbinding DI ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ