package Ġcom . step an ov . bbf . red uk tor . passes Ċ Ċ import Ġcom . step an ov . bbf . red uk tor . executor . Compiler Test Checker Ċ import Ġcom . step an ov . bbf . red uk tor . util . getAll P SI Children OfType Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . parents Ċ Ċ class ĠReplace Block Expression To Body Ġ: ĠSimpl ification Pass () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġsimplify () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġblocks Ġ= Ġfile . getAll P SI Children OfType < Kt Block Expression >() ĊĠĠĠĠĠĠĠ Ġval Ġparents Ġ= Ġblocks . map Ġ{ Ġit . parents . filter Ġ{ Ġit :: class Ġin Ġav Expressions Ġ}. toList () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbodies Ġ= Ġblocks . map Ġ{ Ġit . copy () Ġas ĠK t Block Expression Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( body Ġin Ġbodies ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body . l Brace Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . removeChild ( body . l Brace !!. node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body . r Brace Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . removeChild ( body . r Brace !!. node ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġblocks . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( par Ġin Ġparents [ i ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( checker . replace Node If Possible ( par , Ġbodies [ i ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġav Expressions Ġ= ĠlistOf ( Kt If Expression :: class , ĠK t When Expression :: class , ĠK t While Expression :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK t Do While Expression :: class , ĠK t Named Function :: class , ĠK t For Expression :: class , ĠK t Try Expression :: class ) Ċ Ċ }