/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . android . build . gradle . internal . services Ċ Ċ import Ġorg . gradle . api . Project Ċ 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 Registration Ċ import Ġorg . gradle . api . services . Build Service Registry Ċ import Ġjava . util . UUID Ċ Ċ /** ĠRegisters Ġand Ġconfig ures Ġthe Ġbuild Ġservice Ġwith Ġthe Ġspecified Ġtype . Ġ*/ Ċ abstract Ġclass ĠService Registration Action < Service T , ĠParams T >( ĊĠĠĠ Ġprotected Ġval Ġproject : ĠProject , ĊĠĠĠ Ġprivate Ġval Ġbuild Service Class : ĠClass < Service T >, ĊĠĠĠ Ġprivate Ġval Ġmax Par alle Usage s : ĠInt ? Ġ= Ġnull Ċ ) Ġwhere ĠService T Ġ: ĠBuild Service < Params T >, ĠParams T Ġ: ĠBuild Service Parameters Ġ{ ĊĠĠĠ Ġfun Ġexecute (): ĠProvider < Service T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġproject . gradle . shared Services . register If Absent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Build ServiceName ( build Service Class ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Service Class ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġbuild Service Spec Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Service Spec . parameters ?. let Ġ{ Ġparams Ġ-> Ġconfigure ( params ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Par alle Usage s ?. let Ġ{ Ġbuild Service Spec . max Parallel Usage s . set ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġconfigure ( parameters : ĠParams T ) Ċ } Ċ Ċ /** ĠReturns Ġthe Ġbuild Ġservice Ġwith Ġthe Ġspecified Ġtype . ĠP refer Ġre ified Ġ[ get Build Service ] Ġto Ġthis Ġmethod . Ġ*/ Ċ fun Ġ< Service T Ġ: ĠBuild Service < out ĠBuild Service Parameters >> Ġget Build Service ( ĊĠĠĠ Ġbuild Service Registry : ĠBuild Service Registry , ĊĠĠĠ Ġbuild Service Class : ĠClass < Service T > Ċ ): ĠProvider < Service T > Ġ{ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġreturn Ġ( build Service Registry . regist rations . get ByName ( get Build ServiceName ( build Service Class )) Ġas ĠBuild Service Registration < Service T , Ġ*> ). getService () Ċ } Ċ Ċ /** ĠReturns Ġthe Ġbuild Ġservice Ġof Ġ[ Service T ] Ġtype . Ġ*/ Ċ inline Ġfun Ġ< re ified ĠService T Ġ: ĠBuild Service < out ĠBuild Service Parameters >> Ġget Build Service ( build Service Registry : ĠBuild Service Registry ): ĠProvider < Service T > Ġ{ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġreturn Ġ( build Service Registry . regist rations . get ByName ( get Build ServiceName ( Service T :: class . java )) Ġas ĠBuild Service Registration < Service T , Ġ*> ). getService () Ċ } Ċ Ċ /** Ċ Ġ* ĠGet Ġbuild Ġservice Ġname Ġthat Ġworks Ġeven Ġif Ġbuild Ġservice Ġtypes Ġcome Ġfrom Ġdifferent Ġclass Ġload ers . Ċ Ġ* ĠIf Ġthe Ġservice Ġname Ġis Ġthe Ġsame , Ġand Ġsome Ġtype ĠT Ġis Ġdefined Ġin Ġtwo Ġclass Ġload ers ĠL 1 Ġand ĠL 2 . ĠE . g . Ċ Ġ* Ġthis Ġis Ġtrue Ġfor Ġcomposite Ġbuilds Ġand Ġother Ġproject Ġsetup s Ġ( see Ġb / 1 5 4 3 8 8 1 9 6 ). Ċ Ġ* Ċ Ġ* ĠRegistration Ġof Ġservice Ġmay Ġregister Ġ( T Ġfrom ĠL 1 ) Ġor Ġ( T Ġfrom ĠL 2 ). ĠThis Ġmeans Ġthat Ġquerying Ġit Ġwith Ċ Ġ* ĠT Ġfrom Ġother Ġclass Ġloader Ġwill Ġfail Ġat Ġruntime . ĠThis Ġmethod Ġmakes Ġsure Ġboth ĠT Ġfrom ĠL 1 Ġand ĠT Ġfrom Ċ Ġ* ĠL 2 Ġwill Ġsuccessfully Ġregister Ġbuild Ġservices . Ċ Ġ*/ Ċ fun Ġget Build ServiceName ( type : ĠClass < *> ): ĠString Ġ= Ġtype . name Ġ+ Ġ"_" Ġ+ Ġper ClassLoader Constant Ċ Ċ /** ĠUsed Ġto Ġget Ġunique Ġbuild Ġservice Ġname . ĠEach Ġclass Ġloader Ġwill Ġinitialize Ġits Ġown Ġversion . Ġ*/ Ċ private Ġval Ġper ClassLoader Constant Ġ= ĠUUID . randomUUID (). toString () Ċ