package Ġorg . jetbrains . research . l up a . kotlin Analysis . util Ċ Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . util . io . create Directories Ċ import Ġcom . intellij . util . io . isDirectory Ċ import Ġcom . intellij . util . io . isFile Ċ import Ġjava . io . File Ċ import Ġjava . io . PrintWriter Ċ import Ġjava . nio . file . File Visit Option Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ import Ġkotlin . io . path . extension Ċ import Ġkotlin . io . path . relative To Ċ import Ġkotlin . streams . toList Ċ Ċ enum Ġclass ĠKotlin Constants ( val Ġvalue : ĠString ) Ġ{ ĊĠĠĠ ĠO GR _ J ET BR AIN S _ K OT LIN (" org . jetbrains . kotlin "), ĊĠĠĠ ĠK OT LIN (" kotlin ") Ċ } Ċ Ċ enum Ġclass ĠFile Extension ( val Ġvalue : ĠString ) Ġ{ ĊĠĠĠ ĠK T (" kt "), ĊĠĠĠ ĠK TS (" k ts "), ĊĠĠĠ ĠGR AD LE (" gradle "), ĊĠĠĠ ĠPROPER TIES (" properties "), ĊĠĠĠ ĠPY (" py "), ĊĠĠĠ ĠIP Y NB (" ipynb "); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmap Extension Ġ= Ġvalues (). associate By ( File Extension :: value ) ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Value ( type : ĠString ) Ġ= Ġmap Extension [ type ] ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠK OT LIN _ EXTENSION S Ġ= Ġset Of ( File Extension . KT , ĠFile Extension . K TS ) Ċ val ĠPYTHON _ EXTENSION S Ġ= Ġset Of ( File Extension . PY ) Ċ Ċ const Ġval ĠPYTHON _ V ENV _ FOLDER _ NAME Ġ= Ġ". venv " Ċ Ċ fun ĠVirtual File . is Kotlin Related File (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġthis . extension Ġ== ĠFile Extension . KT . value Ġ|| Ġthis . extension Ġ== ĠFile Extension . K TS . value Ċ } Ċ Ċ fun ĠVirtual File . is Python Related File ( ignore V env Folder : ĠBoolean Ġ= Ġtrue ): ĠBoolean Ġ= ĊĠĠĠ Ġthis . extension Ġ== ĠFile Extension . PY . value Ġ&& Ġ!( ignore V env Folder Ġ&& Ġthis . is Python Virtual Environment File ()) Ċ Ċ fun ĠVirtual File . is Python Virtual Environment File (): ĠBoolean Ġ= ĊĠĠĠ Ġthis . canonical Path ?. contains ("${ File . separator }$ PYTHON _ V ENV _ FOLDER _ NAME ${ File . separator }") Ġ?: Ġfalse Ċ Ċ fun Ġrequire Directory ( path : ĠPath ) Ġ{ ĊĠĠĠ Ġrequire ( path . isDirectory ()) Ġ{ Ġ" Argument Ġhas Ġto Ġbe Ġdirectory " Ġ} Ċ } Ċ Ċ fun Ġget Sub directories ( path : ĠPath ): ĠList < Path > Ġ{ ĊĠĠĠ Ġreturn ĠFiles . walk ( path , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĠFiles . isDirectory ( it ) Ġ&& Ġ! it . equals ( path ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. toList () Ċ } Ċ Ċ fun Ġget Files With Extensions ( path : ĠPath , Ġextensions : ĠSet < File Extension >): ĠList < Path > Ġ{ ĊĠĠĠ Ġreturn ĠFiles . walk ( path , ĠFile Visit Option . FOLLOW _ LIN KS ) ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . isFile () Ġ&& Ġ( extensions . isEmpty () Ġ|| Ġextensions . contains ( File Extension . from Value ( it . extension ))) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! it . equals ( path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. toList () Ċ } Ċ Ċ fun Ġsymbolic Copy Only Required Extensions ( from Directory : ĠPath , Ġto Directory : ĠPath , Ġextensions : ĠSet < File Extension >) Ġ{ ĊĠĠĠ Ġget Files With Extensions ( from Directory , Ġextensions ). forEach Ġ{ ĠfilePath Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġtemp FilePath Ġ= ĠPaths . get ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Directory . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfilePath . relative To ( from Directory ). toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtemp FilePath . parent . create Directories () ĊĠĠĠĠĠĠĠ ĠFiles . create Symbolic Link ( temp FilePath , ĠfilePath ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġget PrintWriter ( directory : ĠPath , ĠfileName : ĠString ): ĠPrintWriter Ġ{ ĊĠĠĠ Ġdirectory . create Directories () ĊĠĠĠ Ġval Ġfile Ġ= ĠFile ( directory . to File (), ĠfileName ) ĊĠĠĠ Ġreturn Ġfile . print Writer () Ċ } Ċ