package Ġorg . max ur . m serv . frame Ċ Ċ import Ġorg . max ur . m serv . frame . kotlin . Locator Ċ import Ġkotlin . reflect . K Class Ċ Ċ abstract Ġclass ĠLoc ator Config ( protected Ġval Ġlocator : ĠLoc ator Impl ) Ġ{ ĊĊĠĠĠ Ġprotected Ġval Ġdescriptors Ġ= Ġmutable ListOf < Descriptor < out ĠAny >>() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBind Ġservice Ġ[ implementation ] ĊĠĠĠĠ Ġ* Ġ@ param Ġimplementation ĠThe ĠService Ġimplementation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġbind ( implementation : ĠT ): ĠDescriptor < T > Ġ= ĊĠĠĠĠĠĠĠ Ġdescriptor ( Bean Object ( implementation ), ĠContract Class ( implementation :: class Ġas ĠK Class < in ĠT > )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBind Ġservice Ġ[ implementation ] Ġclass ĊĠĠĠĠ Ġ* Ġ@ param Ġimplementation ĠThe ĠService Ġimplementation Ġclass ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġbind ( implementation : ĠK Class < in ĠT >): ĠDescriptor < T > Ġ= ĊĠĠĠĠĠĠĠ Ġdescriptor ( Bean Singleton ( implementation ), ĠContract Class ( implementation )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBind Ġfactory Ġby Ġ[ function ] ĊĠĠĠĠ Ġ* Ġ@ param Ġfunction ĠThe ĠService Ġcreation Ġfunction ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġbind Factory ( function : Ġ( Locator ) Ġ-> ĠT ): ĠDescriptor < T > Ġ= ĊĠĠĠĠĠĠĠ Ġdescriptor ( Bean Function ( function )) ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠAny > Ġdescriptor ( bean : ĠBean < T >, Ġcontract : ĠContract < T >? Ġ= Ġnull ): ĠDescriptor < T > Ġ= ĊĠĠĠĠĠĠĠ Ġmake Descriptor ( bean , Ġcontract ). also Ġ{ Ġdescriptors . add ( it ) Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġ< T Ġ: ĠAny > Ġmake Descriptor ( bean : ĠBean < T >, Ġcontract : ĠContract < T >? ): ĠDescriptor < T > ĊĊĠĠĠ Ġabstract Ġfun Ġapply () ĊĊĠĠĠ Ġabstract Ġclass ĠDescriptor < T Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvar Ġbean : ĠBean < T >, ĊĠĠĠĠĠĠĠ Ġval Ġcontracts : ĠMutable Set < Contract < T >> Ġ= Ġmutable Set Of (), ĊĠĠĠĠĠĠĠ Ġvar Ġname : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġto ( contract : ĠAny ): ĠDescriptor < T > Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Contract ( contract ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġto ( var arg Ġcontracts : ĠK Class < in ĠT >): ĠDescriptor < T > Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontracts . forEach Ġ{ Ġto Contract ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġto Contract ( contract : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Specific Contract ( contract ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contract Ġis ĠK Class <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontracts . add ( Contract Class ( contract Ġas ĠK Class < T > )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġto Specific Contract ( contract : ĠAny ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġnamed ( name : ĠString ): ĠDescriptor < T > Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġclass ĠBean < T Ġ: ĠAny > ĊĠĠĠ Ġclass ĠBean Function < T Ġ: ĠAny >( val Ġfunc : Ġ( Locator ) Ġ-> ĠT ) Ġ: ĠBean < T >() ĊĠĠĠ Ġclass ĠBean Singleton < T Ġ: ĠAny >( val Ġimpl : ĠK Class < in ĠT >) Ġ: ĠBean < T >() ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġclass ĠBean Object < T Ġ: ĠAny >( val Ġimpl : ĠT ) Ġ: ĠBean < T >() ĊĊĠĠĠ Ġabstract Ġclass ĠContract < T Ġ: ĠAny > ĊĠĠĠ Ġclass ĠContract Class < T Ġ: ĠAny >( val Ġcontract : ĠK Class < in ĠT >) Ġ: ĠContract < T >() Ċ }