package Ġorg . jetbrains . cab al . psi Ċ Ċ import Ġcom . intellij . lang . AST Node Ċ import Ġcom . intellij . ext api . psi . AST Wrapper Psi Element Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . openapi . vfs . Virtual FileSystem Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġorg . jetbrains . cab al . psi . Check able Ċ import Ġorg . jetbrains . cab al . psi . Path Ċ import Ġorg . jetbrains . cab al . psi . Build Section Ċ import Ġorg . jetbrains . cab al . Cab al File Ċ import Ġjava . io . Filename Filter Ċ import Ġjava . io . File Ċ import Ġjava . util . ArrayList Ċ Ċ interface ĠPaths Field : ĠPsi Element Ġ{ ĊĊĠĠĠ Ġfun ĠisValid Completion File ( file : ĠVirtual File ): ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġfun Ġvalid Virtual File ( file : ĠVirtual File ): ĠBoolean ĊĊĠĠĠ Ġfun Ġvalid Rel ativity ( path : ĠFile ): ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġfun Ġget Cab al File (): ĠCab al File Ġ= Ġ( containing File Ġas ĠCab al File ) ĊĊĠĠĠ Ġfun ĠgetParent Build Section (): ĠBuild Section ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Ġ= Ġparent ĊĠĠĠĠĠĠĠ Ġwhile Ġ( parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġis ĠBuild Section ) Ġreturn Ġparent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġparent . parent ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Source Dirs ( original Root Dir : ĠVirtual File ): ĠList < Virtual File > Ġ= ĠlistOf ( original Root Dir ) ĊĊĊĠĠĠ Ġfun ĠgetParent Dirs ( prefix Path : ĠPath , Ġoriginal Root Dir : ĠVirtual File ): ĠList < Virtual File > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetParent Path From ( source Dir : ĠVirtual File ) Ġ= ĠFile ( prefix Path . getPath With Parent ( source Dir )). parent ĊĊĠĠĠĠĠĠĠ Ġfun Ġfind File By Path ( path : ĠString ) Ġ= Ġoriginal Root Dir . file System . find File By Path ( path . replace ( File . separator Char , Ġ'/ ')) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! valid Rel ativity ( prefix Path . getFile ())) Ġreturn ĠlistOf () ĊĠĠĠĠĠĠĠ Ġval Ġparent Paths Ġ= Ġ( getSource Dirs ( original Root Dir ). map Ġ{ ĠgetParent Path From ( it ) Ġ}). filter NotNull () ĊĠĠĠĠĠĠĠ Ġreturn Ġ( parent Paths . map Ġ{ Ġfind File By Path ( it ) Ġ}). filter NotNull (). filter Ġ{ Ġit . isDirectory Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetNext Available File ( prefix Path : ĠPath , Ġoriginal Root Dir : ĠVirtual File ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparent Dirs Ġ= ĠgetParent Dirs ( prefix Path , Ġoriginal Root Dir ) ĊĠĠĠĠĠĠĠ Ġval Ġcompletion Files Ġ= ĠArrayList < Virtual File >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( dir Ġin Ġparent Dirs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion Files . addAll ( dir . children !!. filter Ġ{ ĠisValid Completion File ( it ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcompletion Files . map Ġ{ Ġit . name Ġ+ Ġ( if Ġ( it . isDirectory ) Ġ"/" Ġelse Ġ"") Ġ} ĊĠĠĠ Ġ} Ċ }