/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 4 Ġ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 . jet . lang . resolve . lazy . descriptors Ċ Ċ import Ġorg . jetbrains . jet . lang . descriptors . annotations . Annotation Descriptor Ċ import Ġorg . jetbrains . jet . lang . resolve . name . Fq Name Ċ import Ġorg . jetbrains . jet . lang . descriptors . annotations . Annotations Ċ import Ġorg . jetbrains . jet . lang . resolve . lazy . Lazy Entity Ċ import Ġorg . jetbrains . jet . lang . psi . Jet Annotation Entry Ċ import Ġorg . jetbrains . jet . lang . resolve . Descriptor Utils Ċ import Ġorg . jetbrains . jet . lang . descriptors . Value Parameter Descriptor Ċ import Ġorg . jetbrains . jet . lang . resolve . constants . Compile Time Constant Ċ import Ġorg . jetbrains . jet . lang . resolve . lazy . Force Resolve Util Ċ import Ġorg . jetbrains . jet . storage . Storage Manager Ċ import Ġorg . jetbrains . jet . lang . resolve . Annotation Resolver Ċ import Ġorg . jetbrains . jet . lang . resolve . Binding Trace Ċ import Ġorg . jetbrains . jet . lang . resolve . scopes . Jet Scope Ċ import Ġorg . jetbrains . jet . utils . keys ToMap Except Null s Ċ import Ġorg . jetbrains . jet . lang . resolve . Binding Context Ċ Ċ abstract Ġclass ĠLazy Annotations Context ( ĊĠĠĠĠĠĠĠĠ Ġval Ġannotation Resolver : ĠAnnotation Resolver , ĊĠĠĠĠĠĠĠĠ Ġval Ġstorage Manager : ĠStorage Manager , ĊĠĠĠĠĠĠĠĠ Ġval Ġtrace : ĠBinding Trace Ċ ) Ġ{ ĊĠĠĠ Ġabstract Ġval Ġscope : ĠJet Scope Ċ } Ċ Ċ class ĠLazy Annotations Context Impl ( ĊĠĠĠĠĠĠĠ Ġannotation Resolver : ĠAnnotation Resolver , ĊĠĠĠĠĠĠĠ Ġstorage Manager : ĠStorage Manager , ĊĠĠĠĠĠĠĠ Ġtrace : ĠBinding Trace , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġscope : ĠJet Scope Ċ ) Ġ: ĠLazy Annotations Context ( annotation Resolver , Ġstorage Manager , Ġtrace ) Ċ Ċ public Ġclass ĠLazy Annotations ( ĊĠĠĠĠĠĠĠ Ġval Ġc : ĠLazy Annotations Context , ĊĠĠĠĠĠĠĠ Ġval Ġannotation Entries : ĠList < Jet Annotation Entry > Ċ ) Ġ: ĠAn notations , ĠLazy Entity Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠisEmpty () Ġ= Ġannotation Entries . isEmpty () ĊĊĠĠĠ Ġval Ġ_ annotation Ġ= Ġc . storage Manager . create Memo ized Function Ġ{ ĊĠĠĠĠĠĠĠ Ġ( entry : ĠJet Annotation Entry ) Ġ-> ĊĠĠĠĠĠĠĠ ĠLazy Annotation Descriptor ( c , Ġentry ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind Annotation ( fq Name : ĠF q Name ): ĠAnnotation Descriptor ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġcan Ġnot Ġefficiently Ġcheck Ġshort Ġnames Ġhere : ĊĠĠĠĠĠĠĠ Ġ// Ġan Ġannotation Ġclass Ġmay Ġbe Ġrenamed Ġon Ġimport ĊĠĠĠĠĠĠĠ Ġfor Ġ( annotation Descriptor Ġin Ġiterator ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotation Type Ġ= Ġannotation Descriptor . getType () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotation Type . isError ()) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġannotation Type . get Constructor (). get Declaration Descriptor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( descriptor Ġ== Ġnull ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Descriptor Utils . getF q Name Safe ( descriptor ) Ġ== Ġfq Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġannotation Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < Annotation Descriptor > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġannotation Entries . stream (). map (_ annotation ). iterator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġforce Resolve All Contents () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTo Ġresolve Ġall Ġentries ĊĠĠĠĠĠĠĠ Ġthis . toList () ĊĠĠĠ Ġ} Ċ } Ċ Ċ public Ġclass ĠLazy Annotation Descriptor ( ĊĠĠĠĠĠĠĠ Ġval Ġc : ĠLazy Annotations Context , ĊĠĠĠĠĠĠĠ Ġval Ġannotation Entry : ĠJet Annotation Entry Ċ ) Ġ: ĠAnnotation Descriptor , ĠLazy Entity Ġ{ ĊĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġc . trace . record ( Binding Context . AN NOT ATION , Ġannotation Entry , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ resolution Results Ġ= Ġc . storage Manager . create Lazy Value Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġc . annotation Resolver . resolve Annotation Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Entry , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . scope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . trace ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠAnnotation Resolver . check Annotation Type ( annotation Entry , Ġc . trace , Ġresults ) ĊĠĠĠĠĠĠĠ Ġresults ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ type Ġ= Ġc . storage Manager . create Lazy Value Ġ{ ĊĠĠĠĠĠĠĠ Ġc . annotation Resolver . resolve Annotation Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . scope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Entry ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetType () Ġ= Ġ_ type () ĊĊĠĠĠ Ġprivate Ġval Ġ_ value Arguments Ġ= Ġc . storage Manager . create Memo ized Function With Nullable Values Ġ@ f Ġ{ ĊĠĠĠĠĠĠĠ Ġ( value Parameter Descriptor : ĠValue Parameter Descriptor ): ĠCompile Time Constant < *> ? Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ(!_ resolution Results (). is Single Result ()) Ġreturn @ f Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġresolved Value Argument Ġ= Ġ_ resolution Results (). getResult ing Call (). getValue Arguments ()[ value Parameter Descriptor ] ĊĠĠĠĠĠĠĠ Ġif Ġ( resolved Value Argument Ġ== Ġnull ) Ġreturn @ f Ġnull ĊĊĠĠĠĠĠĠĠ ĠAnnotation Resolver . getAnnotation Argument Value ( c . trace , Ġvalue Parameter Descriptor , Ġresolved Value Argument ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue Argument ( value Parameter Descriptor : ĠValue Parameter Descriptor ): ĠCompile Time Constant < out ĠAny ?> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ_ value Arguments ( value Parameter Descriptor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetAll Value Arguments (): ĠMap < Value Parameter Descriptor , ĠCompile Time Constant < out ĠAny ? >> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(!_ resolution Results (). is Single Result ()) Ġreturn Ġmap Of () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ_ resolution Results (). getResult ing Call (). getValue Arguments (). keySet (). keys ToMap Except Null s Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetValue Argument ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġforce Resolve All Contents () Ġ{ ĊĠĠĠĠĠĠĠ ĠForce Resolve Util . force Resolve All Contents ( getType ()) ĊĠĠĠĠĠĠĠ ĠgetAll Value Arguments () ĊĠĠĠ Ġ} Ċ } Ċ