// ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġcom . intellij . util . io Ċ Ċ import Ġcom . intellij . util . containers . nul lize Ċ import Ġjava . nio . charset . Malformed Input Exception Ċ import Ġjava . nio . file . Path Ċ Ċ @ Jvm Over loads Ċ fun ĠPath . get Directory Tree ( excluded : ĠSet < String > Ġ= Ġempty Set (), Ġprint Content : ĠBoolean Ġ= Ġtrue , Ġprint Root Name : ĠBoolean Ġ= Ġtrue ): ĠString Ġ{ ĊĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠ Ġget Directory Tree ( this , Ġ 0 , Ġsb , Ġexcluded , Ġprint Content Ġ= Ġprint Content , Ġprint Root Name Ġ= Ġprint Root Name ) ĊĠ Ġreturn Ġsb . toString () Ċ } Ċ Ċ private Ġfun Ġget Directory Tree ( dir : ĠPath , Ġindent : ĠInt , Ġsb : ĠStringBuilder , Ġexcluded : ĠSet < String >, Ġprint Content : ĠBoolean , Ġprint Root Name : ĠBoolean ) Ġ{ ĊĠ Ġval Ġfile List Ġ= Ġsorted FileList ( dir , Ġexcluded ). nul lize () Ġ?: Ġreturn ĊĊĠ Ġappend Indent String ( indent , Ġsb ) ĊĠ Ġif Ġ( print Content ) Ġ{ ĊĠĠĠ Ġsb . append ("\ u 2 5 1 c \ u 2 5 0 0 \ u 2 5 0 0 ") ĊĠ Ġ} ĊĠ Ġif Ġ( print Root Name ) Ġ{ ĊĠĠĠ Ġsb . append ( dir . fileName . toString ()) ĊĠ Ġ} ĊĠ Ġsb . append ("/") ĊĠ Ġsb . append ("\ n ") ĊĠ Ġfor Ġ( file Ġin Ġfile List ) Ġ{ ĊĠĠĠ Ġif Ġ( file . isDirectory ()) Ġ{ ĊĠĠĠĠĠ Ġget Directory Tree ( file , Ġindent Ġ+ Ġ 1 , Ġsb , Ġexcluded , Ġprint Content , Ġprint Root Name ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġprint File ( file , Ġindent Ġ+ Ġ 1 , Ġsb , Ġprint Content ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġsorted FileList ( dir : ĠPath , Ġexcluded : ĠSet < String >): ĠList < Path >? Ġ{ ĊĠ Ġreturn Ġdir . directory Stream IfExists Ġ{ Ġstream Ġ-> ĊĠĠĠ Ġvar Ġsequence Ġ= Ġstream . as Sequence () ĊĠĠĠ Ġif Ġ( excluded . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġsequence Ġ= Ġsequence . filter Ġ{ Ġ! excluded . contains ( it . fileName . toString ()) Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġlist Ġ= Ġsequence . to Mutable List () ĊĠĠĠ Ġlist . sort () ĊĠĠĠ Ġlist ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġprint File ( file : ĠPath , Ġindent : ĠInt , Ġsb : ĠStringBuilder , Ġprint Content : ĠBoolean ) Ġ{ ĊĠ Ġappend Indent String ( indent , Ġsb ) ĊĠ Ġif Ġ( print Content ) Ġ{ ĊĠĠĠ Ġsb . append ("\ u 2 5 1 c \ u 2 5 0 0 \ u 2 5 0 0 ") ĊĠ Ġ} ĊĠ Ġval ĠfileName Ġ= Ġfile . fileName . toString () ĊĠ Ġsb . append ( fileName ) ĊĠ Ġsb . append ("\ n ") ĊĠ Ġif Ġ( print Content Ġ&& Ġ!( fileName . endsWith (". zip ") Ġ|| ĠfileName . endsWith (". jar ") Ġ|| ĠfileName . endsWith (". class "))) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġsb . append ( file . read Chars ()). append ("\ n \ n ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġcatch Ġ( ignore : ĠMal formed Input Exception ) Ġ{ ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġappend Indent String ( indent : ĠInt , Ġsb : ĠStringBuilder ) Ġ{ ĊĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġindent ) Ġ{ ĊĠĠĠ Ġsb . append (" Ġ Ġ") ĊĠ Ġ} Ċ }