package Ġcom . ls xiao . apl lo . processor . step Ċ Ċ import Ġcom . ls xiao . apollo . core . annotations . Ob serve On Ċ import Ġcom . google . auto . common . Basic Annotation Processor Ċ import Ġcom . google . auto . common . More Elements Ċ import Ġcom . google . common . collect . Set Multimap Ċ import Ġcom . ls xiao . apl lo . processor . A pol lo Processor Ċ import Ġjava . util .* Ċ import Ġjavax . lang . model . element . Element Ċ Ċ /** Ċ Ġ* Ġwrite Ġwith ĠApollo Ċ Ġ* Ġauthor : ls xiao Ċ Ġ* Ġdate : 2 0 1 7 - 0 4 - 2 2 Ġ 0 2 : 1 7 Ċ Ġ* Ġgithub : https :// github . com / ls xiao Ċ Ġ* Ġz hi hu : https :// zhihu . com / people / ls xiao Ċ Ġ*/ Ċ Ċ class ĠOb serve Step Ġ: ĠBasic Annotation Processor . Processing Step Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġannotations (): ĠSet < Class < out ĠAnnotation >> Ġ= Ġset Of ( Ob serve On :: class . java ) ĊĊĠĠĠ Ġoverride Ġfun Ġprocess ( elements By Annotation : ĠSet Multimap < Class < out ĠAnnotation >, ĠElement >): ĠSet < Element > Ġ{ ĊĠĠĠĠĠĠĠ Ġelements By Annotation . as Map (). keys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelements By Annotation . as Map ()[ it ]?. forEach Ġlist @ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= ĠApollo Processor . s Descriptor Map [ it ] Ġ?: Ġreturn @ list ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( More Elements . is Annotation Present ( it , ĠOb serve On :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor . observe On Ġ= ĠMore Elements . as Executable ( it ). getAnnotation ( Ob serve On :: class . java ). value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠHashSet () ĊĠĠĠ Ġ} Ċ } Ċ