package Ġxyz . qw ex ter . view _ model _ factory Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġxyz . qw ex ter . service _ locator . Service Locator Ċ Ċ class ĠViewModel Factory ( ĊĠĠĠ Ġprivate Ġval Ġservice Locator : ĠService Locator , ĊĠĠĠ Ġprivate Ġvar arg Ġval Ġextra Dependencies : ĠAny Ċ ) Ġ: ĠViewModel Provider . Factory Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel > Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconstructor Ġ= Ġmodel Class . construct ors . first () ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ( if Ġ( extra Dependencies . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor . newInstance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* constructor . parameters . map Ġ{ Ġservice Locator . provide ( it . type ) Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor . newInstance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor . parameters . map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Locator . provide ( it . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ+ Ġextra Dependencies . toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}) Ġas ĠT ĊĠĠĠ Ġ} Ċ } Ċ