package Ġcom . iz ik ode . iz ilib . base kotlin compiler . component Ċ Ċ import Ġcom . iz ik ode . iz ilib . base kotlin compiler . Compilation Utilities Ċ import Ġcom . iz ik ode . iz ilib . base kotlin compiler . source . member . field . Annotated Variable Source Ċ import Ġcom . iz ik ode . iz ilib . base kotlin compiler . source . member . method . Annotated Function Source Ċ import Ġcom . iz ik ode . iz ilib . base kotlin compiler . source . type . Annotated Class Source Ċ import Ġjavax . annotation . processing . Round Environment Ċ import Ġjavax . lang . model . element . Type Element Ċ import Ġjavax . lang . model . util . Element Filter Ċ import Ġkotlin . reflect . K Class Ċ Ċ data Ġclass ĠCompilation Round ( ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcompilation Utilities : ĠCompilation Utilities , ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġannotations : ĠMutable Set < out ĠType Element >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġround Environment : ĠRound Environment Ċ Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġ< Class Annotation > Ġclasses With ( annotation : ĠK Class < out ĠClass Annotation >) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠArrayList < Annotated Class Source < Class Annotation >> Ġwhere ĠClass Annotation Ġ: ĠAnnotation Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġclasses Ġ= Ġarray ListOf < Annotated Class Source < Class Annotation >>() ĊĊĠĠĠĠĠĠĠ ĠElement Filter . types In ( round Environment . getElement s Annotated With ( annotation . java )). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclasses . add ( Annotated Class Source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getAnnotation ( annotation . java ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation Utilities ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġclasses ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< Variable Annotation > Ġvariables With ( annotation : ĠK Class < out ĠVariable Annotation >) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠArrayList < Annotated Variable Source < Variable Annotation >> Ġwhere ĠVariable Annotation Ġ: ĠAnnotation Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġvariables Ġ= Ġarray ListOf < Annotated Variable Source < Variable Annotation >>() ĊĊĠĠĠĠĠĠĠ ĠElement Filter . fields In ( round Environment . getElement s Annotated With ( annotation . java )). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariables . add ( Annotated Variable Source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getAnnotation ( annotation . java ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation Utilities ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġvariables ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< Function Annotation > Ġfunctions With ( annotation : ĠK Class < out ĠFunction Annotation >) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠArrayList < Annotated Function Source < Function Annotation >> Ġwhere ĠFunction Annotation Ġ: ĠAnnotation Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmethods Ġ= Ġarray ListOf < Annotated Function Source < Function Annotation >>() ĊĊĠĠĠĠĠĠĠ ĠElement Filter . methods In ( round Environment . getElement s Annotated With ( annotation . java )). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethods . add ( Annotated Function Source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getAnnotation ( annotation . java ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation Utilities ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmethods ĊĠĠĠ Ġ} Ċ Ċ }