package Ġcom . lhx ia . kot mvp . core Ċ Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . Supervisor Job Ċ import Ġkotlin . coroutines . Coroutine Context Ċ import Ġkotlin . coroutines . Empty Coroutine Context Ċ import Ġkotlin . system . measure Time Millis Ċ Ċ /** Ċ Ġ* Ġ@ Author Ġ: Ġx ial ong h ua Ċ Ġ* Ġ@ Date Ġ: ĠCreate Ġin Ġ 2 0 1 9 / 2 / 1 3 Ċ Ġ* Ġ@ Description Ġ: Ġa Ġnew Ġfile Ċ Ġ*/ Ċ abstract Ġclass ĠBase Presenter ( open Ġval Ġview Ġ: ĠContract . View <* >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġparent Context : ĠCor outine Context Ġ= ĠEmpty Coroutine Context ) Ġ: ĠContract . Presenter , ĠCor outine Scope Ġ{ ĊĠĠĠ Ġvar Ġjob Ġ: ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( parent Context Ġis ĠEmpty Coroutine Context ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( job Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Ġ= ĠSuper visor Job () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDispatch ers . Main Ġ+ Ġjob !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate (){ ĊĠĠĠĠĠĠĠ Ġjava Class . declared Fields . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan Ġ= Ġit . type . getAnnotation ( Repo :: class . java ) Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinstance Ġ= Ġ Ġmodel Instance Cache [ an . impl Class . java . canonical Name ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( instance Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ= Ġan . impl Class . java . newInstance () Ġas ĠModel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Instance Cache [ an . impl Class . java . canonical Name ] Ġ= Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set ( this , Ġinstance ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġjob ?. cancel () ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġmodel Instance Cache Ġ= ĠHashMap < String ?, ĠModel >()