package Ġcom . kas per sky . kas press o . internal . invocation Ċ Ċ import Ġandroidx . test . internal . runner . junit 4 . statement . Ui Thread Statement Ċ import Ġcom . kas per sky . kas press o . internal . extensions . other . get StackTrace AsString Ċ import Ġcom . kas per sky . kas press o . logger . Ui Test Logger Ċ import Ġjava . lang . reflect . Invocation Handler Ċ import Ġjava . lang . reflect . Invocation TargetException Ċ import Ġjava . lang . reflect . Method Ċ import Ġjava . util . concurrent . Count DownLatch Ċ Ċ /** Ċ Ġ* ĠThe Ġ[ Invocation Handler ] Ġimplementation Ġfor Ġdynamic Ġproxy Ġwhich Ġwill Ġsuppress Ġany Ġexception Ġthrown Ġfrom Ġthe Ġtarget . Ċ Ġ*/ Ċ @ Published Api Ċ internal Ġclass ĠUi Invocation Handler ( ĊĠĠĠ Ġprivate Ġval Ġtarget : ĠAny , ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠUi Test Logger Ċ ) Ġ: ĠInvocation Handler Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( proxy : ĠAny , Ġmethod : ĠMethod , Ġargs : ĠArray < Any >? ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠAny ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĊĠĠĠĠĠĠĠ ĠUi Thread Statement . run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Spread Operator ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġmethod ( target , Ġ*( args Ġ?: Ġempty Array ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġex Ġ= Ġif Ġ( e Ġis ĠInvocation TargetException ) Ġe . cause Ġelse Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . e (" Exception Ġduring Ġproxy Ġinvocation : Ġ$ ex , Ġ${ ex ?. get StackTrace AsString () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġl atch . await () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ