package Ġcom . the ox ao . base . script . ast Ċ Ċ import Ġcom . the ox ao . base . script . ast . Java Nodes . list Node Ċ import Ġcom . the ox ao . base . script . ast . Java Nodes . string Node Ċ import Ġorg . codehaus . groovy . Gro ovy Exception Ċ import Ġorg . codehaus . groovy . ast .* Ċ import Ġorg . codehaus . groovy . ast . expr . Array Expression Ċ import Ġorg . codehaus . groovy . ast . expr . Constant Expression Ċ import Ġorg . codehaus . groovy . ast . tools . Gener ics Utils Ċ import Ġorg . codehaus . groovy . control . Compile Phase Ċ import Ġorg . codehaus . groovy . control . Source Unit Ċ import Ġorg . codehaus . groovy . transform . AST Transformation Ċ import Ġorg . codehaus . groovy . transform . Gro ovy AST Transformation ĊĊ Ċ /** Ċ Ġ* Ġ@ author Ġthe o Ċ Ġ* Ġ@ date Ġ 2 0 1 9 / 7 / 1 Ċ Ġ*/ Ċ @ Gro ovy AST Transformation ( phase Ġ= ĠCompile Phase . SEM ANT IC _ ANAL YS IS ) Ċ class ĠParameter Name Transform Ġ: ĠAST Transformation Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPARAMETER _ NAMES _ FIELD _ SUFFIX Ġ= Ġ"\ $ parameter Names " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit ( nodes : ĠArray < out ĠAST Node > ?, Ġsource : ĠSource Unit ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( nodes Ġ== Ġnull Ġ|| Ġnodes . size Ġ> Ġ 1 Ġ|| Ġnodes [ 0 ] Ġ! is ĠModule Node ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠGro ovy Exception (" something Ġwrong ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmn Ġ= Ġnodes [ 0 ] Ġas ĠModule Node ĊĠĠĠĠĠĠĠ Ġval Ġfirst Class Ġ= Ġmn . classes [ 0 ] ĊĠĠĠĠĠĠĠ Ġmn . methods . forEach Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgener ics Node Ġ= Ġlist Node . set Gener ics ( Gener ics Type ( string Node )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Node Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠField Node ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ it . name }$ PARAMETER _ NAMES _ FIELD _ SUFFIX ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGener ics Utils . make Class Safe With Gener ics ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Node , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGener ics Type ( string Node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArray Expression ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Node , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . parameter Names (). map Ġ{ ĠConstant Expression ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Class . addField ( field Node ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMethod Node . parameter Names (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . parameters . map Ġ{ Ġit . name Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠClass Node . set Gener ics ( node : ĠGener ics Type ): ĠClass Node Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . gener ics Types Ġ= ĠarrayOf ( node ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ Ċ } Ċ