package Ġcn . gor outer . compiler . kotlin Ċ Ċ import Ġcn . rub in try . annotation . kotlin . Auto W ired Ċ import Ġcom . google . auto . service . Auto Service Ċ import Ġjava . io . IOException Ċ import Ġjava . io . Writer Ċ import Ġjava . util .* Ċ import Ġjavax . annotation . processing . F iler Ċ import Ġjavax . annotation . processing . Processing Environment Ċ import Ġjavax . annotation . processing . Processor Ċ import Ġjavax . annotation . processing . Round Environment Ċ import Ġjavax . lang . model . Source Version Ċ import Ġjavax . lang . model . element . Type Element Ċ import Ġjavax . tools . Java FileObject ĊĊ Ċ @ Auto Service ( Processor :: class ) Ġ// Register Ġa Ġannotation Ġprocessor Ċ class ĠAuto W ired Compiler Kt Ġ: ĠBase Processor () Ġ{ ĊĊĊĠĠĠ Ġprivate Ġvar Ġf iler : ĠF iler ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġinit ( processing Environment : ĠProcessing Environment ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . init ( processing Environment ) ĊĠĠĠĠĠĠĠ Ġf iler Ġ= Ġprocessing Environment ?. filer ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDeclare Ġthe ĠJava Ġversion Ġsupported Ġby Ġthe Ġannotation Ġprocessor ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Supported Source Version (): ĠSource Version ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprocessing Env . source Version ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhat Ġare Ġthe Ġannotations Ġto Ġbe Ġprocessed Ġby Ġthe Ġannotation Ġprocessor ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Supported Annotation Types (): ĠSet < String >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtypes : ĠMutable Set < String > Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠ Ġtypes . add ( Auto W ired :: class . java . canonical Name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtypes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess ( annotations : ĠMutable Set < out ĠType Element > ?, Ġround Env : ĠRound Environment ?): ĠBoolean Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġelements Annotation With Ġ= Ġround Env ?. getElement s Annotated With ( Auto W ired :: class . java ) Ġas ĠSet < Element ?> Ċ // ĠĠĠĠĠĠĠ Ġval Ġmap Ġ: ĠMutable Map < String Ġ, ĠString > Ġ= Ġmutable Map Of () Ċ // ĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġelements Annotation With ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Path Ġ= Ġelement ?. getAnnotation ( Auto W ired :: class . java )?. name Ġ?: Ġ"" Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Type Ġ= Ġelement ?. enc lo sing Element . toString () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ route Path ] Ġ= Ġtarget Type Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" route Path :$ route Path ") Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġprocess Route ( map ) Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( annotations . isNull OrEmpty (). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger ?. info ("> >> ĠFound Ġaut ow ired Ġfield , Ġstart ... Ġ<<< ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ è·¯çĶ± èĬĤçĤ¹ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġnode Map ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġprocess Route ( node Map : ĠMutable Map < String , ĠString >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( node Map . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwriteTo Cache ( node Map ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠwriteTo Cache ( node Map : ĠMutable Map < String , ĠString >) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġwriter : ĠWriter ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġclazz Name Ġ= Ġ" Auto Wire _${ System . currentTimeMillis ()} _ Impl " ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource File : ĠJava FileObject ? Ġ= Ġf iler ?. create SourceFile (" cn . gor outer . route .$ clazz Name ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }