/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠR ick ĠBus ar ow Ċ Ġ* Ġ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 Ġt angle . work . compiler Ċ Ċ import Ġcom . squareup . an vil . compiler . api . Generated File Ċ import Ġcom . squareup . kotlin po et . File Spec Ċ import Ġcom . squareup . kotlin po et . Fun Spec Ċ import Ġcom . squareup . kotlin po et . K Modifier . OVERRIDE Ċ import Ġcom . squareup . kotlin po et . K Modifier . PRIVATE Ċ import Ġcom . squareup . kotlin po et . Parameterized TypeName . Companion . parameter ized By Ċ import Ġcom . squareup . kotlin po et . Property Spec Ċ import Ġcom . squareup . kotlin po et . Type Spec Ċ import Ġt angle . inject . compiler . ClassNames Ċ import Ġt angle . inject . compiler . File Generator Ċ import Ġt angle . inject . compiler . as ArgumentList Ċ import Ġt angle . inject . compiler . build File Ċ import Ġjava . io . File Ċ Ċ object ĠAss isted Worker Factory Generator Ġ: ĠFile Generator < Worker Params > Ġ{ ĊĊĠ Ġoverride Ġfun Ġgenerate ( ĊĠĠĠ Ġcode Gen Dir : ĠFile , ĊĠĠĠ Ġparams : ĠWorker Params ĊĠ Ġ): ĠGenerated File Ġ{ ĊĊĠĠĠ Ġval Ġcontent Ġ= ĠFile Spec . build File ( ĊĠĠĠĠĠ Ġparams . packageName , Ġparams . worker ClassName String ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ Ġadd Type ( ĊĠĠĠĠĠĠĠ ĠType Spec . class Builder ( params . ass isted Factory ClassName ) ĊĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Super interface ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Names . ass isted Worker Factory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. parameter ized By ( params . worker ClassName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstructor Params Ġ= Ġparams . constructor Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġit . is D agger Ass isted Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprimary Constructor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFun Spec . constructor Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Annotation ( ClassNames . inject ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Params . forEach Ġ{ Ġparam Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Parameter ( param . name , Ġparam . provider TypeName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Params . forEach Ġ{ Ġparam Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProperty Spec . builder ( param . name , Ġparam . provider TypeName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer ( param . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelegate Factory Create Args Ġ= Ġconstructor Params . as ArgumentList ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġas Provider Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinclude Module Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext First Ġ= Ġparams . ass isted Args ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. typeName Ġ== ĠClass Names . android Context ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġget Arguments Ġ= Ġif Ġ( context First ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" context , Â· params " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" params , Â· context " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Function ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFun Spec . builder (" create ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( OVERRIDE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. returns ( params . worker ClassName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" context ", ĠClass Names . android Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" params ", ĠClass Names . android x Worker Parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" val Â· delegate Factory Â· = Â· % T . create ($ delegate Factory Create Args )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . delegate Factory ClassName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" return Â· delegate Factory . get ($ get Arguments )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġcreate Generated File ( ĊĠĠĠĠĠ Ġcode Gen Dir , Ġparams . packageName , Ġparams . ass isted Factory ClassName String , Ġcontent ĊĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ