/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 Ġthe Ġoriginal Ġauthor Ġor Ġauthors . Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . gradle . instant execution . serialization . code cs Ċ Ċ import Ġorg . gradle . api . internal . Gradle Internal Ċ import Ġorg . gradle . execution . plan . Node Ċ import Ġorg . gradle . instant execution . serialization . Codec Ċ import Ġorg . gradle . instant execution . serialization . Is olate Owner Ċ import Ġorg . gradle . instant execution . serialization . Read Context Ċ import Ġorg . gradle . instant execution . serialization . Write Context Ċ import Ġorg . gradle . instant execution . serialization . read Collection Ċ import Ġorg . gradle . instant execution . serialization . with Is olate Ċ import Ġorg . gradle . instant execution . serialization . write Collection ĊĊ Ċ internal Ċ class ĠWork Node Codec ( ĊĠĠĠ Ġprivate Ġval Ġowner : ĠGradle Internal , ĊĠĠĠ Ġprivate Ġval Ġinternal Types Codec : ĠCodec < Any ?> Ċ ) Ġ{ ĊĊĠĠĠ Ġsuspend Ġfun ĠWrite Context . write Work ( nodes : ĠList < Node >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠShare Ġbean Ġinstances Ġacross Ġall Ġnodes Ġ( except Ġtasks , Ġwhich Ġhave Ġtheir Ġown Ġisolate ) ĊĠĠĠĠĠĠĠ Ġwith Is olate ( Is olate Owner . Owner Gradle ( owner ), Ġinternal Types Codec ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Nodes ( nodes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġsuspend Ġfun ĠWrite Context . write Nodes ( nodes : ĠList < Node >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnodes ById Ġ= ĠHashMap < Node , ĠInt >( nodes . size ) ĊĠĠĠĠĠĠĠ Ġwrite Small Int ( nodes . size ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( node Ġin Ġnodes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Node ( node , Ġnodes ById ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġsuspend Ġfun ĠWrite Context . write Node ( node : ĠNode , Ġnodes ById : ĠMutable Map < Node , ĠInt >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( nodes ById . containsKey ( node )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAlready Ġvisited ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( success or Ġin Ġnode . dependency Success ors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Node ( success or , Ġnodes ById ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġnodes ById . size ĊĠĠĠĠĠĠĠ Ġwrite Small Int ( id ) ĊĠĠĠĠĠĠĠ Ġwrite ( node ) ĊĠĠĠĠĠĠĠ Ġwrite Collection ( node . dependency Success ors ) Ġ{ Ġwrite Small Int ( nodes ById . getValue ( it )) Ġ} ĊĠĠĠĠĠĠĠ Ġnodes ById [ node ] Ġ= Ġid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠRead Context . read Work (): ĠList < Node > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith Is olate ( Is olate Owner . Owner Gradle ( owner ), Ġinternal Types Codec ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Nodes () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġsuspend Ġfun ĠRead Context . read Nodes (): ĠArrayList < Node > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġread Small Int () ĊĠĠĠĠĠĠĠ Ġval Ġnodes ById Ġ= ĠHashMap < Int , ĠNode >( count ) ĊĠĠĠĠĠĠĠ Ġval Ġnodes Ġ= ĠArrayList < Node >( count ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġread Node ( nodes ById ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes . add ( node ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnodes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġsuspend Ġfun ĠRead Context . read Node ( nodes ById : ĠMutable Map < Int , ĠNode >): ĠNode Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġread Small Int () ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġread () Ġas ĠNode ĊĠĠĠĠĠĠĠ Ġread Collection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdep Id Ġ= Ġread Small Int () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdep Ġ= Ġnodes ById . getValue ( dep Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . add Dependency Success or ( dep ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnode . dependencies Processed () ĊĠĠĠĠĠĠĠ Ġnodes ById [ id ] Ġ= Ġnode ĊĠĠĠĠĠĠĠ Ġreturn Ġnode ĊĠĠĠ Ġ} Ċ } Ċ