package Ġorg . jetbrains . research . k fg . util Ċ Ċ import Ġorg . jetbrains . research . k the l per . collection . queue Of Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Ċ import Ġjava . net . URL ClassLoader ĊĊ Ċ val ĠFile . is Jar Ġget () Ġ= Ġthis . name . endsWith (". jar ") Ċ val ĠFile . is Class Ġget () Ġ= Ġthis . name . endsWith (". class ") Ċ val ĠFile . className Ġget () Ġ= Ġthis . name . remove Suffix (". class ") Ċ Ċ val ĠFile . class Loader Ġget () Ġ= ĠURL ClassLoader ( array Of ( to URI (). to URL ())) Ċ Ċ val ĠFile . all Entries : ĠList < File > ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < File >() ĊĠĠĠĠĠĠĠ Ġval Ġqueue Ġ= Ġqueue Of ( this ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( queue . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= Ġqueue . poll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current . isFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( current . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . addAll ( current . list Files () Ġ?: ĠarrayOf ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ Ċ private Ġconst Ġval ĠMAX _ BYTE _ ARRAY _ SIZE Ġ= Ġ 1 6 3 8 4 Ċ Ċ val ĠInputStream . as ByteArray : ĠByteArray Ġget () Ġ{ ĊĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĊĠĠĠ Ġvar Ġn Read : ĠInt ĊĠĠĠ Ġval Ġdata Ġ= ĠByteArray ( MAX _ BYTE _ ARRAY _ SIZE ) ĊĊĠĠĠ Ġwhile Ġ( this . read ( data , Ġ 0 , Ġdata . size ). also Ġ{ Ġn Read Ġ= Ġit Ġ} Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffer . write ( data , Ġ 0 , Ġn Read ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġbuffer . toByteArray () Ċ } Ċ Ċ fun ĠFile . write ( input : ĠInputStream ) Ġ= Ġthis . write Bytes ( input . as ByteArray )