package Ġcom . stripe . android . camera . framework . util Ċ Ċ import Ġandroidx . annotation . Restrict To Ċ Ċ private Ġconst Ġval ĠDEFAULT _ RE TR IES Ġ= Ġ 3 Ċ Ċ /** Ċ Ġ* ĠCall Ġa Ġgiven Ġ[ task ]. ĠIf Ġthe Ġtask Ġthrows Ġan Ġexception Ġnot Ġincluded Ġin Ġthe Ġ[ ex cluding ] Ġlist , Ġretry Ċ Ġ* Ġthe Ġtask Ġup Ġto Ġ[ times ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġtimes Ġthe Ġnumber Ġof Ġtimes Ġto Ġretry Ġthe Ġtask Ċ Ġ* Ġ@ param Ġexcluding Ġa Ġlist Ġof Ġexceptions Ġto Ġfail Ġimmediately Ġon Ċ Ġ* Ġ@ param Ġtask Ġthe Ġtask Ġto Ġretry Ċ Ġ* Ċ Ġ* ĠTODO : Ġuse Ġcontracts Ġwhen Ġthey 're Ġno Ġlonger Ġexperimental Ċ Ġ*/ Ċ internal Ġfun Ġ< T > Ġretry Sync ( ĊĠĠĠ Ġtimes : ĠInt Ġ= ĠDEFAULT _ RE TR IES , ĊĠĠĠ Ġexcluding : ĠList < Class < out ĠThrowable >> Ġ= Ġempty List (), ĊĠĠĠ Ġtask : Ġ() Ġ-> ĠT Ċ ): ĠT Ġ{ Ċ // ĠĠĠ Ġcontract Ġ{ Ġcalls In Place ( task , ĠInvocation Kind . AT _ LE AST _ ON CE ) Ġ} ĊĠĠĠ Ġvar Ġexception : ĠThrowable ? Ġ= Ġnull ĊĠĠĠ Ġfor Ġ( attempt Ġin Ġ 1 .. times ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtask () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t . java Class Ġin Ġexcluding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( exception Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Ġexception ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġcode Ġshould Ġnever Ġbe Ġreached ĊĠĠĠĠĠĠĠ Ġthrow ĠUnexpected Retry Exception () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠThis Ġexception Ġshould Ġnever Ġbe Ġthrown . Ċ Ġ*/ Ċ @ Restrict To ( Restrict To . Scope . LIBRARY _ GROUP ) Ċ class ĠUnexpected Retry Exception Ġ: ĠException () Ċ