package Ġcoverage Ċ Ċ data Ġclass ĠCoverage Entry ( ĊĠĠĠ Ġval Ġpath To Fun : ĠString , ĊĠĠĠ Ġval ĠmethodName : ĠString , ĊĠĠĠ Ġval Ġparameters : ĠList < String >, ĊĠĠĠ Ġval ĠreturnType : ĠString Ċ ) Ġ{ ĊĊĠĠĠ Ġconstructor ( path To Fun : ĠString , ĠmethodName : ĠString , Ġparameters : ĠString , ĠreturnType : ĠString ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġpath To Fun , ĊĠĠĠĠĠĠĠ ĠmethodName , ĊĠĠĠĠĠĠĠ Ġparameters . let Ġ{ Ġif Ġ( it . isEmpty ()) ĠlistOf () Ġelse Ġit . split ("; ") Ġ}, ĊĠĠĠĠĠĠĠ ĠreturnType ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠparseFrom Kt Coverage ( entry : ĠString ): ĠCoverage Entry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! entry . substring Before (': '). contains ('$ ')) ĠlistOf ( entry . substring Before (': ')) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġentry . substring Before (': ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split ("$ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġit . matches ( Regex (""" \ d + "" ")) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġklass Name Ġ= Ġpath . last OrNull ()?. substring After Last ('/') Ġ?: Ġ" No Name " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. substring After (' (' ). substring Before (' )') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split (' ; ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġparam Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= Ġparam . take While Ġ{ Ġit . is UpperCase () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġj vm Type To Name [" $ it "] Ġ?: Ġ"" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . trim (). isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġparams . add ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prefix Ġ!= Ġparam ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġparam . substring After Last ('/') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name . trim (). isNotEmpty ()) Ġparams . add ( name . trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . substring After (': '). substring Before (' (' ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġit . split ("$ "). filter Not Ġ{ Ġit . matches ( Regex (""" \ d + "" ")) Ġ}. last OrNull () Ġ?: Ġ" no Name " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< init >", Ġ"< cl init >" Ġ-> Ġif Ġ( params . isEmpty ()) Ġ"$ klass Name ()" Ġelse Ġklass Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr tv Ġ= Ġentry . substring After Last (' ) '). substring After Last ('/ '). substring Before Last (' ; '). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj vm Type To Name [ it ] Ġ?: Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCoverage Entry ( path . join ToString ("\ $ "), ĠmethodName , Ġparams , Ġr tv ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġj vm Type To Name Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" V " Ġto Ġ" void ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" B " Ġto Ġ" byte ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" C " Ġto Ġ" char ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" D " Ġto Ġ" double ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" F " Ġto Ġ" float ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" I " Ġto Ġ" int ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" J " Ġto Ġ" long ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" S " Ġto Ġ" short ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Z " Ġto Ġ" boolean " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtmp Path To Fun Ġ= Ġif Ġ( path To Fun . isEmpty ()) Ġ"" Ġelse Ġ"$ path To Fun :" ĊĠĠĠĠĠĠĠ Ġval Ġstr Params Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parameters . isEmpty ()) Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġparameters . join ToString (" ;", Ġpostfix Ġ= Ġ"; ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ tmp Path To Fun $ methodName ($ str Params )$ returnType ;" ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠCoverage Entry ) Ġfalse ĊĠĠĠĠĠĠĠ Ġelse Ġthis . is Same Entries ( other ) ĊĊĊĠĠĠ Ġfun Ġis Same Entries ( other : ĠCoverage Entry ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! path To Fun . equals ( other . path To Fun , Ġtrue )) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(! methodName . equals ( other . methodName , Ġtrue )) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġcompare Params And R tv ( parameters , Ġother . parameters , ĠreturnType , Ġother . returnType ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompare Params And R tv ( params 1 : ĠList < String >, Ġparams 2 : ĠList < String >, Ġr tv 1 : ĠString , Ġr tv 2 : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( params 1 Ġ== Ġparams 2 ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( params 1 . size Ġ!= Ġparams 2 . size ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġparams 1 . forEach Indexed Ġ{ Ġindex , Ġs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! compare Param ( s , Ġparams 2 [ index ])) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcompare Param ( rt v 1 , Ġr tv 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompare Param ( param 1 : ĠString , Ġparam 2 : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam 1 . equals ( param 2 , Ġignore Case Ġ= Ġtrue ) Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam 1 . substring After Last ('$ '). equals ( param 2 . substring After Last ('$ '), Ġtrue ) Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam 1 . substring After (" Mutable "). equals ( param 2 . substring After (" Mutable "), Ġtrue ) Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam 1 Ġ== Ġ" Any " Ġ|| Ġparam 2 Ġ== Ġ" Any " Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġparam 1 Ġ== Ġ" Object " Ġ|| Ġparam 2 Ġ== Ġ" Object " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġpath To Fun . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ ĠmethodName . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġparameters . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ ĠreturnType . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ }