package Ġcom . library . ke vent bus Ċ Ċ import Ġjava . io . Buffered Writer Ċ import Ġjava . io . File Ċ import Ġjava . io . FileWriter Ċ import Ġjavax . annotation . processing . Abstract Processor Ċ import Ġjavax . annotation . processing . Round Environment Ċ import Ġjavax . lang . model . element . Executable Element Ċ import Ġjavax . lang . model . element . Type Element ĊĊ Ċ class ĠK EventBus Processor Ġ: ĠAbstract Processor () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Supported Annotation Types (): ĠMutable Set < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmutable Set Of ( Subscribe :: class . java . canonical Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess ( annotations : ĠMutable Set < out ĠType Element > ?, Ġenv : ĠRound Environment ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġannotations ?. forEach Ġ{ Ġannotation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgenerated Dir Ġ= Ġprocessing Env . options [" k apt . kotlin . generated "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġ"$ generated Dir / com / example / event bus " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( filePath , Ġ" K EventBus Index . kt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . parent File . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠBuffered Writer ( FileWriter ( file )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . write ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġcom . example . event bus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . library . ke vent bus . Subscriber Info Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . library . ke vent bus . Subscriber MethodInfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . library . ke vent bus . Thread Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠK EventBus Index () Ġ: ĠSubscriber Info Index Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġmethods By Class Ġ= Ġmutable Map Of < Class <* >, ĠMutable List < Subscriber MethodInfo >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenv ?. getElement s Annotated With ( annotation )?. forEach Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= Ġelement . enc lo sing Element ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġelement Ġas ĠExec utable Element ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubscribe Ġ= Ġmethod . getAnnotation ( Subscribe :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġ"$ clazz :: class . java ObjectType " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġmethod . simple Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠeventType Ġ= Ġ"${ method . parameters . first (). as Type ()} :: class . java ObjectType " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthread Mode Ġ= Ġ" Thread Mode .${ subscribe . thread Mode }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsticky Ġ= Ġsubscribe . sticky ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . write ("\ t \ tif Ġ( methods By Class [$ obj ] Ġ== Ġnull ) Ġmethods By Class [$ obj ] Ġ= Ġmutable ListOf ()\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . write ("\ t \ t methods By Class [$ obj ] !!. add ( Subscriber MethodInfo (\" $ methodName \", Ġ$ eventType , Ġ$ thread Mode , Ġ$ sticky )) \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . write ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ }