@ file : Suppress (" UN CHECK ED _ CAST ") Ċ Ċ package Ġpt . pak 3 nu h . hol ly wood . processor . generator . metadata Ċ Ċ import Ġkotlinx . metadata . In consistent Kotlin Metadata Exception Ċ import Ġkotlinx . metadata . jvm . Kotlin Class Header Ċ import Ġkotlinx . metadata . jvm . Kotlin Class Metadata Ċ import Ġpt . pak 3 nu h . hol ly wood . processor . generator . metadata . type . Meta Class Ċ import Ġpt . pak 3 nu h . hol ly wood . processor . generator . util . Logger Ċ import Ġjavax . lang . model . element . Annotation Mirror Ċ import Ġjavax . lang . model . element . Annotation Value Ċ import Ġjavax . lang . model . element . Type Element Ċ Ċ class ĠKotlin Metadata Extractor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmetadata Type : ĠType Element , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger : ĠLogger Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġextract ( type Element : ĠType Element ): ĠMeta Class ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtype Element . annotation Mir rors ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġit . annotation Type . as Element () Ġ== Ġmetadata Type Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġannotation Mirror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġconvert Header ( annotation Mirror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Class Metadata . read ( header ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIn consistent Kotlin Metadata Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . log Error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ Ġmetadata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMeta Class (( metadata Ġas ĠKotlin Class Metadata . Class ). to Km Class ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert Header ( metadata Annotation : ĠAnnotation Mirror ): ĠKotlin Class Header Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠKotlin Class Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Kind ( metadata Annotation ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Metadata Version ( metadata Annotation ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Byte code Version ( metadata Annotation ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetData 1 ( metadata Annotation ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetData 2 ( metadata Annotation ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Extra String ( metadata Annotation ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget PackageName ( metadata Annotation ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Extra Int ( metadata Annotation ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget PackageName ( metadata Annotation : ĠAnnotation Mirror ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetData ( metadata Annotation , Ġ" pn ") ?. toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Extra String ( metadata Annotation : ĠAnnotation Mirror ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetData ( metadata Annotation , Ġ" xs ") ?. toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetData 2 ( metadata Annotation : ĠAnnotation Mirror ): ĠArray < String >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠgetData ( metadata Annotation , Ġ" d 2 ") ĊĠĠĠĠĠĠĠ Ġreturn Ġas String Array ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetData 1 ( metadata Annotation : ĠAnnotation Mirror ): ĠArray < String >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠgetData ( metadata Annotation , Ġ" d 1 ") ĊĠĠĠĠĠĠĠ Ġreturn Ġas String Array ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Byte code Version ( metadata Annotation : ĠAnnotation Mirror ): ĠInt Array ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠgetData ( metadata Annotation , Ġ" bv ") ĊĠĠĠĠĠĠĠ Ġreturn Ġas IntArray ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Metadata Version ( metadata Annotation : ĠAnnotation Mirror ): ĠInt Array ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠgetData ( metadata Annotation , Ġ" mv ") ĊĠĠĠĠĠĠĠ Ġreturn Ġas IntArray ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġas String Array ( data : ĠAny ?): ĠArray < String >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdata Ġas ĠList < Annotation Value >? ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ?. map Ġ{ Ġit . value Ġas ĠString Ġ} ?. to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġas IntArray ( data : ĠAny ?): ĠInt Array ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdata Ġas ĠList < Annotation Value >? ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ?. map Ġ{ Ġit . value Ġas ĠInt Ġ} ?. to IntArray () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Extra Int ( metadata Annotation : ĠAnnotation Mirror ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetData ( metadata Annotation , Ġ" xi ") Ġas ĠInt ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Kind ( metadata Annotation : ĠAnnotation Mirror ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetData ( metadata Annotation , Ġ" k ") Ġas ĠInt ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOb t ains Ġthe Ġvalue Ġof Ġthe Ġannotation Ġmember . ĠThe Ġactual Ġtype Ġis Ġnot Ġwhat Ġis Ġon Ġthe Ġsource Ġcode , ĊĠĠĠĠ Ġ* Ġbut Ġa Ġmirror Ġbased Ġprojection Ġover Ġit . ĠDetails Ġon Ġ[ Annotation Value ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠgetData ( metadata Annotation : ĠAnnotation Mirror , Ġname : ĠString ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġannotation Value Ġ= Ġmetadata Annotation . element Values ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġit . key . simple Name . toString () Ġ== Ġname Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . value ĊĊĠĠĠĠĠĠĠ Ġreturn Ġannotation Value ?. value ĊĠĠĠ Ġ} Ċ Ċ } Ċ