// ĠCopyright Ġ 2 0 0 0 - 2 0 1 9 Ġ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 Ċ Ċ import Ġcom . intellij . inject ed . editor . Virtual File Window Ċ import Ġcom . intellij . lang . injection . Inject ed Language Manager Ċ import Ġcom . intellij . openapi . editor . impl . Document Impl Ċ import Ġcom . intellij . pom . P om Manager Ċ import Ġcom . intellij . pom . core . impl . P om Model Impl Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . impl . source . tree . File Element Ċ import Ġjava . util . function . Supplier Ċ Ċ /** Ċ Ġ* Ġ@ author Ġp eter Ċ Ġ*/ Ċ class ĠOff sets In File ( val Ġfile : ĠPsi File , Ġval Ġoffsets : ĠOffset Map ) Ġ{ ĊĠ Ġconstructor ( file : ĠPsi File ) Ġ: Ġthis ( file , ĠOffset Map ( file . view Provider . document !! )) ĊĊĠ Ġfun Ġto TopLevel File (): ĠOff sets In File Ġ{ ĊĠĠĠ Ġval Ġmanager Ġ= ĠInject ed Language Manager . getInstance ( file . project ) ĊĠĠĠ Ġval Ġhost File Ġ= Ġmanager . get TopLevel File ( file ) ĊĠĠĠ Ġif Ġ( host File Ġ== Ġfile ) Ġreturn Ġthis ĊĠĠĠ Ġreturn ĠOff sets In File ( host File , Ġoffsets . map Offsets ( host File . view Provider . document !! ) Ġ{ Ġmanager . inject ed To Host ( file , Ġit ) Ġ}) ĊĠ Ġ} ĊĊĠ Ġfun Ġto Inject ed If Any ( offset : ĠInt ): ĠOff sets In File Ġ{ ĊĠĠĠ Ġval Ġmanager Ġ= ĠInject ed Language Manager . getInstance ( file . project ) ĊĠĠĠ Ġval Ġinjected Ġ= Ġmanager . find Inject ed ElementAt ( file , Ġoffset )?. containing File Ġ?: Ġreturn Ġthis ĊĠĠĠ Ġval Ġvirtual File Ġ= Ġinjected . virtual File ĊĠĠĠ Ġif Ġ( virtual File Ġis ĠVirtual File Window ) Ġ{ ĊĠĠĠĠĠ Ġval Ġdocument Window Ġ= Ġvirtual File . document Window ĊĠĠĠĠĠ Ġreturn ĠOff sets In File ( inject ed , Ġoffsets . map Offsets ( ĊĠĠĠĠĠĠĠ Ġdocument Window ) Ġ{ Ġdocument Window . host To Inject ed ( it ) Ġ}) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġcopy With Replacement ( start Offset : ĠInt , Ġend Offset : ĠInt , Ġreplacement : ĠString ): ĠOff sets In File Ġ{ ĊĠĠĠ Ġreturn Ġreplace In Copy ( file . copy () Ġas ĠPsi File , Ġstart Offset , Ġend Offset , Ġreplacement ). get () ĊĠ Ġ} ĊĊĠ Ġfun Ġreplace In Copy ( file Copy : ĠPsi File , Ġstart Offset : ĠInt , Ġend Offset : ĠInt , Ġreplacement : ĠString ): ĠSupplier < Offsets In File > Ġ{ ĊĠĠĠ Ġval Ġoriginal Text Ġ= Ġoffsets . document . immutable CharSequence ĊĠĠĠ Ġval Ġtemp Document Ġ= ĠDocument Impl ( original Text , Ġoriginal Text . contains ('\ r ') Ġ|| Ġreplacement . contains ('\ r '), Ġtrue ) ĊĠĠĠ Ġval Ġtemp Map Ġ= Ġoffsets . copy Offsets ( temp Document ) ĊĠĠĠ Ġtemp Document . replace String ( start Offset , Ġend Offset , Ġreplacement ) ĊĊĠĠĠ Ġval Ġcopy Document Ġ= Ġfile Copy . view Provider . document !! ĊĠĠĠ Ġval Ġapply Psi Change Ġ= Ġ( P om Manager . getModel ( file . project ) Ġas ĠP om Model Impl ). re parse File ( file Copy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Copy . node Ġas ĠFile Element , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Document . immutable CharSequence ) ĊĠĠĠ Ġreturn ĠSupplier Ġ{ ĊĠĠĠĠĠ Ġapply Psi Change ?. run () ĊĠĠĠĠĠ ĠOff sets In File ( file Copy , Ġtemp Map . copy Offsets ( copy Document )) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ Ċ } Ċ