package Ġsu . jf dev . anci . service Ċ Ċ import Ġorg . apache . logging . log 4 j .* Ċ import Ġsu . jf dev . anci . service . Service Loader . Default . SOURCE Ċ Ċ class ĠService Loader Impl ( override Ġval Ġsource : ĠService Source ): ĠService Loader Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġwith ( source : ĠService Source ): ĠService Loader Ġ= ĠService Loader Impl ( source ) ĊĠĠĠ Ġconstructor (): Ġthis ( SOURCE ) ĊĊĠĠĠ Ġval Ġservices : ĠMap < String , ĠSet < Class <* >>> Ġ= Ġsource . paths . services () ĊĊĠĠĠ Ġoverride Ġfun Ġ< T : ĠAny > Ġget ( clazz : ĠClass < T >): ĠSequence < T > Ġ= Ġfind ( clazz . canonical Name ). map NotNull Ġ{ ĊĠĠĠĠĠĠĠ Ġit . convert ( clazz )?. load () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ( name : ĠString ): ĠSequence < Any > Ġ= Ġfind ( name ). map NotNull Ġ{ ĊĠĠĠĠĠĠĠ Ġit . load () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind ( name : ĠString ) Ġ= Ġservices [ name ]. or Empty (). as Sequence () ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > ĠClass <* >. convert ( clazz : ĠClass < T >): ĠClass < out ĠT >? Ġ= Ġwhen ( clazz . isAssignableFrom ( this )){ ĊĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġas Subclass ( clazz ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . warn (" Cannot Ġcast Ġ$ this Ġto Ġ$ clazz ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T : ĠAny > ĠClass < out ĠT >. load (): ĠT ? Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġkotlin . object Instance Ġ?: Ġnew Instance () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ){ ĊĠĠĠĠĠĠĠ ĠLOG . warn (" Failed Ġwhen Ġinitialize Ġ$ this ", Ġe ) ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠLOG : ĠLogger Ġ= ĠLog Manager . getLogger ( Service Loader Impl :: class . java ) ĊĠĠĠ Ġ} Ċ Ċ }