/* Ċ Ġ* Ġ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 . inject . compiler . member Inject Ċ Ċ import Ġcom . google . auto . service . Auto Service Ċ import Ġcom . squareup . an vil . compiler . api . Code Generator Ċ import Ġcom . squareup . an vil . compiler . api . Generated File Ċ import Ġcom . squareup . an vil . compiler . internal . classes And Inner Class Ċ import Ġcom . squareup . an vil . compiler . internal . find Annotation Ċ import Ġcom . squareup . an vil . compiler . internal . require Class Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Module Descriptor Ċ import Ġorg . jetbrains . kotlin . psi . Kt File Ċ import Ġt angle . inject . compiler .* Ċ import Ġt angle . inject . compiler . member Inject . file Gen . T angle App Scope _ T angle Injector _ Scope _ Module Generator Ċ import Ġt angle . inject . compiler . member Inject . file Gen . T angle Injector Generator Ċ import Ġt angle . inject . compiler . member Inject . file Gen . T angle Injector _ Module Generator Ċ import Ġjava . io . File Ċ Ċ @ Suppress (" UNUSED ") Ċ @ Auto Service ( Code Generator :: class ) Ċ class ĠMember Inject Code Generator Ġ: ĠT angle Code Generator () Ġ{ ĊĊĠ Ġval Ġfile Generators Ġ= ĠlistOf ( ĊĠĠĠ ĠT angle Injector _ Module Generator , ĊĠĠĠ ĠT angle App Scope _ T angle Injector _ Scope _ Module Generator , ĊĠĠĠ ĠT angle Injector Generator ĊĠ Ġ) ĊĊĠ Ġoverride Ġfun Ġgenerate T angle Code ( ĊĠĠĠ Ġcode Gen Dir : ĠFile , ĊĠĠĠ Ġmodule : ĠModule Descriptor , ĊĠĠĠ Ġproject Files : ĠCollection < Kt File > ĊĠ Ġ): ĠCollection < Generated File > Ġ{ ĊĊĠĠĠ Ġreturn Ġproject Files ĊĠĠĠĠĠ Ġ. classes And Inner Class ( module ) ĊĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġclazz Ġ-> ĊĊĠĠĠĠĠĠĠ Ġval Ġannotation Entry Ġ= Ġclazz . find Annotation ( Fq Names . t angle Scope , Ġmodule ) ĊĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn @ map NotNull Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġinject Constructor Ġ= Ġclazz . inject Constructor ( module ) ĊĠĠĠĠĠĠĠĠĠ Ġ?: Ġclazz . fragment Inject Constructor ( module ) ĊĠĠĠĠĠĠĠĠĠ Ġ?: Ġclazz . ass isted Inject Constructor ( module ) ĊĠĠĠĠĠĠĠĠĠ Ġ?: Ġclazz . vm Inject Constructor ( module ) ĊĊĠĠĠĠĠĠĠ Ġrequire ( ĊĠĠĠĠĠĠĠĠĠ Ġinject Constructor Ġ== Ġnull , ĊĠĠĠĠĠĠĠĠĠ Ġ{ Ġclazz . require Class Descriptor ( module ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ"@ T angle Scope Ġcannot Ġbe Ġapplied Ġto Ġclasses Ġwhich Ġuse Ġinjected Ġconstructors ." ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠMember Inject Params . create ( module , Ġclazz , Ġannotation Entry ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. flatMap Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠ Ġfile Generators . map NotNull Ġ{ Ġgenerator Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġgenerator . generate ( code Gen Dir , Ġparams ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. toList () ĊĠ Ġ} Ċ } Ċ