package Ġcom . step an ov . bbf . body generator Ċ Ċ import Ġcom . step an ov . bbf . bug finder . executor . project . Project Ċ import Ġcom . step an ov . bbf . bug finder . generator . target sg ener ators . Random Instances Generator Ċ import Ġcom . step an ov . bbf . bug finder . util . getType Ċ import Ġcom . step an ov . bbf . bug finder . util . get Psi Ċ import Ġcom . step an ov . bbf . bug finder . util . name Ċ import Ġcom . step an ov . bbf . red uk tor . parser . PS IC re ator Ċ import Ġorg . jetbrains . kotlin . cfg . get Declaration Descriptor In cluding Construct ors Ċ import Ġorg . jetbrains . kotlin . descriptors . Class Descriptor Ċ import Ġorg . jetbrains . kotlin . psi . Kt Class Ċ import Ġorg . jetbrains . kotlin . psi . Kt File Ċ import Ġorg . jetbrains . kotlin . psi . Kt Type Parameter Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . descriptor Util . parent sWith Self Ċ import Ġorg . jetbrains . kotlin . types . Kotlin Type Ċ import Ġjava . io . File Ċ import Ġkotlin . random . Random Ċ import Ġkotlin . reflect . K Class ĊĊ Ċ object ĠUtils Ġ{ ĊĠĠĠ Ġobject ĠProject Tools Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġproject Ġ= ĠProject . createFrom Code ( File (" tmp / body _ test _ 2 . kt "). read Text ()) ĊĠĠĠĠĠĠĠ Ġvar Ġkt File Ġ= Ġproject . files . first (). psi File Ġas ĠK t File ĊĊĠĠĠĠĠĠĠ Ġvar Ġctx : ĠBinding Context Ġ= ĠPS IC re ator . analyze ( kt File , Ġproject ) Ġ?: Ġthrow ĠIllegalArgumentException () ĊĠĠĠĠĠĠĠ Ġvar Ġrig : ĠRandom Instances Generator Ġ= ĠRandom Instances Generator ( kt File , Ġctx ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Project Tools ( kt File : ĠK t File , Ġproject : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ ĠProject Tools . project Ġ= Ġproject ĊĠĠĠĠĠĠĠ ĠProject Tools . kt File Ġ= Ġkt File ĊĊĠĠĠĠĠĠĠ ĠProject Tools . ctx Ġ= ĠPS IC re ator . analyze ( Project Tools . kt File , Ġproject ) !! ĊĠĠĠĠĠĠĠ ĠProject Tools . rig Ġ= ĠRandom Instances Generator ( Project Tools . kt File , ĠProject Tools . ctx ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠK t Class . generate Path (): ĠString Ġ= ĊĠĠĠĠĠĠĠ ĠProject Tools . rig . class Instance Generator . generate Random InstanceOf User Class ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( this . get Declaration Descriptor In cluding Construct ors ( Project Tools . ctx ) Ġas ĠClass Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. default Type )?. first ?. text Ġ?: Ġgenerate Path () ĊĊĠĠĠ Ġfun Ġgenerate User Defined Type Path ( type : ĠKotlin Type ): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġtype . constructor . declaration Descriptor !!. parent sWith Self . toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < Class Descriptor >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. reversed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString (".") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . default Type . let Ġ{ Ġst ype Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ((( type . constructor . declaration Descriptor ?. source ?. get Psi () Ġas ĠK t Class ). is Inner () Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst ype Ġ== Ġtype ) Ġ&& Ġst ype . type Parameters (). isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst ype . with Random Param Types () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name . asString (). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun ĠK t Class . isNot Enum (): ĠBoolean Ġ= Ġ! this . is Enum () ĊĊĠĠĠ Ġfun ĠK Class <* >. with Random Param Types (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= ĠList ( this . type Parameters . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig . Primitive Types . random Content (). simple Name !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . simple Name !! Ġ+ Ġparameters . join ToString ( prefix Ġ= Ġ"< ", Ġseparator Ġ= Ġ",", Ġpostfix Ġ= Ġ"> ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠKotlin Type . with Random Param Types (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= ĠList ( this . type Parameters (). size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġthis . type Parameters ()[ it ]. getType ( Project Tools . ctx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfig . Primitive Types . random Content (). simple Name !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . name Ġ+ Ġparameters . join ToString ( prefix Ġ= Ġ"< ", Ġseparator Ġ= Ġ",", Ġpostfix Ġ= Ġ"> ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠKotlin Type . type Parameters (): ĠList < Kt Type Parameter > Ġ= ĊĠĠĠĠĠĠĠ Ġ( this . constructor . declaration Descriptor ?. source ?. get Psi () Ġas ĠK t Class ). type Parameters ĊĊĠĠĠ Ġfun Ġ< T > ĠMap < T , ĠInt >. random Content (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcur Power Ġ= ĠRandom . nextInt ( this . values . sum ()) ĊĠĠĠĠĠĠĠ Ġfor Ġ( pair Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cur Power Ġ< Ġpair . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpair . key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Power Ġ-= Ġpair . value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġ ĠList < Pair < T , ĠInt >> . random Content (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcur Power Ġ= ĠRandom . nextInt ( this . sum Of Ġ{ Ġit . second Ġ}) ĊĠĠĠĠĠĠĠ Ġfor Ġ( pair Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cur Power Ġ< Ġpair . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpair . first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Power Ġ-= Ġpair . second ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠ Ġ} Ċ }