/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 7 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . load . java Ċ Ċ import Ġorg . jetbrains . kotlin . descriptors . Class Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Class Kind Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Annotation Descriptor Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . resolve . constants . Array Value Ċ import Ġorg . jetbrains . kotlin . resolve . constants . Constant Value Ċ import Ġorg . jetbrains . kotlin . resolve . constants . EnumValue Ċ import Ġorg . jetbrains . kotlin . resolve . descriptor Util . annotation Class Ċ import Ġorg . jetbrains . kotlin . resolve . descriptor Util . fq Name Safe Ċ import Ġorg . jetbrains . kotlin . storage . Storage Manager Ċ import Ġorg . jetbrains . kotlin . utils . J sr 3 0 5 State Ċ import Ġorg . jetbrains . kotlin . utils . addTo Std lib . first NotNull Result Ċ Ċ private Ġval ĠTYPE _ QUAL IFIER _ N ICK NAME _ FQ NAME Ġ= ĠF q Name (" javax . annotation . meta . Type Qualifier Nick name ") Ċ private Ġval ĠTYPE _ QUAL IFIER _ FQ NAME Ġ= ĠF q Name (" javax . annotation . meta . Type Qualifier ") Ċ private Ġval ĠTYPE _ QUAL IFIER _ DEFAULT _ FQ NAME Ġ= ĠF q Name (" javax . annotation . meta . Type Qualifier Default ") Ċ Ċ class ĠAnnotation Type Qualifier Resolver ( storage Manager : ĠStorage Manager , Ġval Ġjsr 3 0 5 State : ĠJ sr 3 0 5 State ) Ġ{ ĊĠĠĠ Ġenum Ġclass ĠQual ifier Applic ability Type Ġ{ ĊĠĠĠĠĠĠĠ ĠMETHOD _ RETURN _ TYPE , ĠVALUE _ PARAMETER , ĠFIELD , ĠTYPE _ USE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠType Qualifier With Applic ability ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġtype Qualifier : ĠAnnotation Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġapplic ability : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġis Applicable To ( elementType : ĠQual ifier Applic ability Type ) Ġ= Ġ( applic ability Ġand Ġ( 1 Ġshl Ġelement Type . ordinal )) Ġ!= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġcomponent 1 () Ġ= Ġtype Qualifier ĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġcomponent 2 () Ġ= ĠQual ifier Applic ability Type . values (). filter ( this :: is Applicable To ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġresolved Nick names Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Manager . create Memo ized Function With Nullable Values ( this :: compute Type Qualifier Nick name ) ĊĊĠĠĠ Ġprivate Ġfun Ġcompute Type Qualifier Nick name ( class Descriptor : ĠClass Descriptor ): ĠAnnotation Descriptor ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! class Descriptor . annotations . has Annotation ( TYPE _ QUAL IFIER _ N ICK NAME _ FQ NAME )) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn Ġclass Descriptor . annotations . first NotNull Result ( this :: resolve Type Qualifier Annotation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Type Qualifier Nick name ( class Descriptor : ĠClass Descriptor ): ĠAnnotation Descriptor ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( class Descriptor . kind Ġ!= ĠClass Kind . AN NOT ATION _ CLASS ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresolved Nick names ( class Descriptor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresolve Type Qualifier Annotation ( annotation Descriptor : ĠAnnotation Descriptor ): ĠAnnotation Descriptor ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( js r 3 0 5 State . is Ignored ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġannotation Class Ġ= Ġannotation Descriptor . annotation Class Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( annotation Class . is Annotated WithType Qualifier ) Ġreturn Ġannotation Descriptor ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresolve Type Qualifier Nick name ( annotation Class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresolve Type Qualifier Default Annotation ( annotation Descriptor : ĠAnnotation Descriptor ): ĠType Qualifier With Applic ability ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( js r 3 0 5 State . is Ignored ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Qualifier Default Annotated Class Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Descriptor . annotation Class ?. take If Ġ{ Ġit . annotations . has Annotation ( TYPE _ QUAL IFIER _ DEFAULT _ FQ NAME ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġelement Types Mask Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Descriptor . annotation Class !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. annotations . find Annotation ( TYPE _ QUAL IFIER _ DEFAULT _ FQ NAME ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. all Value Arguments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ( parameter , Ġargument ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parameter Ġ== ĠJ vm Annotation Names . DEFAULT _ AN NOT ATION _ MEMBER _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargument . map Constant To Qualifier Applic ability Types () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold ( 0 ) Ġ{ Ġacc : ĠInt , Ġapplic ability Type Ġ-> Ġacc Ġor Ġ( 1 Ġshl Ġapplic ability Type . ordinal ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Qualifier Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Qualifier Default Annotated Class . annotations . first NotNull Result ( this :: resolve Type Qualifier Annotation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn ĠType Qualifier With Applic ability ( type Qualifier , Ġelement Types Mask ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠConstant Value <* >. map Constant To Qualifier Applic ability Types (): ĠList < Qualifier Applic ability Type > Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠArray Value Ġ-> Ġvalue . flatMap Ġ{ Ġit . map Constant To Qualifier Applic ability Types () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEnum Value Ġ-> ĠlistOf NotNull ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( value . name . identifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" METHOD " Ġ-> ĠQual ifier Applic ability Type . METHOD _ RETURN _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" FIELD " Ġ-> ĠQual ifier Applic ability Type . FIELD ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" PARAMETER " Ġ-> ĠQual ifier Applic ability Type . VALUE _ PARAMETER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" TYPE _ USE " Ġ-> ĠQual ifier Applic ability Type . TYPE _ USE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ val ĠBU IL T _ IN _ TYPE _ QUAL IFIER _ FQ _ NAMES Ġ= Ġset Of ( J AV AX _ NONNULL _ AN NOT ATION , ĠJ AV AX _ CHECK FOR NULL _ AN NOT ATION ) Ċ Ċ private Ġval ĠClass Descriptor . is Annotated WithType Qualifier : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġfq Name Safe Ġin ĠBU IL T _ IN _ TYPE _ QUAL IFIER _ FQ _ NAMES Ġ|| Ġannotations . has Annotation ( TYPE _ QUAL IFIER _ FQ NAME ) Ċ