package Ġcom . vk . adm storm . utils Ċ Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . application . Write Action Ċ import Ġcom . intellij . openapi . application . invoke Later Ċ import Ġcom . intellij . openapi . editor . Logical Position Ċ import Ġcom . intellij . openapi . editor . Scroll Type Ċ import Ġcom . intellij . openapi . file Editor . File Editor Manager Ċ import Ġcom . intellij . openapi . file Editor . Open FileDescriptor Ċ import Ġcom . intellij . openapi . file Editor . ex . File Editor Manager Ex Ċ import Ġcom . intellij . openapi . file Editor . impl . Editor Window Ċ import Ġcom . intellij . openapi . file Editor . impl . Load Text Util Ċ import Ġcom . intellij . openapi . file Editor . impl . Non Project File Writing Access Provider Ċ import Ġcom . intellij . openapi . file Editor . impl . text . Psi Aware Text Editor Impl Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . util . io . File Util Ċ import Ġcom . intellij . openapi . vfs . Local FileSystem Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . vk . adm storm . notifications . Ad m Error Notification Ċ import Ġjava . io . File Ċ import Ġjava . util . function . Bi Consumer Ċ import Ġjavax . swing . Swing Constants Ċ Ċ object ĠMy Editor Utils Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSpl its Ġthe Ġwindow Ġvert ically Ġinto Ġtwo Ġand Ġopens Ġthe Ġpassed Ġfile Ġin Ġthe Ġright . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġvirtual File Ġfile Ġto Ġbe Ġopened Ġin Ġthe Ġright Ġeditor ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Editor Window ] Ġthat Ġrepresents Ġthe Ġright Ġeditor Ġor Ġnull Ġif Ġan Ġerror Ġoccurs ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsplit Current Vert ically ( project : ĠProject , Ġvirtual File : ĠVirtual File ): ĠEditor Window ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Editor Manager Ġ= ĠFile Editor Manager Ex . getInstance Ex ( project ) ĊĠĠĠĠĠĠĠ Ġval Ġcur Window Ġ= Ġfile Editor Manager . current Window ĊĠĠĠĠĠĠĠ Ġreturn Ġcur Window . split ( Swing Constants . VERTICAL , Ġfalse , Ġvirtual File , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApplies Ġthe Ġpassed Ġfunction Ġfor Ġeach Ġeditor Ġwithin Ġthe Ġpassed ĊĠĠĠĠ Ġ* Ġwindow Ġthat Ġis Ġan Ġeditor Ġof Ġthe Ġspecified Ġtemplate Ġtype Ġ[ T ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġexample : ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠĠĠ ĠMy Editor Util . apply Each Editor < Psi Aware Text Editor Impl >( editor Window ) Ġ{} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠApplies Ġa Ġfunction Ġto Ġeach Ġtext Ġeditor Ġin Ġthe Ġpassed Ġwindow . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< re ified ĠT > Ġapply Each Editor ( editor Window : ĠEditor Window , Ġcb : Ġ( T ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġeditor Window . all Comp os ites . forEach Ġ{ Ġeditor Composite Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor Composite . all Editors . forEach Ġ{ Ġeditor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( editor Ġis ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcb ( editor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApplies Ġthe Ġpassed Ġfunction Ġfor Ġlast Ġopen Ġeditor Ġwithin Ġthe Ġpassed ĊĠĠĠĠ Ġ* Ġwindow Ġthat Ġis Ġan Ġeditor Ġof Ġthe Ġspecified Ġtemplate Ġtype Ġ[ T ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġexample : ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠĠĠ ĠMy Editor Util . apply Last Editor < Psi Aware Text Editor Impl >( editor Window ) Ġ{} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠApplies Ġa Ġfunction Ġto Ġlast Ġopen Ġtext Ġeditor Ġin Ġthe Ġpassed Ġwindow . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > Ġapply Last Editor ( editor Window : ĠEditor Window , Ġcb : Ġ( T ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeditors Ġ= Ġeditor Window . all Comp os ites ĊĠĠĠĠĠĠĠ Ġval Ġlast Editor Ġ= Ġif Ġ( editor s . isNotEmpty ()) Ġeditors . last () Ġelse Ġreturn ĊĊĠĠĠĠĠĠĠ Ġlast Editor . all Editors . forEach Ġ{ Ġeditor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( editor Ġis ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcb ( editor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠScroll s Ġthe Ġpassed Ġeditor Ġto Ġthe Ġline Ġthat Ġfirst Ġmatches Ġthe Ġpassed Ġcallback . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġscroll To Line ( file Editor : ĠPsi Aware Text Editor Impl , Ġis Need Line : Ġ( String ) Ġ-> ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscroll To Line With Shift ( file Editor , Ġ 0 , Ġis Need Line ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠScroll s Ġthe Ġpassed Ġeditor Ġto Ġthe Ġline Ġthat Ġfirst Ġmatches Ġthe Ġpassed Ġcallback Ġ+ Ġshift . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġscroll To Line With Shift ( file Editor : ĠPsi Aware Text Editor Impl , Ġshift : ĠInt , Ġis Need Line : Ġ( String ) Ġ-> ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġfile Editor . editor ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= ĠLoad Text Util . load Text ( file Editor . file ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġneed Line Index Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġtext . split ("\ n "). forEach Indexed Ġ{ Ġindex , Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( need Line Index Ġ== Ġ 0 Ġ&& Ġis Need Line ( line )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġneed Line Index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach Indexed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġeditor . caret Model . moveTo Logical Position ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogical Position ( need Line Index Ġ+ Ġshift , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġscrolling Model Ġ= Ġeditor . scroll ing Model ĊĠĠĠĠĠĠĠ Ġscrolling Model . disable Animation () ĊĠĠĠĠĠĠĠ Ġscrolling Model . scrollTo Caret ( Scroll Type . CENTER _ UP ) ĊĠĠĠĠĠĠĠ Ġscrolling Model . enable Animation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOpen s Ġthe Ġpassed Ġfile Ġin Ġa Ġseparate Ġwindow Ġto Ġthe Ġright Ġof Ġthe Ġcurrent Ġone . ĊĠĠĠĠ Ġ* ĠAnd Ġthen Ġcalls Ġthe Ġpassed Ġ[ on Ready ] Ġcallback Ġfunction . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfile ĠFile Ġto Ġopen ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġopen File In Right Tab ( project : ĠProject , Ġfile : ĠFile , Ġon Ready : ĠBi Consumer < Editor Window , ĠVirtual File > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvirtual File Ġ= ĠLocal FileSystem . getInstance (). refresh And Find File By Io File ( file ) ĊĠĠĠĠĠĠĠ Ġif Ġ( virtual File Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAd m Error Notification ("${ file . absolute Path } Ġdoes Ġnot Ġexists ! "). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠNon Project File Writing Access Provider . allow Writing ( listOf ( virtual File )) ĊĠĠĠĠĠĠĠ Ġinvoke Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Window Ġ= Ġsplit Current Vert ically ( project , Ġvirtual File ) Ġ?: Ġreturn @ invoke Later ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply Each Editor < Psi Aware Text Editor Impl >( right Window ) Ġ{ Ġfile Editor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Editor . editor . settings . is Use Soft Wrap s Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll To Line ( file Editor ) Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline . contains (" Ġf $ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ready ?. accept ( right Window , Ġvirtual File ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOpen s Ġthe Ġpassed Ġfile Ġwith Ġ[ filepath ] Ġin Ġa Ġseparate Ġwindow Ġon Ġthe Ġgiven Ġ[ line ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġopen File On Line ( project : ĠProject , Ġfilepath : ĠString , Ġline : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠWrite Action ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compute < Virtual File ?, ĠRuntimeException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocal FileSystem . getInstance (). refresh And Find File By Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Util . to System In dependent Name ( filepath ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( file Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAd m Error Notification ("$ filepath Ġdoes Ġnot Ġexists ! "). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfile . refresh ( false , Ġfalse ) ĊĊĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). run Read Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= ĠFile Editor Manager . getInstance ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. open Text Editor ( Open FileDescriptor ( project , Ġfile ), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor !!. caret Model . moveTo Logical Position ( Logical Position ( line Ġ- Ġ 1 , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . scroll ing Model . disable Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . scroll ing Model . scrollTo Caret ( Scroll Type . CENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . scroll ing Model . enable Animation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ