/* Ċ Ġ* Ġ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 Ċ Ċ import Ġorg . gradle . api . Gradle Exception Ċ import Ġorg . gradle . api . file . Directory Property Ċ import Ġorg . gradle . api . file . Regular File Property Ċ import Ġorg . gradle . api . internal . Generated Sub classes Ċ import Ġorg . gradle . api . internal . I Convention Aware Ċ import Ġorg . gradle . api . provider . Property Ċ import Ġorg . gradle . internal . serialize . Encoder Ċ import Ġjava . util . function . Supplier ĊĊ Ċ /** Ċ Ġ* ĠSerial izes Ġa Ġbean Ġby Ġserial izing Ġthe Ġvalue Ġof Ġeach Ġof Ġits Ġfields . Ċ Ġ*/ Ċ class ĠBean Field Serializer ( private Ġval Ġbean : ĠAny , Ġprivate Ġval Ġbean Type : ĠClass <* >, Ġprivate Ġval Ġstate Serializer : ĠState Serializer ) Ġ: ĠValue Serializer Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġinvoke ( encoder : ĠEncoder , Ġlistener : ĠSerialization Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġencoder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( field Ġin Ġrelevant State Of ( bean Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Value Ġ= Ġfield . get ( bean ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconvention al Value Ġ= Ġfield Value Ġ?: Ġconvention al ValueOf ( bean , Ġfield . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfinal Value Ġ= Ġunpack ( conventional Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Serializer Ġ= Ġstate Serializer . serializer For ( final Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Serializer Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( final Value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . log Field Warning (" serialize ", Ġbean Type , Ġfield . name , Ġ" there 's Ġno Ġserializer Ġfor Ġnull Ġvalues ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . log Field Warning (" serialize ", Ġbean Type , Ġfield . name , Ġ" there 's Ġno Ġserializer Ġfor Ġtype Ġ'${ Generated Sub classes . unpack Type ( final Value ). name }' ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String ( field . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Serializer ( this , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠGradle Exception (" Could Ġnot Ġsave Ġthe Ġvalue Ġof Ġfield Ġ'${ bean Type . name }.${ field . name }'. ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . log Field Serialization (" serialize ", Ġbean Type , Ġfield . name , Ġfinal Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġconvention al ValueOf ( bean : ĠAny , ĠfieldName : ĠString ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bean Ġis ĠI Convention Aware ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbean . convention Mapping . get Convention Value ( null , ĠfieldName , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġunpack ( field Value : ĠAny ?) Ġ= Ġwhen Ġ( field Value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠDirectory Property Ġ-> Ġfield Value . as File . or Null ĊĠĠĠĠĠĠĠ Ġis ĠRegular File Property Ġ-> Ġfield Value . as File . or Null ĊĠĠĠĠĠĠĠ Ġis ĠProperty < *> Ġ-> Ġfield Value . or Null ĊĠĠĠĠĠĠĠ Ġis ĠSupplier < *> Ġ-> Ġfield Value . get () ĊĠĠĠĠĠĠĠ Ġis ĠFunction 0 < *> Ġ-> Ġ( field Value Ġas Ġ(() Ġ-> ĠAny ? )). invoke () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfield Value ĊĠĠĠ Ġ} Ċ } Ċ