package Ġcom . adv anon . bus Ċ Ċ import Ġorg . springframework . aop . support . A op Utils Ċ import Ġorg . springframework . context . ApplicationContext Ċ import Ġorg . springframework . core . annotation . Annotation Utils . getAnnotation Ċ import Ġorg . springframework . core . annotation . Annotation Utils . getAnnotation Attributes Ċ import Ġjava . lang . reflect . Annotated Element Ċ import Ġjava . lang . reflect . Method Ċ Ċ internal Ġfun Ġget Listeners Map ( context : ĠApplication Context ): ĠMap < Class <* >, ĠList < Pair < Any , ĠMethod >>> Ġ= ĊĠĠĠ Ġcontext . bean Definition Names ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġcontext . getBean ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . get Annotated Methods ( Message Listener :: class . java ). map Ġ{ Ġmethod Ġ-> Ġit Ġto Ġmethod Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ. flatten () ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . second . parameters . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġ. fold ( mutable Map Of < Class <* >, ĠMutable List < Pair < Any , ĠMethod >>> ()) Ġ{ Ġmap , Ġpair Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġpair . second . parameter Types . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ key ] Ġ= Ġ( map [ key ] Ġ?: Ġmutable ListOf ()). apply Ġ{ Ġadd ( pair ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ fold Ġmap ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ internal Ġfun Ġget Converters Map ( converters : ĠList < Message Bus Converter >): ĠMap < String ?, ĠMessage Bus Converter > Ġ= ĊĠĠĠ Ġconverter s ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġextract Annotation Attribute ( it . java Class , ĠMessage Bus Converter Service :: class . java , Ġ" topic ") Ġto Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ( topic , Ġ_) Ġ-> Ġtopic Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġ. toMap () Ċ Ċ private Ġfun Ġ< T Ġ: ĠAnnotation > ĠAny . get Annotated Methods ( annotation : ĠClass < T >): ĠList < Method > Ġ= ĊĠĠĠ ĠA op Utils . getTarget Class ( this ). declared Methods . filter Ġ{ Ġit . is Annotation Present ( annotation ) Ġ} Ċ Ċ private Ġfun Ġ< T Ġ: ĠAnnotation > Ġextract Annotation Attribute ( ĊĠĠĠ Ġinstance : ĠAnnot ated Element , ĊĠĠĠ Ġannotation Type : ĠClass < T >, ĊĠĠĠ Ġattribute Name : ĠString Ċ ): ĠString ? Ġ{ ĊĠĠĠ Ġval Ġannotation Ġ= Ġget Annotation ( instance , Ġannotation Type ) Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġreturn Ġget Annotation Attributes ( annotation )[ attribute Name ]?. let Ġ{ Ġit Ġas ĠString Ġ} Ċ } Ċ