// package Ġcom . step an ov . bbf . bug finder . executor Ċ // Ċ // import Ġcom . intellij . psi . Psi File Ċ // import Ġorg . jetbrains . kotlin . psi . Kt File Ċ // import Ġorg . jetbrains . kotlin . psi . Kt Psi Factory Ċ // Ċ // enum Ġclass ĠLANGUAGE Ġ{ Ċ // ĠĠĠ ĠK OT LIN , Ċ // ĠĠĠ ĠK JAVA , Ċ // ĠĠĠ ĠJAVA Ċ //} Ċ // Ċ //// Just Ġstring Ġrepresentation Ġof Ġkt Files Ċ // class ĠProject ( texts : ĠList < String > ?, Ġfiles : ĠList < Psi File >? Ġ= Ġnull , Ġval Ġlanguage : ĠLANGUAGE Ġ= ĠLANGUAGE . K OT LIN ) Ġ{ Ċ // Ċ // ĠĠĠ Ġval Ġtexts : ĠList < String > Ġ= Ġtexts ?. let Ġ{ Ġit Ġ} Ġ?: Ġfiles !!. map Ġ{ Ġit . text Ġ} Ċ // Ċ // ĠĠĠ Ġconstructor ( text : ĠString ) Ġ: Ġthis ( listOf ( text )) Ċ // ĠĠĠ Ġconstructor ( text : ĠString , Ġfiles : ĠList < Psi File >? Ġ= Ġnull , Ġlanguage : ĠLANGUAGE Ġ= ĠLANGUAGE . K OT LIN ) Ġ: Ġthis ( Ċ // ĠĠĠĠĠĠĠ ĠlistOf ( text ), Ċ // ĠĠĠĠĠĠĠ Ġfiles , Ċ // ĠĠĠĠĠĠĠ Ġlanguage Ċ // ĠĠĠ Ġ) Ċ // Ċ // ĠĠĠ Ġconstructor ( files : ĠList < Psi File >, Ġlanguage : ĠLANGUAGE Ġ= ĠLANGUAGE . K OT LIN ) Ġ: Ġthis ( null , Ġfiles , Ġlanguage ) Ċ // ĠĠĠ Ġconstructor ( file : ĠPsi File , Ġlanguage : ĠLANGUAGE Ġ= ĠLANGUAGE . K OT LIN ) Ġ: Ġthis ( listOf ( file ), Ġlanguage ) Ċ // Ċ // ĠĠĠ Ġoperator Ġfun Ġplus ( other : ĠProject ?) Ġ= Ċ // ĠĠĠĠĠĠĠ Ġother ?. let Ġ{ ĠProject ( texts Ġ+ Ġother . texts , Ġnull , Ġthis . language ) Ġ} Ġ?: ĠProject ( texts ) Ċ // Ċ // ĠĠĠ Ġfun Ġget Common Text ( common Path : ĠString ) Ġ= Ċ // ĠĠĠĠĠĠĠ Ġtexts . map Indexed Ġ{ Ġindex , Ġs Ġ-> Ġ"// File : Ġ${ common Path . split (" Ġ" )[ index ] }\ n $ s " Ġ}. join ToString ("\ n ") Ċ // Ċ // ĠĠĠ Ġfun Ġget Common Text WithDefault Path () Ġ= Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( texts . any Ġ{ Ġit . contains ( Regex (""" // \ s *(( FILE )| ( File )) "" ")) Ġ}) Ġtexts . join ToString ("\ n ") Ċ // ĠĠĠĠĠĠĠ Ġelse Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( language ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLANGUAGE . K JAVA Ġ-> Ġtexts . join ToString ("\ n ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtexts Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Indexed Ġ{ Ġindex , Ġs Ġ-> Ġ"// File : Ġ${ Compiler Args . path To Tmp File . substring Before (". kt ") }$ index . kt \ n $ s " Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("\ n ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // Ċ // ĠĠĠ Ġfun Ġget Kt Files ( psi Factory : ĠK t Psi Factory ): ĠList < Kt File > Ġ= Ġtexts . map Ġ{ Ġpsi Factory . create File ( it ) Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ċ // ĠĠĠĠĠĠĠ Ġother Ġis ĠProject Ġ&& Ġother . texts Ġ== Ġthis . texts Ċ // Ċ // ĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġlanguage . hashCode () Ċ // ĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġtexts . hashCode () Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġresult Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġtexts . join ToString ("\ n \ n ") Ċ //}