package Ġdev . f anie . state ful compiler Ċ Ċ import Ġdev . f anie . state ful . State ful Ċ import Ġdev . f anie . state ful . State ful Options Ċ import Ġjavax . annotation . processing . Abstract Processor Ċ import Ġjavax . annotation . processing . Mess ager Ċ import Ġjavax . annotation . processing . Processing Environment Ċ import Ġjavax . annotation . processing . Round Environment Ċ import Ġjavax . lang . model . Source Version Ċ import Ġjavax . lang . model . element . Type Element Ċ import Ġjavax . lang . model . util . Element Filter Ċ Ċ class ĠStateful Compiler Ġ: ĠAbstract Processor () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Supported Options () Ġ= Ġmutable Set Of ( OPTION _ GEN _ PACKAGE ) ĊĠĠĠ Ġoverride Ġfun Ġget Supported Source Version () Ġ= ĠSource Version . RELEASE _ 8 ĊĠĠĠ Ġoverride Ġfun Ġget Supported Annotation Types () Ġ= Ġmutable Set Of ( State ful :: class . java . canonical Name ) ĊĊĠĠĠ Ġlateinit Ġvar Ġclass Generator : ĠClass Generator ĊĠĠĠ Ġlateinit Ġvar Ġmess ager : ĠMess ager ĊĠĠĠ Ġlateinit Ġvar Ġprocessing Utils : ĠProcessing Utils ĊĊĠĠĠ Ġoverride Ġfun Ġinit ( env : ĠProcessing Environment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . init ( env ) ĊĠĠĠĠĠĠĠ Ġinject ( this , Ġenv ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess ( annotations : ĠMutable Set < out ĠType Element >, Ġenv : ĠRound Environment ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess Round ( env ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Round ( env : ĠRound Environment ) Ġ{ ĊĠĠĠĠĠĠĠ ĠElement Filter . types In ( env . getElement s Annotated With ( State ful :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġstate ful Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate ful Package Ġ= Ġprocessing Utils . get Package Of ( state ful ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate ful Class Ġ= Ġprocessing Utils . getClass Of ( state ful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate ful Get ters Ġ= Ġprocessing Utils . get Get ters Of ( state ful ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotation Ġ= Ġstate ful . getAnnotation ( State ful :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate ful Options Ġ= Ġannotation . options . toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwith Listener Ġ= Ġstate ful Options . contains ( State ful Options . WITH _ LIST ENER ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Options . contains ( State ful Options . WITH _ NON _ C ASC ADING _ LIST ENER ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( with Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate Listener Builder Ġ= ĠListener Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Package , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Get ters , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Options . contains ( State ful Options . WITH _ NON _ C ASC ADING _ LIST ENER ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Options . contains ( State ful Options . NO _ DIFF ING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Generator . generate ( update Listener Builder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate ful Type Ġ= Ġannotation . type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate ful Builder Ġ= ĠWrapper Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Package , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Get ters , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Options . contains ( State ful Options . NO _ LA ZY _ INIT ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Options . contains ( State ful Options . NO _ DIFF ING ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Listener , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Options . contains ( State ful Options . ALLOW _ MISSING _ RENDER ERS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Generator . generate ( state ful Builder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ