package Ġgradle Ċ Ċ import Ġorg . gradle . api . provider . Property Ċ import Ġorg . gradle . api . provider . Provider Ċ import Ġorg . gradle . api . services . Build Service Ċ import Ġorg . gradle . api . services . Build Service Parameters Ċ import Ġorg . gradle . api . services . Build Service Registry Ċ import Ġorg . gradle . build . event . Build Events Listener Registry Ċ import Ġorg . gradle . tool ing . events . Failure Result Ċ import Ġorg . gradle . tool ing . events . Finish Event Ċ import Ġorg . gradle . tool ing . events . Operation Completion Listener Ċ import Ġorg . gradle . tool ing . events . Operation Result Ċ Ċ abstract Ġclass ĠBuild Event Service Ġ: ĠBuild Service < Build Event Service . Params >, ĠOperation Completion Listener , ĠAuto Closeable Ġ{ ĊĠĠĠ Ġinterface ĠParams Ġ: ĠBuild Service Parameters Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Property Ġ: ĠProperty < Int > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠResults Ġ: ĠHashMap < Finish Event , ĠOperation Result >() Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġhas No Failures () Ġ= Ġfilter Ġ{ Ġit . value Ġis ĠFailure Result Ġ}. isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġresults Ġ= ĠResults () ĊĠĠĠ Ġprivate Ġval Ġconfig Ġ= Ġconfigs . find ( this ) ĊĠĠĠ Ġinit Ġ{ Ġconfig ?. build Start ?. invoke () Ġ} ĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ Ġconfig ?. build Finish ?. invoke ( results ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Finish ( task Finish Event : ĠFinish Event ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtask Finish Event ?. result ?. let Ġ{ Ġresults . put ( task Finish Event , Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġconfigs Ġ= ĠConfig s () ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Service Registry : ĠBuild Service Registry , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Events Listener Registry : ĠBuild Events Listener Registry , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Build Start Ġ: Ġ() Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Build Finish Ġ: Ġ( Results ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġconfigs . create ( build Service Registry , Ġbuild Events Listener Registry , Ġon Build Start , Ġon Build Finish ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠConfig s Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlist Ġ= Ġmutable ListOf < Config >() ĊĠĠĠĠĠĠĠ Ġfun Ġfind ( service Ġ: ĠBuild Event Service ) Ġ= Ġlist . get OrNull ( service . parameters . id Property . get ()) ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Service Registry : ĠBuild Service Registry , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Events Listener Registry : ĠBuild Events Listener Registry , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Build Start Ġ: Ġ() Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Build Finish Ġ: Ġ( Results ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Service Registry . register If Absent (" Build Event Service ", ĠBuild Event Service :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Index Ġ= Ġlist . last Index Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( next Index , ĠConfig ( on Build Start , Ġon Build Finish )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . parameters . id Property . set ( next Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Events Listener Registry . on Task Completion ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠConfig ( ĊĠĠĠĠĠĠĠ Ġval Ġbuild Start Ġ: Ġ() Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġval Ġbuild Finish Ġ: Ġ( Results ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ċ } ĊĊ