package Ġcom . squareup . an vil . compiler . codegen Ċ Ċ import Ġcom . google . auto . service . Auto Service Ċ import Ġcom . squareup . an vil . annotations . Contribut es To Ċ import Ġcom . squareup . an vil . compiler . HINT _ CONTRIBUT ES _ PACKAGE _ PREFIX Ċ import Ġcom . squareup . an vil . compiler . REFERENCE _ SUFFIX Ċ import Ġcom . squareup . an vil . compiler . SCOPE _ SUFFIX Ċ import Ġcom . squareup . an vil . compiler . api . An vil Compilation Exception Ċ import Ġcom . squareup . an vil . compiler . api . An vil Context Ċ import Ġcom . squareup . an vil . compiler . api . Code Generator Ċ import Ġcom . squareup . an vil . compiler . api . Generated File Ċ import Ġcom . squareup . an vil . compiler . api . create Generated File Ċ import Ġcom . squareup . an vil . compiler . contribut es To Fq Name Ċ import Ġcom . squareup . an vil . compiler . d agger Module Fq Name Ċ import Ġcom . squareup . an vil . compiler . internal . as ClassName Ċ import Ġcom . squareup . an vil . compiler . internal . build File Ċ import Ġcom . squareup . an vil . compiler . internal . classes And Inner Class Ċ import Ġcom . squareup . an vil . compiler . internal . has Annotation Ċ import Ġcom . squareup . an vil . compiler . internal . is Interface Ċ import Ġcom . squareup . an vil . compiler . internal . require Fq Name Ċ import Ġcom . squareup . an vil . compiler . internal . safe Package String Ċ import Ġcom . squareup . an vil . compiler . internal . scope Ċ import Ġcom . squareup . an vil . compiler . merge Modules Fq Name Ċ import Ġcom . squareup . kotlin po et . File Spec Ċ import Ġcom . squareup . kotlin po et . K Modifier . PUBLIC Ċ 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 . as ClassName Ċ import Ġdagger . Module Ċ import Ġorg . jetbrains . kotlin . descriptors . Module Descriptor Ċ import Ġorg . jetbrains . kotlin . lexer . Kt Tokens Ċ import Ġorg . jetbrains . kotlin . psi . Kt File Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . visibility Modifier Type OrDefault Ċ import Ġjava . io . File Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠGenerates Ġa Ġhint Ġfor Ġeach Ġcontributed Ġclass Ġin Ġthe Ġ` hint . an vil ` Ġpackages . ĠThis Ġallows Ġthe Ċ Ġ* Ġcompiler Ġplugin Ġto Ġfind Ġall Ġcontributed Ġclasses Ġa Ġlot Ġfaster Ġwhen Ġmerging Ġmodules Ġand Ġcomponent Ċ Ġ* Ġinterfaces . Ċ Ġ*/ Ċ @ Auto Service ( Code Generator :: class ) Ċ internal Ġclass ĠContribut es To Generator Ġ: ĠCode Generator Ġ{ ĊĊĠ Ġoverride Ġfun Ġis Applicable ( context : ĠAn vil Context ) Ġ= Ġ! context . generate Factories Only ĊĊĠ Ġoverride Ġfun Ġgenerate Code ( ĊĠĠĠ Ġcode Gen Dir : ĠFile , ĊĠĠĠ Ġmodule : ĠModule Descriptor , ĊĠĠĠ Ġproject Files : ĠCollection < Kt File > ĊĠ Ġ): ĠCollection < Generated File > Ġ{ ĊĠĠĠ Ġreturn Ġproject Files ĊĠĠĠĠĠ Ġ. classes And Inner Class ( module ) ĊĠĠĠĠĠ Ġ. filter Ġ{ Ġit . has Annotation ( contribut es To Fq Name , Ġmodule ) Ġ} ĊĠĠĠĠĠ Ġ. on Each Ġ{ Ġclazz Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ(! clazz . is Interface () Ġ&& ĊĠĠĠĠĠĠĠĠĠ Ġ! clazz . has Annotation ( d agger Module Fq Name , Ġmodule ) Ġ&& ĊĠĠĠĠĠĠĠĠĠ Ġ! clazz . has Annotation ( merge Modules Fq Name , Ġmodule ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthrow ĠAn vil Compilation Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ clazz . require Fq Name ()} Ġis Ġannotated Ġwith Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ ${ Contribut es To :: class . simple Name }, Ġbut Ġthis Ġclass Ġis Ġneither Ġan Ġinterface Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" nor Ġa ĠD agger Ġmodule . ĠDid Ġyou Ġforget Ġto Ġadd Ġ@ ${ Module :: class . simple Name } ?", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Ġ= Ġclazz . ident ifying Element ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( clazz . visibility Modifier Type OrDefault (). value Ġ!= ĠK t Tokens . PUBLIC _ KEYWORD . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthrow ĠAn vil Compilation Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ clazz . require Fq Name ()} Ġis Ġcontributed Ġto Ġthe ĠD agger Ġgraph , Ġbut Ġthe Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" module Ġis Ġnot Ġpublic . ĠOnly Ġpublic Ġmodules Ġare Ġsupported .", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Ġ= Ġclazz . ident ifying Element ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. map Ġ{ Ġclazz Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġgenerated Package Ġ= ĠH INT _ CONTRIBUT ES _ PACKAGE _ PREFIX Ġ+ ĊĠĠĠĠĠĠĠĠĠ Ġclazz . containing Kt File . package Fq Name . safe Package String ( dot Prefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġclazz . as ClassName () ĊĠĠĠĠĠĠĠ Ġval Ġclass Fq Name Ġ= Ġclazz . require Fq Name (). toString () ĊĠĠĠĠĠĠĠ Ġval ĠpropertyName Ġ= Ġclass Fq Name . replace ('.', Ġ'_ ') ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= Ġclazz . scope ( contribut es To Fq Name , Ġmodule ). as ClassName ( module ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĊĠĠĠĠĠĠĠĠĠ ĠFile Spec . build File ( generated Package , ĠpropertyName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProperty Spec ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠpropertyName Ġ+ ĠREFER ENCE _ SUFFIX , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠK Class :: class . as ClassName (). parameter ized By ( className ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer ("% T :: class ", ĠclassName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( PUBLIC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProperty Spec ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠpropertyName Ġ+ ĠSCO PE _ SUFFIX , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠK Class :: class . as ClassName (). parameter ized By ( scope ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer ("% T :: class ", Ġscope ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( PUBLIC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate Generated File ( ĊĠĠĠĠĠĠĠĠĠ Ġcode Gen Dir Ġ= Ġcode Gen Dir , ĊĠĠĠĠĠĠĠĠĠ ĠpackageName Ġ= Ġgenerated Package , ĊĠĠĠĠĠĠĠĠĠ ĠfileName Ġ= ĠpropertyName , ĊĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġcontent ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. toList () ĊĠ Ġ} Ċ } Ċ