package Ġcom . github . igu is so uma . nx console . actions Ċ Ċ import Ġcom . github . igu is so uma . nx console . Nx Icons Ċ import Ġcom . github . igu is so uma . nx console . build Tools . Nx Json Util Ċ import Ġcom . github . igu is so uma . nx console . build Tools . Nx Service Ċ import Ġcom . github . igu is so uma . nx console . build Tools . Nx Task TreeView Ċ import Ġcom . github . igu is so uma . nx console . graph . grab CommandOutput Ċ import Ġcom . google . common . reflect . Type Token Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . intellij . Common Bundle Ċ import Ġcom . intellij . execution . configurations . General CommandLine Ċ import Ġcom . intellij . icons . All Icons Ċ import Ġcom . intellij . javascript . nodejs . Completion Module Info Ċ import Ġcom . intellij . javascript . nodejs . Node Module Search Util Ċ import Ġcom . intellij . javascript . nodejs . interpreter . Node CommandLine Configurator Ċ import Ġcom . intellij . javascript . nodejs . interpreter . Node Js Interpreter Manager Ċ import Ġcom . intellij . openapi . action System . An Action Ċ import Ġcom . intellij . openapi . action System . An ActionEvent Ċ import Ġcom . intellij . openapi . action System . Common Data Keys Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . ui . popup . IconButton Ċ import Ġcom . intellij . openapi . ui . popup . JB Popup Ċ import Ġcom . intellij . openapi . ui . popup . JB Popup Factory Ċ import Ġcom . intellij . openapi . util . Condition Ċ import Ġcom . intellij . openapi . vcs . V cs Data Keys Ċ import Ġcom . intellij . openapi . vcs . changes . Change Ċ import Ġcom . intellij . openapi . vfs . Local FileSystem Ċ import Ġcom . intellij . openapi . vfs . V fs Util Ċ import Ġcom . intellij . openapi . vfs . V fs Util Core Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . ui . ScrollPane Factory Ċ import Ġcom . intellij . util . containers . Container Util Ċ import Ġcom . intellij . util . ui . JB Dimension Ċ import Ġcom . intellij . util . ui . tree . Tree Util Ċ import Ġcom . intellij . vcs Util . V cs File Util Ċ import Ġjava . awt . Component Ċ import Ġjava . io . File Ċ import Ġjavax . swing . Border Factory Ċ import Ġjavax . swing . tree . Tree Model Ċ Ċ class ĠN x Show Affected Action Ġ: ĠAn Action ( Nx Icons . NR WL _ ICON ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠactionPerformed ( event : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Nx Show Affected Action ...") ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġevent . project Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( event . getData < Array < Change >>( V cs Data Keys . CHANG ES ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dis covered Affected By Changes ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġvirtual Files : ĠList < Virtual File > Ġ= Ġfind Files In Context ( event ) ĊĠĠĠĠĠĠĠ Ġif Ġ( virtual Files . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dis covered Affected By Files ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( event : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent . presentation . isEnabled And Visible Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Files In Context ( event ). isNotEmpty () Ġ|| Ġevent . getData ( V cs Data Keys . CHANG ES ) Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Files In Context ( event : ĠAn ActionEvent ): ĠList < Virtual File > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġvirtual Files Ġ= Ġevent . getData ( Common Data Keys . VIRTUAL _ FILE _ ARRAY ) ĊĠĠĠĠĠĠĠ Ġif Ġ( virtual Files Ġ== Ġnull Ġ|| Ġvirtual Files . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġevent . getData ( Common Data Keys . P SI _ FILE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Files Ġ= ĠarrayOf ( file . virtual File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( virtual Files Ġ== Ġnull ) Ġempty List () Ġelse ĠContainer Util . filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Files , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCondition Ġ{ Ġv : ĠVirtual File Ġ-> Ġv . isIn Local FileSystem Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Title ( files : ĠList < Virtual File ?> ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( files . isEmpty ()) Ġreturn Ġ" Empty ĠSelection " ĊĠĠĠĠĠĠĠ Ġval ĠfirstName Ġ= Ġfiles [ 0 ] !!. name ĊĠĠĠĠĠĠĠ Ġif Ġ( files . size Ġ== Ġ 1 ) Ġreturn ĠfirstName ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( files . size Ġ== Ġ 2 ) ĠfirstName Ġ+ Ġ" Ġand Ġ" Ġ+ Ġfiles [ 1 ] !!. name Ġelse Ġ"$ firstName Ġet Ġal ." ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Dis covered Affected By Changes ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchanges Ġ= Ġe . get Required Data ( V cs Data Keys . CHANG ES ). toList () ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġe . project !! ĊĠĠĠĠĠĠĠ Ġval Ġrelative Affected Paths Ġ= Ġget Relative Affected Paths ( project , Ġchanges ) ĊĠĠĠĠĠĠĠ Ġshow Dis covered Affected ( e , Ġproject , Ġrelative Affected Paths ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Dis covered Affected By Files ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġe . project !! ĊĠĠĠĠĠĠĠ Ġval Ġproject BasePath : ĠVirtual File Ġ= Ġget BasePath As Virtual File ( project ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= Ġfind Files In Context ( e ) ĊĠĠĠĠĠĠĠ Ġval Ġpaths Ġ= Ġfiles ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġf : ĠVirtual File ? Ġ-> ĠV fs Util . collect Children Re cursively ( f !! ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġf : ĠVirtual File ? Ġ-> ĠV cs File Util . get Relative FilePath ( f , Ġproject BasePath ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ. map Ġ{ Ġp : ĠString Ġ-> Ġ"/ $ p " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠ Ġshow Dis covered Affected ( e , Ġproject , Ġpaths ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Dis covered Affected ( e : ĠAn ActionEvent , Ġproject : ĠProject , Ġrelative A ffect e Paths : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġval Ġmy Model Ġ= ĠCollection ListModel < String >() ĊĠĠĠĠĠĠĠ Ġ// Ġval Ġlist Ġ= ĠJ B List < String >( my Model ) ĊĠĠĠĠĠĠĠ Ġval Ġnx Task TreeView Ġ= ĠN x Task TreeView ( Nx Service . getInstance ( project ), Ġproject , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ// Ġnx Task TreeView . init () ĊĠĠĠĠĠĠĠ Ġval Ġtree Ġ= Ġnx Task TreeView . component ĊĊĠĠĠĠĠĠĠ Ġval Ġscroll Pane Ġ= ĠScroll Pane Factory . create ScrollPane ( tree ) ĊĠĠĠĠĠĠĠ Ġscroll Pane . border Ġ= ĠBorder Factory . create Empty Border ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠJ B Popup Factory . getInstance (). create Component Popup Builder ( scroll Pane , Ġtree ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Nx ĠShow ĠAff ected ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Mov able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setResizable ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ. set Command Button ( Composite Active Component ( pin Button )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ. set Setting Button ( Composite Active Component ( run Button ). component ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ. setItem Cho osen Callback ( Runnable Ġ{ Ġ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* . register Keyboard Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Usage KeyStroke , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActionListener Ġ{ Ġ__ : ĠAction Event ? Ġ-> Ġpin ActionListener . run () Ġ}) */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Min Size ( JB Dimension ( 5 0 0 , Ġ 3 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ. set Dimension Service Key ( Nx Show Affected Action :: class . java . getSimpleName ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set May Be Parent ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setRequest Focus ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Focus able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Focus Owners ( array Of < Component >( tree )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Loc ate Within Screen Bounds ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel On Other Window Open ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Mov able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setResizable ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ. set Setting Buttons ( toolbar Component ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel On Window De activation ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel OnClick Outside ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ. set Dimension Service Key ( project , ĠN x Show Affected Action :: class . java . simple Name , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ. set Min Size ( Dimension ( J BU I . scale ( 3 5 0 ), ĠJ BU I . scale ( 3 0 0 ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Bundle . message (" action . text . close "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAll Icons . Actions . Close , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAll Icons . Actions . Close Hover ed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpopup : ĠJ B Popup Ġ= Ġbuilder . create Popup () ĊĊĠĠĠĠĠĠĠ Ġval Ġnx Json File Ġ= ĠN x Json Util . find Child Nx Json File ( project . base Dir ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). invoke Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Js Interpreter Ġ= ĠNode Js Interpreter Manager . getInstance ( project ). interpreter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node Js Interpreter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfigur ator : ĠNode CommandLine Configurator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigur ator Ġ= ĠNode CommandLine Configurator . find ( node Js Interpreter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodules : ĠMutable List < Completion Module Info > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNode Module Search Util . find Module sWith Name ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodules , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ n rw l / cli ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnx Json File , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodule Ġ= Ġmodules . first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( module Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodule Exe Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ module . virtual File !!. path }${ File . separator } bin ${ File . separator } nx " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġcheck Ġif Ġjson Ġcan Ġbe Ġout Ġof Ġmon ore po ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġval Ġcreate TempFile Ġ= Ġcreate TempFile (" tmp ", Ġ". json ", ĠFile ( nx Json File . parent !!. virtual File . path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand Line Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGeneral CommandLine ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Exe , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" print - affected ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- files =${ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelative A ffect e Paths . join ToString (",") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigur ator . configure ( command Line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrab CommandOutput Ġ= Ġgrab CommandOutput ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Line , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnx Json File . parent . path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodel : ĠTree Model Ġ= Ġtree . getModel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDis poser . register ( popup , Ġtree ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Type Ġ= Ġobject Ġ: ĠType Token < Map < String , ĠAny >>() Ġ{} . type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaffected : ĠMap < String , ĠAny > Ġ= ĠGson (). fromJson ( grab CommandOutput , Ġmap Type ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnx Task TreeView . is Affected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnx Task TreeView . filter By Affected Ġ= Ġaffected [" projects "] Ġas ? ĠList < String > Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnx Task TreeView . init () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup . show In Best Position For ( e . data Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTree Util . expand All ( tree ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Relative Affected Paths ( project : ĠProject , Ġchanges : ĠCollection < Change >): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbase Dir Ġ= Ġget BasePath As Virtual File ( project ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( base Dir Ġ== Ġnull ) Ġempty List < String >() Ġelse Ġchanges ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġchange : ĠChange Ġ-> Ġrelative Path ( base Dir , Ġchange ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ. map Ġ{ Ġs : ĠString Ġ-> Ġ"/ $ s " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget BasePath As Virtual File ( project : ĠProject ): ĠVirtual File ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠbasePath Ġ= Ġproject . basePath ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( basePath Ġ== Ġnull ) Ġnull Ġelse ĠLocal FileSystem . getInstance (). find File By Path ( basePath ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrelative Path ( base Dir : ĠVirtual File , Ġchange : ĠChange ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġchange . virtual File ĊĠĠĠĠĠĠĠ Ġif Ġ( file Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbefore Ġ= Ġchange . before Revision ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( before Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠV cs File Util . relative Path ( base Dir , Ġbefore . file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( file Ġ== Ġnull ) Ġnull Ġelse ĠV fs Util Core . get RelativePath ( file , Ġbase Dir ) ĊĠĠĠ Ġ} Ċ } Ċ