/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠGrab tax i ĠHold ings ĠP TE ĠL TE Ġ( GR AB ) Ċ Ġ* Ċ Ġ* Ġ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 . grab . gr azel . gradle . dependencies Ċ Ċ import Ġcom . grab . gr azel . di . qual ifiers . Root Project Ċ import Ġcom . grab . gr azel . gradle . dependencies . Dependency Resolution Service . Companion . SERVICE _ NAME Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . artifacts . Configuration Ċ import Ġorg . gradle . api . artifacts . result . Resolved Component Result Ċ import Ġorg . gradle . api . internal . artifacts . result . Default Resolved Component Result Ċ import Ġorg . gradle . api . internal . artifacts . result . Resolved Component Result Internal Ċ import Ġorg . gradle . api . services . Build Service Ċ import Ġorg . gradle . api . services . Build Service Parameters Ċ import Ġjava . util . concurrent . Concurrent Skip List Map Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Build Service ] Ġto Ġcache Ġand Ġmaintain Ġa Ġproject 's Ġresolved Ġdependency Ġresolution Ġgraph Ġobtained Ġafter Ġconfiguration Ċ Ġ* Ġresolution . ĠThis Ġcache Ġl az ily Ġresolves Ġdependencies Ġthe Ġfirst Ġtime Ġand Ġcaches Ġresult Ġthere after . ĠThread Ġsafe Ġand Ċ Ġ* Ġcan Ġbe Ġqueried Ġfrom Ġmultiple Ġthreads . Ċ Ġ*/ Ċ internal Ġinterface ĠDependency Resolution Service Ġ: ĠBuild Service < Dependency Resolution Service . Params >, ĊĠĠĠ ĠAuto Closeable Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġthe Ġresolution Ġresult Ġof Ġdependencies Ġ( skip s Ġinternal Ġdependencies ) Ġfrom Ġsupported Ġconfigurations . ĊĠĠĠĠ Ġ* ĠCache s Ġthe Ġresult Ġon Ġfirst Ġaccess Ġand Ġthread Ġsafe Ġto Ġaccess Ġon Ġmultiple Ġthreads . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġproject ĠThe Ġproject Ġto Ġresolve Ġdependencies Ġfor . Ġ` project . path ` Ġis Ġused Ġas Ġcache Ġkey . ĊĠĠĠĠ Ġ* Ġ@ param Ġconfigurations ĠThe Ġlist Ġof Ġ[ Configuration ] Ġthat Ġshould Ġbe Ġresolved . ĊĠĠĠĠ Ġ* Ġ@ param Ġskip Cache ĠCurrently Ġproject Ġpath Ġis Ġused Ġas Ġcache Ġkey Ġand Ġrepeat Ġcalls Ġwith Ġdifferent Ġ@ param Ġconfigurations ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmay Ġresult Ġin Ġcached Ġresult . Ġ` skip Cache ` Ġmay Ġbe Ġused Ġto Ġforce Ġresolution Ġagain . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġresolve ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġconfigurations : ĠSequence < Configuration >, ĊĠĠĠĠĠĠĠ Ġskip Cache : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ): ĠList < Resolved Component Result Internal > ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠSERVICE _ NAME Ġ= Ġ" Dependency Resolution Cache " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠParams Ġ: ĠBuild Service Parameters Ċ } Ċ Ċ internal Ġabstract Ġclass ĠDefault Dependency Resolution Service Ġ: ĠDependency Resolution Service Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThread Ġsafe Ġlock - free Ġmap Ġto Ġhold Ġresolution Ġresult Ġof Ġa Ġproject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠKey : ĠProject Ġpath ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġproject Resolution Cache Ġ= ĊĠĠĠĠĠĠĠ ĠConcurrent Skip List Map < String , ĠList < Resolved Component Result Internal >>() ĊĊĠĠĠ Ġoverride Ġfun Ġresolve ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġconfigurations : ĠSequence < Configuration >, ĊĠĠĠĠĠĠĠ Ġskip Cache : ĠBoolean ĊĠĠĠ Ġ): ĠList < Resolved Component Result Internal > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġresolve Internal ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigurations : ĠSequence < Configuration > ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġconfigurations ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Configuration :: get Incoming ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġresol vable Dependencies Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresol vable Dependencies ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. resolution Result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. all Components ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Sequence < Resolved Component Result >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. filter Is Instance < Default Resolved Component Result >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . toString (). startsWith (" project Ġ: ") Ġ} Ġ// ĠExclude Ġproject Ġdependencies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct By ( Default Resolved Component Result :: toString ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( skip Cache ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Internal ( configurations ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Resolution Cache . get Or Put ( project . path ) Ġ{ Ġresolve Internal ( configurations ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġproject Resolution Cache . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġregister (@ Root Project Ġroot Project : ĠProject ) Ġ= Ġroot Project ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. gradle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. shared Services ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. register If Absent ( SERVICE _ NAME , ĠDefault Dependency Resolution Service :: class . java ) Ġ{} ĊĠĠĠ Ġ} Ċ } ĊĊĊ