// ĠCopyright Ġ 2 0 2 0 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ // ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ċ package Ġsoftware . aws . tool k its . jetbrains . utils . execution . steps Ċ Ċ import Ġcom . intellij . build . Build Progress Listener Ċ import Ġcom . intellij . build . events . impl . Failure Result Impl Ċ import Ġcom . intellij . build . events . impl . Finish Event Impl Ċ import Ġcom . intellij . build . events . impl . Output Build Event Impl Ċ import Ġcom . intellij . build . events . impl . Skipped Result Impl Ċ import Ġcom . intellij . build . events . impl . Start Event Impl Ċ import Ġcom . intellij . build . events . impl . Success Result Impl Ċ import Ġcom . intellij . openapi . progress . Process Canceled Exception Ċ import Ġcom . intellij . util . Exception Util Ċ import Ġcom . intellij . util . containers . Container Util Ċ import Ġsoftware . aws . tool k its . resources . message Ċ Ċ interface ĠMessage Emitter Ġ{ ĊĠĠĠ Ġfun Ġcreate Child ( step Name : ĠString , Ġhidden : ĠBoolean Ġ= Ġfalse ): ĠMessage Emitter ĊĠĠĠ Ġfun Ġstart Step () ĊĠĠĠ Ġfun Ġfinish Successfully () ĊĠĠĠ Ġfun Ġfinish Exception ally ( e : ĠThrowable ) ĊĠĠĠ Ġfun Ġadd Listener ( listener : ĠBuild Progress Listener ) ĊĠĠĠ Ġfun Ġemit Message ( message : ĠString , Ġis Error : ĠBoolean ) ĊĠĠĠ Ġfun Ġemit Message Line ( message : ĠString , Ġis Error : ĠBoolean ) Ġ= Ġemit Message ("$ message \ n ", Ġis Error ) Ċ } Ċ Ċ class ĠDefault Message Emitter Ġprivate Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġbuild Listeners : ĠMutable List < Build Progress Listener >, ĊĠĠĠ Ġprivate Ġval Ġroot Object : ĠAny , ĊĠĠĠ Ġprivate Ġval ĠparentId : ĠString , ĊĠĠĠ Ġprivate Ġval Ġstep Name : ĠString , ĊĠĠĠ Ġprivate Ġval Ġhidden : ĠBoolean , ĊĠĠĠ Ġprivate Ġval Ġparent : ĠMessage Emitter ? Ċ ) Ġ: ĠMessage Emitter Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcreate Child ( step Name : ĠString , Ġhidden : ĠBoolean ): ĠMessage Emitter Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( child Parent , Ġchild Step Name ) Ġ= Ġif Ġ( hidden ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠparentId Ġto Ġthis . step Name ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . step Name Ġto Ġstep Name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠDefault Message Emitter ( build Listeners , Ġroot Object , Ġchild Parent , Ġchild Step Name , Ġhidden , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Step () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( hidden ) Ġreturn ĊĠĠĠĠĠĠĠ Ġbuild Listeners . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Object , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStart Event Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠparentId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . currentTimeMillis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Listener ( listener : ĠBuild Progress Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild Listeners . add ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfinish Successfully () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( hidden ) Ġreturn ĊĠĠĠĠĠĠĠ Ġbuild Listeners . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Object , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFinish Event Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠparentId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . currentTimeMillis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSuccess Result Impl () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfinish Exception ally ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( e Ġis ĠProcess Canceled Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit Message ( message (" general . step . c anceled ", Ġstep Name ), Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit Message ( message (" general . step . failed ", Ġstep Name , ĠException Util . get Non Empty Message ( e , ĠException Util . get Throwable Text ( e ))), Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( hidden ) Ġreturn ĊĠĠĠĠĠĠĠ Ġbuild Listeners . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Object , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFinish Event Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠparentId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . currentTimeMillis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġis ĠProcess Canceled Exception ) ĠSk ipped Result Impl () Ġelse ĠFailure Result Impl () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġemit Message ( message : ĠString , Ġis Error : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġparent ?. emit Message ( message , Ġis Error ) ĊĠĠĠĠĠĠĠ Ġif Ġ( hidden ) Ġreturn ĊĠĠĠĠĠĠĠ Ġbuild Listeners . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Object , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOutput Build Event Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! isError ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠDe co uple Ġstep Ġname Ġfrom Ġthe Ġbuild ĠID ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Root ( build Listeners : ĠList < Build Progress Listener >, Ġroot Step Name : ĠString ): ĠMessage Emitter Ġ= ĠDefault Message Emitter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer Util . create Lock Free Copy On Write List < Build Progress Listener >(). also Ġ{ Ġit . addAll ( build Listeners ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Step Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Step Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Step Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhidden Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Root ( build Listener : ĠBuild Progress Listener , Ġroot Step Name : ĠString ): ĠMessage Emitter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Message Emitter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContainer Util . create Lock Free Copy On Write List < Build Progress Listener >(). also Ġ{ Ġit . add ( build Listener ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Step Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Step Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Step Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhidden Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ