package Ġcom . step an ov . bbf . bug finder . mut ator . transform ations Ċ Ċ import Ġcom . intellij . lang . AST Node Ċ Ċ import Ġorg . jetbrains . kotlin . Kt Node Types Ċ import Ġorg . jetbrains . kotlin . lexer . Kt Tokens Ċ import Ġcom . step an ov . bbf . bug finder . util . getAll Children Nodes Ċ import Ġcom . step an ov . bbf . bug finder . util . getRandom Boolean Ċ import Ġcom . step an ov . bbf . bug finder . mut ator . transform ations . Factory . psi Factory Ġas Ġpsi Factory Ċ import Ġjava . util .* Ċ Ċ class ĠChange Operators Ġ: ĠTransformation () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġtransform () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoperators Ġ= Ġfile . node . getAll Children Nodes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . tree Parent . elementType Ġ== ĠK t Node Types . OPERATION _ REFERENCE Ġ|| Ġit . elementType Ġ== ĠK t Tokens . DOT Ġ} ĊĠĠĠĠĠĠĠ Ġoperators . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< " Ġ-> Ġreplace Operator ( it . tree Parent , ĠlistOf ("> =", Ġ"> ", Ġ"< =", Ġ" ==", Ġ"! =" )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< =" Ġ-> Ġreplace Operator ( it . tree Parent , ĠlistOf ("> =", Ġ"< ", Ġ"> ", Ġ" ==", Ġ"! =" )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" >" Ġ-> Ġreplace Operator ( it . tree Parent , ĠlistOf ("> =", Ġ"< ", Ġ"< =", Ġ" ==", Ġ"! =" )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"> =" Ġ-> Ġreplace Operator ( it . tree Parent , ĠlistOf ("> ", Ġ"< ", Ġ"< =", Ġ" ==", Ġ"! =" )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ==" Ġ-> Ġreplace Operator ( it . tree Parent , Ġ"! =") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"! =" Ġ-> Ġreplace Operator ( it . tree Parent , Ġ" ==" ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" +" Ġ-> Ġreplace Operator ( it . tree Parent , ĠlistOf ("- ", Ġ"*", Ġ"/", Ġ"% ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-" Ġ-> Ġreplace Operator ( it . tree Parent , ĠlistOf ("+ ", Ġ"*", Ġ"/", Ġ"% ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/" Ġ-> Ġreplace Operator ( it . tree Parent , ĠlistOf ("- ", Ġ"*", Ġ"+", Ġ"% ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"*" Ġ-> Ġreplace Operator ( it . tree Parent , ĠlistOf ("- ", Ġ"+", Ġ"/", Ġ"% ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO Ġadd Ġ? . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"." Ġ-> Ġreplace Operator ( it , Ġ" !! .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"+ =" Ġ-> Ġreplace Operator ( it . tree Parent , ĠlistOf ("- =", Ġ"* =", Ġ"/ =" )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- =" Ġ-> Ġreplace Operator ( it . tree Parent , ĠlistOf ("+ =", Ġ"* =", Ġ"/ =" )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"* =" Ġ-> Ġreplace Operator ( it . tree Parent , ĠlistOf ("- =", Ġ"+ =", Ġ"/ =" )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ =" Ġ-> Ġreplace Operator ( it . tree Parent , ĠlistOf ("- =", Ġ"* =", Ġ"+ =" )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" && " Ġ-> Ġreplace Operator ( it . tree Parent , Ġ" || ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" || " Ġ-> Ġreplace Operator ( it . tree Parent , Ġ" && ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ++ " Ġ-> Ġreplace Operator ( it , Ġ"-- ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- " Ġ-> Ġreplace Operator ( it , Ġ" ++ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreplace Operator ( replace : ĠAST Node , Ġreplacement : ĠList < String >, Ġis Random : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Random Ġ&& ĠgetRandom Boolean () Ġ|| Ġ! is Random ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= ĠRandom (). nextInt ( replacement . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace Operator ( replace , Ġreplacement [ index ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreplace Operator ( replace : ĠAST Node , Ġreplacement : ĠString , Ġis Random : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Random Ġ&& ĠgetRandom Boolean () Ġ|| Ġ! is Random ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreplacement Node Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( replace . elementType Ġ== ĠK t Node Types . OPERATION _ REFERENCE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpsi Factory . create Operation Name ( replacement ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpsi Factory . create Expression ( replacement ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchecker . replace Node If Possible ( replace . psi , Ġreplacement Node ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }