package Ġcom . jetbrains . rd . framework . test . util Ċ Ċ import Ġcom . jetbrains . rd . util . error Ċ import Ġcom . jetbrains . rd . util . getLogger Ċ import Ġcom . jetbrains . rd . util . info Ċ import Ġcom . jetbrains . rd . util . reactive . IS cheduler Ċ import Ġjava . util . concurrent . Linked Blocking Deque Ċ Ċ /** Ċ Ġ* ĠScheduler Ġexecutes Ġqueued Ġactions Ġse quent ially Ġwhen Ġone Ġcall Ġ[ flush ] Ġ( on Ġa Ġthread Ġwhere Ġ[ flush ] Ġinvoked ). Ċ Ġ*/ Ċ object ĠSequential Pump ing Scheduler Ġ: ĠIS cheduler Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġq Ġ= ĠLinked Blocking Deque < () Ġ-> ĠUnit >() ĊĊĠĠĠ Ġoverride Ġfun Ġqueue ( action : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġq . add ( action ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġexecute ( action : () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold Ġ= ĠisActive ĊĠĠĠĠĠĠĠ Ġis Executing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Logger < Sequential Pump ing Scheduler >(). error ( e ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Executing Ġ= Ġold ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval ĠisActive : ĠBoolean Ġget () Ġ= Ġtrue ĊĊĠĠĠ Ġvar Ġis Executing : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĊĠĠĠ Ġoverride Ġfun Ġflush () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġq . poll First () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute ( next ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠisEmpty : ĠBoolean Ġget () Ġ= Ġq . size Ġ== Ġ 0 Ċ } Ċ