package Ġcom . zj . cf . annotations . parser Ċ Ċ import Ġjava . lang . reflect . Field Ċ import Ġjava . lang . reflect . Method Ċ Ċ @ Suppress (" unused ") Ċ object ĠAnnotation Parser Ġ{ ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAnnotation > Ġparse Method ( cl z : ĠClass < *> ): ĠList < Pair < Method , ĠT >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġannotation Set Ġ= Ġarray ListOf < Pair < Method , ĠT >>() ĊĠĠĠĠĠĠĠ Ġval Ġt Cls Ġ= ĠT :: class . java ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( method Ġin Ġcl z . declared Methods ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( method . is Annotation Present ( t Cls )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpan Ġ= Ġmethod . getAnnotation ( t Cls ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pan Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Set . add ( Pair < Method , ĠT >( method , Ġpan )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġannotation Set ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAnnotation > Ġparse Cls ( cl z : ĠClass < *> ): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt Cls Ġ= ĠT :: class . java ĊĠĠĠĠĠĠĠ Ġval Ġcl z Has An o Ġ= Ġcl z . is Annotation Present ( t Cls ) ĊĠĠĠĠĠĠĠ Ġif Ġ( cl z Has An o ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotation Ġ= Ġcl z . getAnnotation ( t Cls ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotation Ġ!= Ġnull ) Ġreturn Ġannotation ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAnnotation > Ġparse Field ( cl z : ĠClass < *> ): ĠList < Pair < Field , ĠT >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġannotation Set Ġ= Ġarray ListOf < Pair < Field , ĠT >>() ĊĠĠĠĠĠĠĠ Ġval Ġt Cls Ġ= ĠT :: class . java ĊĠĠĠĠĠĠĠ Ġval Ġfields Ġ= Ġcl z . declared Fields ĊĠĠĠĠĠĠĠ Ġfor Ġ( field Ġin Ġfields ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Has An o Ġ= Ġfield . is Annotation Present ( t Cls ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Has An o ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Annotation Ġ= Ġfield . getAnnotation ( t Cls ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Annotation Ġ!= Ġnull ) Ġannotation Set . add ( Pair < Field , ĠT >( field , Ġfield Annotation )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġannotation Set ĊĠĠĠ Ġ} Ċ } Ċ