// ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġcom . intellij . code Insight . completion . ml Ċ Ċ import Ġcom . intellij . code Insight . actions . V cs Facade Ċ import Ġcom . intellij . code Insight . completion . Completion Location Ċ import Ġcom . intellij . code Insight . lookup . Lookup Element Ċ import Ġcom . intellij . openapi . application . run Read Action Ċ import Ġcom . intellij . openapi . vcs . changes . Change Ċ import Ġcom . intellij . openapi . vcs . changes . Change List Manager Ċ import Ġcom . intellij . psi . Psi Name Identifier Owner Ċ import Ġcom . intellij . util . concurrency . App Executor Util Ċ import Ġcom . intellij . vcs Util . V cs Util Ċ import Ġjava . util . concurrent . Callable Ċ import Ġjava . util . concurrent . Future Task Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . concurrent . TimeoutException Ċ Ċ class ĠV cs Feature Provider Ġ: ĠElement Feature Provider Ġ{ ĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠGIT _ V CS _ NAME Ġ= Ġ" Git " ĊĠ Ġ} ĊĠ Ġprivate Ġval Ġexecutor Ġ= ĠApp Executor Util . create Bounded Application Pool Executor (" ML Ġcompletion . ĠV CS Ġfeature Ġcalculation ", Ġ 1 ) ĊĊĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ= Ġ" vcs " ĊĊĠ Ġoverride Ġfun Ġcalculate Features ( element : ĠLookup Element , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation : ĠCompletion Location , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Features : ĠContext Features ): ĠMap < String , ĠML Feature Value > Ġ{ ĊĠĠĠ Ġval Ġfeatures Ġ= Ġmutable Map Of < String , ĠML Feature Value >() ĊĠĠĠ Ġval Ġpsi Ġ= Ġelement . psi Element ĊĠĠĠ Ġval Ġpsi File Ġ= Ġpsi ?. containing File ĊĊĠĠĠ Ġpsi File ?. view Provider ?. virtual File ?. let Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠ Ġval Ġchange List Manager Ġ= ĠChange List Manager . getInstance ( location . project ) ĊĠĠĠĠĠ Ġchange List Manager . get Change ( file )?. let Ġ{ Ġchange Ġ-> ĊĠĠĠĠĠĠĠ Ġfeatures [" file _ state "] Ġ= ĠML Feature Value . categorical ( change . type ) Ġ// ĠNON - NLS ĊĊĠĠĠĠĠĠĠ Ġval Ġv cs Ġ= ĠV cs Util . get V cs For ( location . project , Ġfile ) ĊĠĠĠĠĠĠĠ Ġif Ġ( vcs ?. name Ġ== ĠGIT _ V CS _ NAME Ġ&& Ġchange . type Ġ== ĠChange . Type . MO DIF ICATION Ġ&& Ġpsi Ġis ĠPsi Name Identifier Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcalculate WithTimeout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Read Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchanged Ranges Ġ= ĠV cs Facade . getInstance (). get Changed Text Ranges ( location . project , Ġpsi File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( changed Ranges . any Ġ{ Ġpsi . text Range ?. intersect s ( it ) Ġ== Ġtrue Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠML Feature Value . binary ( true ) Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeatures [" declaration _ is _ changed "] Ġ= Ġit Ġ// ĠNON - NLS ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfeatures ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcalculate WithTimeout ( timeout : ĠLong Ġ= Ġ 1 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Unit : ĠTimeUnit Ġ= ĠTimeUnit . MILLISECONDS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallable : ĠCallable < ML Feature Value ?> ): ĠML Feature Value ? Ġ{ ĊĠĠĠ Ġval Ġfuture Ġ= ĠFuture Task ( callable ) ĊĠĠĠ Ġexecutor . execute ( future ) ĊĠĠĠ Ġvar Ġresult : ĠML Feature Value ? Ġ= Ġnull ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġresult Ġ= Ġfuture . get ( timeout , Ġtime Unit ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcatch Ġ( ignored : ĠTimeout Exception ) Ġ{ Ġ} ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} Ċ }