package Ġframe Ċ Ċ import Ġcom . intellij . openapi . command . Write Command Action Ċ import Ġcom . intellij . openapi . file Editor . File Editor Manager Ċ import Ġcom . intellij . openapi . file Editor . Open FileDescriptor Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . vfs . Local FileSystem Ċ import Ġcom . w ix . cod io . Utils Ċ import Ġcom . w ix . cod io . cod io Events .* Ċ import Ġcom . w ix . cod io . frame . Inter acter Content Handler Ċ Ċ class ĠCod io Frame Ġ{ ĊĠĠĠ Ġval ĠDEFAULT _ COLUMN Ġ= Ġ 1 ĊĠĠĠ Ġvar Ġcod io Frame Documents Ġ= Ġarray ListOf < Cod io Frame Document >() ĊĠĠĠ Ġvar Ġinter acter Content Ġ= Ġarray ListOf < Inter acter Content Data >() ĊĠĠĠ Ġvar Ġis Initial Ġ= Ġfalse ĊĊĠĠĠ Ġconstructor ( timeline : ĠArrayList < Cod io Event >, Ġdocuments : ĠArrayList < Cod io Frame Document >, Ġis Initial : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . is Initial Ġ= Ġis Initial ĊĠĠĠĠĠĠĠ Ġvar Ġlast Action Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġdocuments . map To ( cod io Frame Documents ) Ġ{ Ġit . copy () Ġ} ĊĠĠĠĠĠĠĠ Ġinter acter Content Ġ= ĠInter acter Content Handler . get Frame Inter acter Content ( documents ) ĊĠĠĠĠĠĠĠ Ġtimeline . forEach Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Action Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Ġis ĠCod io TextChanged Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Document Ġ= Ġget Cod io Frame Document With ( event . path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( frame Document Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" prob ably Ġa Ġrefactor , Ġstill Ġnot Ġsupported ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Offset Ġ= ĠUtils . find Offset From Position ( event . range [ Cod io Range StartIndex ], Ġframe Document . text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Offset Ġ= ĠUtils . find Offset From Position ( event . range [ Cod io Range End Index ], Ġframe Document . text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Document . text Ġ= Ġframe Document . text . replace Range ( start Offset , Ġend Offset , Ġevent . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Document . last Action Count Ġ= Ġlast Action Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( event Ġis ĠCod io Editor Changed Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Document Ġ= Ġ Ġcod io Frame Documents . find Ġ{ Ġdocument Ġ-> Ġdocument . path Ġ== Ġevent . path Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Document ?. last Action Count Ġ= Ġlast Action Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠInter acter Content Handler . add Inter ac ater Content To Frame ( cod io Frame Documents , Ġinter acter Content ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Initial ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcod io Frame Documents . sortBy Ġ{ Ġcod io Frame Document Ġ-> Ġ Ġcod io Frame Document . last Action Count } ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapply ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocuments Count Ġ= Ġcod io Frame Documents . count () ĊĠĠĠĠĠĠĠ Ġcod io Frame Documents . forEach Indexed Ġ{ Ġindex , Ġcod io Frame Document Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" **** Ġframe Ġpath : Ġ${ cod io Frame Document . path }, Ġtext : Ġ${ cod io Frame Document . text }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠLocal FileSystem . getInstance (). find File By Path ( cod io Frame Document . path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileDescriptor Ġ= ĠOpen FileDescriptor ( project , Ġfile !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshould Focus Ġ= Ġ Ġindex Ġ+ Ġ 1 Ġ=== Ġdocuments Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Initial ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Focus ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileDescriptor Ġ= ĠOpen FileDescriptor ( project , Ġfile !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcod io Action Ġ= ĠRunnable Ġ{ ĠFile Editor Manager . getInstance ( project !! ). open Editor ( file Descriptor , Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWrite Command Action . run Write Command Action ( project , Ġcod io Action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcod io Action Ġ= ĠRunnable Ġ{ ĠFile Editor Manager . getInstance ( project !! ). open Editor ( file Descriptor , Ġshould Focus ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWrite Command Action . run Write Command Action ( project , Ġcod io Action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . override Editor Text ( project , Ġfile , Ġcod io Frame Document . text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Cod io Frame Document With ( path : ĠString ) Ġ: ĠCod io Frame Document ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġframe Document Ġ= Ġcod io Frame Documents . find Ġ{ Ġcod io Frame Document : ĠCod io Frame Document Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" frame Ġpath Ġis : Ġ${ cod io Frame Document . path Ġ} Ġactual Ġpath Ġis : Ġ$ path ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcod io Frame Document . path Ġ== Ġpath Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġframe Document ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠInter acter Content Data ( val Ġtext : ĠString , Ġval Ġpath : ĠString ) Ċ data Ġclass ĠCod io Frame Document ( var Ġtext : ĠString , Ġval Ġpath : ĠString , Ġvar Ġcolumn : ĠInt , Ġvar Ġlast Action Count : ĠInt )