package Ġcom . step an ov . bbf . bug finder . executor . check ers Ċ Ċ import Ġcom . intellij . lang . AST Node Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . step an ov . bbf . bug finder . executor . Common Compiler Ċ import Ġcom . step an ov . bbf . bug finder . executor . Compiler Args Ċ import Ġcom . step an ov . bbf . bug finder . executor . project . BB F File Ċ import Ġcom . step an ov . bbf . bug finder . executor . project . Header Ċ import Ġcom . step an ov . bbf . bug finder . executor . project . LANGUAGE Ċ import Ġcom . step an ov . bbf . bug finder . executor . project . Project Ċ import Ġcom . step an ov . bbf . red uk tor . parser . PS IC re ator Ċ Ċ // class ĠAbstract Tree Mut ator ( private Ġval Ġcompilers : ĠList < Common Compiler >, Ġval Ġconfiguration : ĠHeader ) Ġ{ Ċ // ĠĠĠ Ġconstructor ( compiler : ĠCommon Compiler , Ġconfiguration : ĠHeader ) Ġ: Ġthis ( listOf ( compiler ), Ġconfiguration ) Ċ Ċ // ĠĠĠ Ġprivate Ġfun Ġprepare Project ( new File : ĠPsi File , Ġoriginal File : ĠB BF File ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġoriginal File . change Psi File ( new File , Ġfalse ) Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġprivate Ġfun Ġprepare Checker ( new File : ĠPsi File , Ġoriginal File : ĠPsi File ): ĠMutation Checker Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġtmp Name Ġ= Ġ"${ Compiler Args . path To Tmp Dir }/ tmp . kt " Ċ // ĠĠĠĠĠĠĠ Ġval Ġb bf File Ġ= ĠB BF File ( tmp Name , Ġfile ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġpr Ġ= ĠProject ( configuration , ĠlistOf ( bbf File ), ĠLANGUAGE . K OT LIN ) Ċ // ĠĠĠĠĠĠĠ Ġreturn ĠMutation Checker ( comp ilers , Ġpr , Ġpr . files . first ()) Ċ // ĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġfun Ġreplace PS IN ode If Possible ( file : ĠPsi File , Ġnode : ĠPsi Element , Ġreplacement : ĠPsi Element ) Ġ= Ċ // ĠĠĠĠĠĠĠ Ġprepare Checker ( file ). replace PS IN ode If Possible ( node , Ġreplacement ) Ċ // Ċ // ĠĠĠ Ġfun Ġreplace Node If Possible ( file : ĠPsi File , Ġnode : ĠAST Node , Ġreplacement : ĠAST Node ) Ġ= Ċ // ĠĠĠĠĠĠĠ Ġprepare Checker ( file ). replace Node If Possible ( node , Ġreplacement ) Ċ // Ċ // ĠĠĠ Ġfun Ġreplace Node If Possible With Node With File Replacement ( new File : ĠPsi File , Ġoriginal File : ĠB BF File , Ġnode : ĠAST Node , Ġreplacement : ĠAST Node ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġprepare Project ( new File , Ġoriginal File ) Ċ // ĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġfun Ġadd Node If Possible ( file : ĠPsi File , Ġanchor : ĠPsi Element , Ġnode : ĠPsi Element , Ġbefore : ĠBoolean Ġ= Ġfalse ) Ġ= Ċ // ĠĠĠĠĠĠĠ Ġprepare Checker ( file ). add Node If Possible ( anchor , Ġnode , Ġbefore ) Ċ // Ċ // ĠĠĠ Ġfun Ġcheck Comp iling ( file : ĠPsi File ) Ġ= Ġprepare Checker ( file ). check Comp iling () Ċ Ċ // ĠĠĠ Ġfun Ġadd Node If Possible With Node ( Ċ // ĠĠĠĠĠĠĠ Ġfile : ĠPsi File , Ċ // ĠĠĠĠĠĠĠ Ġanchor : ĠPsi Element , Ċ // ĠĠĠĠĠĠĠ Ġnode : ĠPsi Element , Ċ // ĠĠĠĠĠĠĠ Ġbefore : ĠBoolean Ġ= Ġfalse Ċ // ĠĠĠ Ġ): ĠPsi Element ? Ġ= Ġprepare Checker ( file ). add Node If Possible With Node ( anchor , Ġnode , Ġbefore ) Ċ //}