/* Ċ Ġ* Ġ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 Ċ Ċ import Ġcom . intellij . code Insight . completion .* Ċ import Ġcom . intellij . openapi . roots . Project Root Modification Tracker Ċ import Ġorg . jetbrains . kotlin . as Java . Kotlin Light Class Ċ import Ġorg . jetbrains . kotlin . psi . Jet File Ċ import Ġorg . jetbrains . kotlin . idea . project . Project Structure Util Ċ import Ġorg . jetbrains . kotlin . idea . cache s . Kotlin Indices Helper Ċ import Ġcom . intellij . psi . search . Global Search Scope Ċ import Ġcom . intellij . psi . util . Cached Value Provider Ċ import Ġcom . intellij . psi . util . Cached Values Manager Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . Resolution Facade Ċ import Ġorg . jetbrains . kotlin . platform . Java To Kotlin Class Map Ċ import Ġorg . jetbrains . kotlin . builtins . Kotlin Built Ins Ċ import Ġorg . jetbrains . kotlin . descriptors . impl .* Ċ import Ġorg . jetbrains . kotlin . name .* Ċ import Ġorg . jetbrains . kotlin . resolve . scopes .* Ċ import Ġorg . jetbrains . kotlin . descriptors .* Ċ import Ġorg . jetbrains . kotlin . resolve . Descriptor Utils Ċ Ċ class ĠAll Classes Completion ( val Ġparameters : ĠCompletion Parameters , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlookup Element Factory : ĠLookup Element Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolution Facade : ĠResolution Facade , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Context : ĠBinding Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodule Descriptor : ĠModule Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscope : ĠGlobal Search Scope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefix Matcher : ĠPrefix Matcher , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkind Filter : Ġ( Class Kind ) Ġ-> ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvisibility Filter : Ġ( Declaration Descriptor ) Ġ-> ĠBoolean ) Ġ{ ĊĠĠĠ Ġfun Ġcollect ( result : ĠLookup Elements Collector ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// TODO : Ġthis Ġis Ġa Ġtemporary Ġhack Ġuntil Ġwe Ġhave Ġbuilt - ins Ġin Ġindices ĊĠĠĠĠĠĠĠ Ġval Ġbuilt Ins Ġ= ĠJava To Kotlin Class Map . INSTANCE . all Kotlin Classes () Ġ+ ĠlistOf ( Kotlin Built Ins . getInstance (). get Nothing ()) ĊĠĠĠĠĠĠĠ Ġval Ġfiltered Built Ins Ġ= Ġbuilt Ins . filter Ġ{ Ġkind Filter ( it . get Kind ()) Ġ&& Ġprefix Matcher . prefix Matches ( it . getName (). asString ()) Ġ} ĊĠĠĠĠĠĠĠ Ġresult . add Descriptor Elements ( filtered Built Ins , Ġsuppress Auto Insertion Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġhelper Ġ= ĠKotlin Indices Helper ( scope . getProject (), Ġresolution Facade , Ġbinding Context , Ġscope , Ġmodule Descriptor , Ġvisibility Filter ) ĊĠĠĠĠĠĠĠ Ġresult . add Descriptor Elements ( helper . getClass Descriptors ({ Ġprefix Matcher . prefix Matches ( it ) Ġ}, Ġkind Filter ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuppress Auto Insertion Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Project Structure Util . is Js Kotlin Module ( parameters . get Original File () Ġas ĠJet File )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Adapt ed Java Completion ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : Ġthis Ġis Ġa Ġtemporary Ġsolution Ġfor ĠKotlin / Javascript Ġlibrary Ġuntil Ġwe Ġhave Ġvirtual Ġfile Ġsystem Ġbased Ġon Ġserialized Ġdescriptors ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Kotlin Javascript Completion ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Kotlin Javascript Completion ( collector : ĠLookup Elements Collector ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass Descriptors Ġ= Ġall Class Descriptors . getValue (). filter Ġ{ Ġprefix Matcher . prefix Matches ( it . getName (). asString ()) Ġ&& Ġkind Filter ( it . get Kind ()) Ġ} ĊĠĠĠĠĠĠĠ Ġcollector . add Descriptor Elements ( class Descriptors , Ġsuppress Auto Insertion Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġall Class Descriptors Ġ= ĠCached Values Manager . getManager ( scope . getProject ()). create Cached Value ( Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= Ġ( module Descriptor Ġas ĠModule Descriptor Impl ). get Package Fragment Provider () ĊĠĠĠĠĠĠĠ Ġval Ġfragments Ġ= ĠDescriptor Utils . get Packages Fq Names ( module Descriptor ). flatMap Ġ{ Ġprovider . get Package Fragments ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġclass Descriptors Ġ= Ġfragments . flatMap Ġ{ Ġit . get Member Scope (). getAll Descriptors (). filter Ġ{ Ġit Ġis ĠClass Descriptor } Ġ}. map Ġ{ Ġit Ġas ĠClass Descriptor Ġ} ĊĠĠĠĠĠĠĠ ĠCached Value Provider . Result ( class Descriptors , ĠProject Root Modification Tracker . getInstance ( scope . getProject ())) ĊĠĠĠ Ġ}, Ġfalse ) ĊĊĠĠĠ Ġprivate Ġfun Ġadd Adapt ed Java Completion ( collector : ĠLookup Elements Collector ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAll Classes Getter . process Java Classes ( parameters , Ġprefix Matcher , Ġtrue , Ġ{ Ġpsi Class Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( psi Class !! Ġ! is ĠKotlin Light Class ) Ġ{ Ġ// ĠKotlin Ġclass Ġshould Ġhave Ġalready Ġbeen Ġadded Ġas Ġkotlin Ġelement Ġbefore ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkind Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpsi Class . is Annotation Type () Ġ-> ĠClass Kind . AN NOT ATION _ CLASS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpsi Class . is Interface () Ġ-> ĠClass Kind . TRA IT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpsi Class . is Enum () Ġ-> ĠClass Kind . ENUM _ CLASS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠClass Kind . CLASS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( kind Filter ( kind )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollector . addElement With Auto Insertion Sup pressed ( lookup Element Factory . create Lookup Element For Java Class ( psi Class )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ