package Ġf ist ache . component . index Ċ Ċ import Ġcom . intellij . javascript . nodejs . Package Json Data Ċ import Ġcom . intellij . lang . javascript . build Tools . npm . Package Json Util Ċ import Ġcom . intellij . lang . javascript . psi . JS Implicit Element Provider Ċ import Ġcom . intellij . lang . javascript . psi . stubs . JS Implicit Element Ċ import Ġcom . intellij . openapi . project . D umb Service Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . roots . Project Root Modification Tracker Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . openapi . vfs . Virtual FileManager Ċ import Ġcom . intellij . psi . search . FileType Index Ċ import Ġcom . intellij . psi . util . Cached Value Provider Ċ import Ġcom . intellij . psi . util . Cached Values Manager Ċ import Ġcom . intellij . psi . search . Global Search Scope Ċ import Ġcom . intellij . psi . stubs . Stub Index Ċ import Ġcom . intellij . psi . stubs . Stub Index Key Ċ import Ġcom . intellij . util . Processor Ċ import Ġf ist ache . component . F ist ache FileType Ċ import Ġf ist ache . component . code Insight . from Asset Ċ import Ġf ist ache . component . index . F ist ache Index Base . Companion . create JS Key Ċ Ċ const Ġval ĠF IST ACHE : ĠString Ġ= Ġ" f ist ache " Ċ const Ġval ĠGLOBAL _ BINDING _ MARK : ĠString Ġ= Ġ"*" Ċ private Ġconst Ġval ĠINDEX ED _ ACCESS _ HINT Ġ= Ġ" []" Ċ const Ġval ĠDE LIMITER Ġ= Ġ"#" Ċ Ċ fun Ġresolve ( name : String , Ġscope : Global Search Scope , Ġkey : Stub Index Key < String , ĠJS Implicit Element Provider >): ĠCollection < JS Implicit Element >? Ġ{ ĊĠĠĠ Ġif Ġ( D umb Service . is D umb ( scope . project !! )) Ġreturn Ġnull ĊĠĠĠ Ġval Ġnormalized Ġ= Ġnormalize Name For Index ( name ) ĊĠĠĠ Ġval Ġindex Key Ġ= Ġcreate JS Key ( key ) ĊĊĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < JS Implicit Element >() ĊĠĠĠ ĠStub Index . getInstance (). process Elements ( key , Ġnormalized , Ġscope . project !! , Ġscope , ĠJS Implicit Element Provider :: class . java , ĠProcessor Ġ{ ĊĠĠĠĠĠĠĠ Ġprovider : ĠJS Implicit Element Provider ? Ġ-> ĊĠĠĠĠĠĠĠ Ġprovider ?. indexing Data ?. implicit Elements ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġcheck Ġfor Ġname Ġis Ġneeded Ġfor Ġgroups Ġof Ġelements , Ġfor Ġinstance : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdirectives : Ġ{ a : ..., Ġb : ... } Ġ-> Ġa Ġand Ġb Ġare Ġrecorded Ġin Ġ' directives ' Ġdata . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠYou Ġcan Ġfind Ġit Ġwith Ġ' a ' Ġor Ġ' b ' Ġkey , Ġbut Ġyou Ġshould Ġfilter Ġthe Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Ġ{ Ġit . user String Ġ== Ġindex Key Ġ&& Ġnormalized Ġ== Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . forEach Ġ{ Ġresult . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn @ Processor Ġtrue ĊĠĠĠ Ġ}) ĊĠĠĠ Ġreturn Ġif Ġ( result . isEmpty ()) Ġnull Ġelse Ġresult Ċ } Ċ Ċ fun Ġhas F ist ache ( project : ĠProject ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( D umb Service . is D umb ( project )) Ġreturn Ġfalse ĊĊĠĠĠ Ġreturn ĠCached Values Manager . getManager ( project ). get Cached Value ( project ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġhas F ist ache Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġpackage Json : ĠVirtual File ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( project . base Dir Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Json Ġ= Ġproject . base Dir . find Child ( Package Json Util . FILE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( package Json Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackage Json Data Ġ= ĠPackage Json Data . get OrCreate ( package Json ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( package Json Data . is Dependency Of Any Type ( FI ST ACHE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas F ist ache Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( has F ist ache ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCached Value Provider . Result . create ( true , Ġpackage Json ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠFile Type Index . contains File OfType ( F ist ache FileType . INSTANCE , ĠGlobal Search Scope . project Scope ( project )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCached Value Provider . Result . create ( result , ĠVirtual FileManager . V FS _ STRUCTURE _ MO DIF ICATION S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProject Root Modification Tracker . getInstance ( project )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġnormalize Name For Index ( name : ĠString ) Ġ= Ġfrom Asset ( name . substring Before Last ( GLOBAL _ BINDING _ MARK )) Ċ Ċ fun Ġget F ist ache Index Data ( element Ġ: ĠJS Implicit Element ): ĠF ist ache Index Data Ġ{ ĊĠĠĠ Ġval Ġtype Str Ġ= Ġelement . type String Ġ?: Ġreturn ĠF ist ache Index Data ( element . name , Ġnull , Ġnull , Ġfalse , Ġfalse ) ĊĠĠĠ Ġval Ġoriginal Name Ġ= Ġtype Str . substring After Last ( DE LIMITER ) ĊĠĠĠ Ġval Ġs Ġ= Ġtype Str . substring Before Last ( DE LIMITER ) ĊĠĠĠ Ġval Ġparts Ġ= Ġs . split ( DE LIMITER ) ĊĠĠĠ Ġassert Ġ( parts . size Ġ== Ġ 3 ) ĊĊĠĠĠ Ġval Ġis Global Ġ= Ġ" 1 " Ġ== Ġparts [ 0 ] ĊĠĠĠ Ġval Ġname Ref Ġ= Ġparts [ 1 ] ĊĠĠĠ Ġval Ġdescriptor Ġ= Ġparts [ 2 ]. substring Before ( INDEX ED _ ACCESS _ HINT ) ĊĠĠĠ Ġval Ġis Indexed Ġ= Ġparts [ 2 ]. endsWith ( INDEX ED _ ACCESS _ HINT ) ĊĠĠĠ Ġreturn ĠF ist ache Index Data ( original Name , Ġname Ref , Ġdescriptor , Ġis Indexed , Ġis Global ) Ċ } Ċ Ċ class ĠF ist ache Index Data ( val Ġoriginal Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ref : ĠString ?, Ġval Ġdescriptor Ref : ĠString ?, Ġval Ġgroup Registration : ĠBoolean , Ġval Ġis Global : ĠBoolean ) Ġ{ ĊĠĠĠ Ġfun Ġis Global Exact (): ĠBoolean Ġ= Ġis Global Ġ&& Ġ! original Name . endsWith ( GLOBAL _ BINDING _ MARK ) Ċ } Ċ