// ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 Ġ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 . completion . n gram Ċ Ċ import Ġcom . intellij . completion . n gram . NG ram . forget Tokens Ċ import Ġcom . intellij . completion . n gram . NG ram . learn Tokens Ċ import Ġcom . intellij . completion . n gram . NG ram . lex Psi File Ċ import Ġcom . intellij . completion . n gram . s lp . modeling . Model Ċ import Ġcom . intellij . completion . n gram . s lp . modeling . n gram . JM Model Ċ import Ġcom . intellij . completion . n gram . s lp . modeling . runners . Model Runner Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . Smart Psi Element Pointer Ċ Ċ internal Ġclass ĠModel Runner With Cache ( model : ĠModel Ġ= ĠJ M Model ()) Ġ: ĠModel Runner ( model ) Ġ{ ĊĊĠ Ġprivate Ġval Ġmy Cache Ġ= ĠFilePath 2 Tokens ( this ) ĊĊĠ Ġinternal Ġfun Ġprocess File ( file Pointer : ĠSmart Psi Element Pointer < Psi File >) Ġ{ ĊĠĠĠ Ġval ĠfilePath Ġ= Ġfile Pointer . virtual File ?. path Ġ?: Ġreturn ĊĠĠĠ Ġif Ġ( filePath Ġin Ġmy Cache ) Ġreturn ĊĠĠĠ Ġval Ġtokens Ġ= Ġlex Psi File ( file Pointer . element Ġ?: Ġreturn , ĠTEXT _ RANGE _ LIMIT ) ĊĠĠĠ Ġmy Cache [ filePath ] Ġ= Ġtokens ĊĠĠĠ Ġlearn Tokens ( tokens ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġclass ĠFilePath 2 Tokens ( private Ġval Ġmy Model Runner : ĠModel Runner ) Ġ: ĠLinkedHashMap < String , ĠList < String >>() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġremove El dest Entry ( el dest : ĠMap . Entry < String ?, ĠList < String > ?> ): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġif Ġ( size Ġ> ĠCACHE _ SIZE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġel dest . value ?. let Ġ{ Ġmy Model Runner . forget Tokens ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠCACHE _ SIZE Ġ= Ġ 5 ĊĠĠĠ Ġprivate Ġconst Ġval ĠTEXT _ RANGE _ LIMIT Ġ= Ġ 1 6 Ġ* Ġ 1 0 2 4 Ġ// Ġ 3 2 ĠKB Ġof Ġchars ĊĠ Ġ} Ċ }