package Ġcom . step an ov . bbf . generator Ċ Ċ import Ġcom . step an ov . bbf . bug finder . executor . Compiler Args Ċ import Ġcom . step an ov . bbf . bug finder . executor . comp ilers . JVM Compiler Ċ import Ġcom . step an ov . bbf . bug finder . executor . project . Project Ċ import Ġcom . step an ov . bbf . bug finder . mut ator . transform ations . Factory Ċ import Ġcom . step an ov . bbf . red uk tor . parser . PS IC re ator Ċ import Ġorg . apache . log 4 j . Level Ċ import Ġorg . apache . log 4 j . Logger Ċ import Ġorg . apache . log 4 j . Property Configurator Ċ import Ġorg . jetbrains . kotlin . psi . Kt File Ċ import Ġjava . io . File Ċ import Ġkotlin . system . exit Process Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġ// Init Ġlog 4 j ĊĠĠĠ ĠProperty Configurator . configure (" src / main / resources / bbf Log 4 j . properties ") ĊĠĠĠ Ġif Ġ(! Compiler Args . get Prop As Boolean (" LOG ")) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . getRoot Logger (). level Ġ= ĠLevel . OFF ĊĠĠĠĠĠĠĠ ĠLogger . getLogger (" bug Finder Logger "). level Ġ= ĠLevel . OFF ĊĠĠĠĠĠĠĠ ĠLogger . getLogger (" mut ator Logger "). level Ġ= ĠLevel . OFF ĊĠĠĠĠĠĠĠ ĠLogger . getLogger (" reducer Logger "). level Ġ= ĠLevel . OFF ĊĠĠĠĠĠĠĠ ĠLogger . getLogger (" transformation Manager Log "). level Ġ= ĠLevel . OFF ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġval Ġp _ Ġ= ĠProject . createFrom Code ( Ċ // ĠĠĠĠĠĠĠ Ġ" class ĠA () Ġ Ġ{\ n " Ġ+ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" class ĠB < T >() Ġ{\ n " Ġ+ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }\ n " Ġ+ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" Ċ // ĠĠĠ Ġ) Ċ // ĠĠĠ Ġval Ġf Ġ= Ġp _. files . first (). psi File Ġas ĠK t File Ċ // ĠĠĠ Ġval Ġcont Ġ= ĠPS IC re ator . analyze ( f ) !! Ċ // ĠĠĠ ĠRandom Type Generator . set File And Context ( f , Ġcont ) Ċ // ĠĠĠ Ġprintln ( Random Type Generator . generate Type (" A . B < Int > ")) Ċ // ĠĠĠ Ġexit Process ( 0 ) Ċ Ċ // ĠĠĠ Ġval Ġp 1 Ġ= ĠProject . createFrom Code ( File (" tmp / my Test . kt "). read Text ()) Ċ // ĠĠĠ Ġval Ġpsi File 1 Ġ= Ġp 1 . files . first (). psi File Ġas ĠK t File Ċ // ĠĠĠ Ġval Ġctx 1 Ġ= ĠPS IC re ator . analyze ( psi File 1 ) !! Ċ // ĠĠĠ Ġexit Process ( 0 ) ĊĊĠĠĠ Ġval Ġp Ġ= ĠGenerator (). generate (). first ĊĠĠĠ Ġval Ġfile Ġ= Ġp . files . first (). psi File Ġas ĠK t File ĊĠĠĠ Ġprintln ( file . text ) ĊĠĠĠ Ġval Ġproject Ġ= ĠProject . createFrom Code ( kt File . text ) ĊĠĠĠ Ġval Ġchecker Ġ= ĠCompilation Checker ( JVM Compiler ()) ĊĠĠĠ Ġval Ġres Ġ= Ġchecker . check Comp iling ( project ) ĊĠĠĠ Ġprintln (" res Ġ= Ġ$ res ") ĊĠĠĠ Ġexit Process ( 0 ) ĊĠĠĠ Ġ/* val Ġcompiler Ġ= ĠJVM Compiler ("") ĊĠĠĠ Ġval Ġcompiled Ġ= Ġcompiler . try To Compile ( p ) ĊĠĠĠ Ġif Ġ(! compiled . is Compile Success ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( compiled . combined Output ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġexit Process ( 0 ) */ ĊĊ Ċ // ĠĠĠ Ġval Ġproject Ġ= ĠProject . createFrom Code ( File (" test . kt "). read Text ()) Ċ // ĠĠĠ Ġval Ġkt File Ġ= Ġproject . files . first (). psi File Ġas ĠK t File Ċ // ĠĠĠ Ġval Ġctx Ġ= ĠPS IC re ator . analyze ( kt File ) !! Ċ // ĠĠĠ Ġval Ġklass Ġ= Ġkt File . getAll P SI Children OfType < Kt Class Or Object >() [ 1 ] Ċ // ĠĠĠ Ġval Ġinstance Ġ= ĠRandom Instances Generator ( kt File ). generate Random InstanceOf Class ( klass ) Ċ // ĠĠĠ Ġprintln ( instance ?. first ?. text ) Ċ // ĠĠĠ ĠRandom Type Generator . set File And Context ( kt File , Ġctx ) Ċ // ĠĠĠ Ġrepeat ( 1 0 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġprintln (" GENERATED ĠTYPE Ġ= Ġ${ Random Type Generator . generate Random Type With Ctx () }") Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġexit Process ( 0 ) Ċ Ċ // ĠĠĠ Ġval Ġproject Ġ= ĠProject . createFrom Code (" class ĠA < T > Ġ{ Ġval Ġa : ĠT Ġ} ") Ċ // ĠĠĠ Ġval Ġkt File Ġ= Ġproject . files . first (). psi File Ġas ĠK t File Ċ // ĠĠĠ Ġval Ġctx Ġ= ĠPS IC re ator . analyze ( kt File ) !! Ċ // ĠĠĠ Ġval Ġklass Ġ= Ġkt File . getAll P SI Children OfType < Kt Class Or Object >(). first () Ċ // ĠĠĠ Ġval Ġclass Descr Ġ= Ġklass . get Declaration Descriptor In cluding Construct ors ( ctx ) Ċ // ĠĠĠ ĠRandom Type Generator . set File And Context ( kt File , Ġctx ) Ċ // ĠĠĠ Ġval Ġint Type Ġ= ĠRandom Type Generator . generate Type (" Int ") !! Ċ // ĠĠĠ Ġval Ġreplaced Ġ= Ġ( class Descr Ġas ĠLazy Class Descriptor ). default Type . replace ( listOf ( int Type . as Type Projection ())) Ċ // ĠĠĠ Ġprintln ( re placed . member Scope . get Descriptors Filtered Ġ{ Ġtrue Ġ}) Ċ // ĠĠĠ Ġexit Process ( 0 ) Ċ }