package Ġnl . h ann ah sten . tex ify idea . util . files Ċ Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . util . Modification Tracker Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . util . Cached Value Ċ import Ġcom . intellij . psi . util . Cached Value Provider Ċ import Ġcom . intellij . psi . util . Cached Values Manager Ċ import Ġcom . intellij . psi . util . Psi Modification Tracker Ċ Ċ /** Ċ Ġ* ĠCache s Ġthe Ġvalues Ġfor Ġ[ find Referenced File Set ] Ġcalls . Ċ Ġ* Ċ Ġ* Ġ@ author ĠH ann ah ĠS che lle ken s Ċ Ġ*/ Ċ class ĠRefer enced File Set Cache ( val Ġproject : ĠProject ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġvalue Manager Ġ= ĠCached Values Manager . getManager ( project ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrack s Ġthe Ġmodification Ġcounts Ġfor Ġeach Ġbase Ġpsi Ġfile . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġmodification Tracker Ġ= ĠHashMap < Psi File , ĠMy Modification Tracker >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġdependencies Ġfor Ġthe Ġfile Ġset Ġcache Ġof Ġthe Ġkey Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠCached Value Provider . Result . get Dependency Items ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġdependencies Ġ= ĠHashMap < Psi File , ĠArray < Any >>() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġcached Ġfile Ġset Ġvalue Ġfor Ġeach Ġbase Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġbase Ġfile Ġis Ġthe Ġfile Ġfrom Ġwhich Ġthe Ġfile Ġset Ġrequest Ġcame Ġfrom . ĊĠĠĠĠ Ġ* ĠMean ing Ġthat Ġa Ġbase Ġfile Ġ` A ` Ġis Ġmapped Ġto Ġthe Ġfile Ġset Ġwith Ġ` A ` Ġas Ġsearch Ġroot , Ġ` B ` Ġis Ġmapped Ġto Ġthe Ġfile Ġset ĊĠĠĠĠ Ġ* Ġwith Ġ` B ` Ġas Ġsearch Ġroot Ġetc . ĊĠĠĠĠ Ġ* ĠIt Ġcould Ġbe Ġthat Ġmultiple Ġvalues Ġare Ġequal . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġfile Set Cache Ġ= ĠHashMap < Psi File , ĠCached Value < Set < Psi File >> >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġcached Ġvalue Ġfor Ġthe Ġfile Ġset Ġof Ġbase Ġfile Ġ` psi File `. ĊĠĠĠĠ Ġ* ĠThis Ġwill Ġregister Ġthe Ġcache Ġto Ġthe Ġ[ Cached Values Manager ] Ġand Ġstore Ġthe Ġcached Ġvalue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbuild Cache For ( psi File : ĠPsi File ): ĠCached Value < Set < Psi File >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpsi File Cache Ġ= Ġvalue Manager . create Cached Value Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCached Value Provider . Result . create ( find Referenced File Set ( psi File ), Ġdependencies For ( psi File )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfile Set Cache [ psi File ] Ġ= Ġpsi File Cache ĊĠĠĠĠĠĠĠ Ġreturn Ġpsi File Cache ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġfile Ġset Ġof Ġbase Ġfile Ġ` file `. ĊĠĠĠĠ Ġ* ĠWhen Ġthe Ġcache Ġis Ġoutdated , Ġthis Ġwill Ġfirst Ġupdate Ġthe Ġcache . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfile Set For ( file : ĠPsi File ): ĠSet < Psi File > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcache Ġ= Ġfile Set Cache [ file ] Ġ?: Ġbuild Cache For ( file ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcache . value Ġ?: Ġempty Set () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear s Ġthe Ġcache Ġfor Ġbase Ġfile Ġ` file `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdrop Caches ( file : ĠPsi File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmodification Tracker For ( file ). my Modification Count ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAlso Ġstores Ġthe Ġdependencies Ġif Ġthey Ġdidn 't Ġexist Ġyet . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġdependencies ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdependencies For ( psi File : ĠPsi File ): ĠArray < Any > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdependencies . get Or Put ( psi File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Psi Modification Tracker . MO DIF ICATION _ COUNT , Ġmodification Tracker For ( psi File )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAlso Ġstores Ġthe Ġcreated Ġmodification Ġtracker Ġif Ġit Ġdidn 't Ġexist Ġyet . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġmodification Tracker ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġmodification Tracker For ( psi File : ĠPsi File ): ĠMy Modification Tracker Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmodification Tracker . get Or Put ( psi File ) Ġ{ ĠMy Modification Tracker () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMod ification Ġtracked Ġused Ġto Ġinvalidate Ġthe Ġcaches . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ author ĠH ann ah ĠS che lle ken s ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġclass ĠMy Modification Tracker Ġ: ĠMod ification Tracker Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġmy Modification Count : ĠLong Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Modification Count (): ĠLong Ġ= Ġmy Modification Count ĊĠĠĠ Ġ} Ċ }