package Ġcom . github . cher no vd mit ri y . injection holder core . internal . manager Ċ Ċ import Ġcom . github . cher no vd mit ri y . injection holder core . api . Component Manager Ċ import Ġcom . github . cher no vd mit ri y . injection holder core . api . Component Owner Ċ import Ġcom . github . cher no vd mit ri y . injection holder core . api . Component Owner Lifecycle Ċ import Ġcom . github . cher no vd mit ri y . injection holder core . api . Rest orable Component Owner Ċ import Ġcom . github . cher no vd mit ri y . injection holder core . internal . utils . generic Cast OrNull Ċ import Ġcom . github . cher no vd mit ri y . injection holder core . internal . utils . is Same Class Ċ Ċ internal Ġclass ĠComponent ManagerImpl Ġ: ĠComponent Manager Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcomponents Ġ= Ġhash Map Of < String , ĠAny >() ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġfind Component ( component Class : ĠClass < T >): ĠT ? Ġ= ĊĠĠĠĠĠĠĠ Ġcomponents . values . first OrNull Ġ{ Ġit . is Same Class ( component Class ) Ġ} Ġas ? ĠT ĊĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġget Component Owner Lifecycle ( owner : ĠComponent Owner < T >): ĠComponent Owner Lifecycle Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠComponent Owner Lifecycle Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Inject ed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Inject ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Injection ( owner , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Inject ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish Destroy () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Inject ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Injection ( owner ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Inject ed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< Saved State , ĠT > Ġadd Injection ( component Owner : ĠComponent Owner < T >, Ġsaved State : ĠSaved State ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcomponent Ġ= Ġget Or Init Component ( component Owner , Ġsaved State ) ĊĠĠĠĠĠĠĠ Ġcomponent Owner . inject ( component ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġremove Injection ( component Owner : ĠComponent Owner < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcomponents . remove ( component Owner . getComponent Key ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprivate Ġfun Ġ< Saved State , ĠT > Ġget Or Init Component ( ĊĠĠĠĠĠĠĠ Ġcomponent Owner : ĠComponent Owner < T >, ĊĠĠĠĠĠĠĠ Ġsaved State : ĠSaved State ? ĊĠĠĠ Ġ): ĠT Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġcomponent Owner . getComponent Key () ĊĠĠĠĠĠĠĠ Ġreturn Ġcomponents [ key ] Ġas ? ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġinit Component ( component Owner , Ġsaved State ). also Ġ{ Ġcomponents [ key ] Ġ= Ġit Ġas ĠAny Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< Saved State , ĠT > Ġinit Component ( ĊĠĠĠĠĠĠĠ Ġcomponent Owner : ĠComponent Owner < T >, ĊĠĠĠĠĠĠĠ Ġsaved State : ĠSaved State ? ĊĠĠĠ Ġ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgeneric Cast OrNull < Rest orable Component Owner < Saved State , ĠT >>( component Owner ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . provide Component ( saved State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġcomponent Owner . provide Component () ĊĠĠĠ Ġ} Ċ }