/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 5 Ġ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 . idea . completion . smart Ċ Ċ import Ġcom . intellij . code Insight . lookup . Lookup Element Ċ import Ġorg . jetbrains . kotlin . descriptors .* Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . resolve Import Reference Ċ import Ġorg . jetbrains . kotlin . idea . completion . Lookup Element Factory Ċ import Ġorg . jetbrains . kotlin . idea . completion . decorate As Static Member Ċ import Ġorg . jetbrains . kotlin . idea . core . Expected Info Ċ import Ġorg . jetbrains . kotlin . idea . core . Property Delegate Additional Data Ċ import Ġorg . jetbrains . kotlin . idea . core . isVisible Ċ import Ġorg . jetbrains . kotlin . idea . core . multiple F uzzy Types Ċ import Ġorg . jetbrains . kotlin . idea . resolve . Resolution Facade Ċ import Ġorg . jetbrains . kotlin . idea . util . fuzzy ReturnType Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . psi . Kt Simple Name Expression Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . Descriptor Utils Ċ import Ġorg . jetbrains . kotlin . resolve . descriptor Util . is Extension Ċ import Ġorg . jetbrains . kotlin . types . Type Subst it utor Ċ import Ġjava . util .* Ċ Ċ // Ġadds Ġjava Ġstatic Ġmembers , Ġenum Ġmembers Ġand Ġmembers Ġfrom Ġcompanion Ġobject Ċ class ĠStatic Members ( ĊĠĠĠ Ġprivate Ġval Ġbinding Context : ĠBinding Context , ĊĠĠĠ Ġprivate Ġval Ġlookup Element Factory : ĠLookup Element Factory , ĊĠĠĠ Ġprivate Ġval Ġresolution Facade : ĠResolution Facade , ĊĠĠĠ Ġprivate Ġval Ġmodule Descriptor : ĠModule Descriptor Ċ ) Ġ{ ĊĠĠĠ Ġfun ĠaddTo Collection ( ĊĠĠĠĠĠĠĠ Ġcollection : ĠMutable Collection < Lookup Element >, ĊĠĠĠĠĠĠĠ Ġexpected Infos : ĠCollection < Expected Info >, ĊĠĠĠĠĠĠĠ Ġcontext : ĠK t Simple Name Expression , ĊĠĠĠĠĠĠĠ Ġenum Entries To Skip : ĠSet < Declaration Descriptor > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Infos By Class Ġ= ĠHashMap < Class Descriptor , ĠMutable List < Expected Info >>() ĊĠĠĠĠĠĠĠ Ġfor Ġ( expected Info Ġin Ġexpected Infos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( fuzzy Type Ġin Ġexpected Info . multiple F uzzy Types ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Descriptor Ġ= Ġfuzzy Type . type . constructor . declaration Descriptor Ġas ? ĠClass Descriptor Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Infos By Class . get Or Put ( class Descriptor ) Ġ{ ĠArrayList () Ġ}. add ( expected Info ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expected Info . additional Data Ġis ĠProperty Delegate Additional Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeleg ates Class Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolution Facade . resolve Import Reference ( module Descriptor , ĠF q Name (" kotlin . properties . Deleg ates ")). single OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deleg ates Class Ġis ĠClass Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠaddTo Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeleg ates Class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( expected Info ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenum Entries To Skip , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSmart Completion Item Priority . DE LEG ATES _ STATIC _ MEMBER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ(( class Descriptor , Ġexpected Infos For Class ) Ġin Ġexpected Infos By Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! class Descriptor . name . is Special ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠaddTo Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Infos For Class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenum Entries To Skip , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSmart Completion Item Priority . STATIC _ MEMBER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠaddTo Collection ( ĊĠĠĠĠĠĠĠ Ġcollection : ĠMutable Collection < Lookup Element >, ĊĠĠĠĠĠĠĠ Ġclass Descriptor : ĠClass Descriptor , ĊĠĠĠĠĠĠĠ Ġexpected Infos : ĠCollection < Expected Info >, ĊĠĠĠĠĠĠĠ Ġcontext : ĠK t Simple Name Expression , ĊĠĠĠĠĠĠĠ Ġenum Entries To Skip : ĠSet < Declaration Descriptor >, ĊĠĠĠĠĠĠĠ Ġdefault Priority : ĠSmart Completion Item Priority ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġprocess Member ( descriptor : ĠDeclaration Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( descriptor Ġis ĠDeclaration Descriptor With Visibility Ġ&& Ġ! descriptor . isVisible ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolution Facade ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher : Ġ( Expected Info ) Ġ-> ĠExpected Info Match Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor Ġis ĠCallable Descriptor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠreturnType Ġ= Ġdescriptor . fuzzy ReturnType () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġexpected Info Ġ-> ĠreturnType . match Expected Info ( expected Info ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDescriptor Utils . is Enum Entry ( descriptor ) Ġ&& Ġ! enum Entries To Skip . contains ( descriptor ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġwe Ġdo Ġnot Ġneed Ġto Ġcheck Ġtype Ġof Ġenum Ġentry Ġbecause Ġit 's Ġtaken Ġfrom Ġproper Ġenum Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠExpected Info Match . match ( Type Subst it utor . EMPTY ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpriority Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDescriptor Utils . is Enum Entry ( descriptor ) Ġ-> ĠSmart Completion Item Priority . ENUM _ ENTR IES ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdefault Priority ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollection . add Lookup Elements ( descriptor , Ġexpected Infos , Ġmatcher ) Ġ{ Ġcreate Lookup Elements ( it , Ġpriority ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclass Descriptor . static Scope . get Cont ributed Descriptors (). forEach (:: process Member ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcompanion Object Ġ= Ġclass Descriptor . comp anion Object Descriptor ĊĠĠĠĠĠĠĠ Ġif Ġ( comp anion Object Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion Object . default Type . member Scope . get Cont ributed Descriptors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . is Extension Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach (:: process Member ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmembers Ġ= Ġclass Descriptor . default Type . member Scope . get Cont ributed Descriptors (). filter Ġ{ Ġmember Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( class Descriptor . kind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Kind . ENUM _ CLASS Ġ-> Ġmember Ġis ĠClass Descriptor Ġ// Ġenum Ġmember ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Kind . OBJECT Ġ-> Ġmember Ġis ĠCallable Member Descriptor Ġ|| ĠDescriptor Utils . is Non Companion Object ( member ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠDescriptor Utils . is Non Companion Object ( member ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmembers . forEach (:: process Member ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Lookup Elements ( ĊĠĠĠĠĠĠĠ Ġmember Descriptor : ĠDeclaration Descriptor , ĊĠĠĠĠĠĠĠ Ġpriority : ĠSmart Completion Item Priority ĊĠĠĠ Ġ): ĠCollection < Lookup Element > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlookup Element Factory . create Standard Lookup Elements For Descriptor ( member Descriptor , Ġuse Receiver Types Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . decorate As Static Member ( member Descriptor , ĠclassName As Lookup String Ġ= Ġtrue ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assign Smart Completion Priority ( priority ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ