package Ġast miner . parse . g um tree . java . jdt Ċ Ċ import Ġast miner . common . model . En closing Element Ċ import Ġast miner . common . model . En closing ElementType Ċ import Ġast miner . common . model . Function Info Ċ import Ġast miner . common . model . Function Info Parameter Ċ import Ġast miner . parse . g um tree . G um TreeNode Ċ import Ġmu . Kotlin Logging Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger (" G um tree - Java - function - info ") Ċ Ċ class ĠG um Tree Java J DT Function Info ( ĊĠĠĠ Ġoverride Ġval Ġroot : ĠG um TreeNode , ĊĠĠĠ Ġoverride Ġval ĠfilePath : ĠString Ċ ) Ġ: ĠFunction Info < G um TreeNode > Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġname Node : ĠG um TreeNode ? Ġ= Ġroot . getChild OfType ( Type Labels . simple Name ) ĊĠĠĠ Ġoverride Ġval ĠreturnType : ĠString ? Ġ= Ġroot . getElement Type () ĊĠĠĠ Ġoverride Ġval Ġen closing Element : ĠEn closing Element < G um TreeNode >? Ġ= Ġcollect En closing Class () ĊĠĠĠ Ġoverride Ġval Ġparameters : ĠList < Function Info Parameter >? Ġ= Ġextract With Logger ( logger ) Ġ{ Ġcollect Parameters () Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġmodifiers : ĠList < String > Ġ= Ġroot ĊĠĠĠĠĠĠĠ Ġ. children ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . type Label Ġ== Ġ" Modifier " Ġ} ĊĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . token . original Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġannotations : ĠList < String > Ġ= Ġroot ĊĠĠĠĠĠĠĠ Ġ. children ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . type Label Ġ== Ġ" Marker Annotation " Ġ} ĊĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . children . first (). token . original Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġis Constructor : ĠBoolean Ġ= Ġen closing Element ?. name ?. equals ( name ) Ġ?: Ġfalse ĊĊĠĠĠ Ġoverride Ġval Ġbody : ĠG um TreeNode ? Ġ= Ġroot . children . find Ġ{ Ġit . type Label Ġ== Ġ" Block " Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcollect En closing Class (): ĠEn closing Element < G um TreeNode >? Ġ= Ġextract With Logger ( logger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġen closing Node Ġ= Ġget En closing Class Node ( root . parent ) Ġ?: Ġreturn @ extract With Logger Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġen closing Node . getChild OfType ( Type Labels . simple Name )?. token ?. original ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġwhen Ġ( enc lo sing Node . type Label ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType Labels . type Declaration Ġ-> ĠEn closing ElementType . Class ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType Labels . enum Declaration Ġ-> ĠEn closing ElementType . Enum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" No Ġen closing Ġelement Ġtype Ġfound Ġfor Ġ${ enc lo sing Node . type Label }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠEn closing Element ( type , Ġname , Ġen closing Node ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget En closing Class Node ( node : ĠG um TreeNode ?): ĠG um TreeNode ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( node Ġ== Ġnull Ġ|| Ġnode . type Label Ġin ĠType Labels . possible En closing Elements ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnode ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġget En closing Class Node ( node . parent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcollect Parameters (): ĠList < Function Info Parameter > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġroot . getChildren OfType ( Type Labels . single Variable Declaration ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparams . map Ġ{ Ġnode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Info Parameter ( node . getElement Name (), Ġnode . getElement Type ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠG um TreeNode . getElement Name (): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġget Child OfType ( Type Labels . simple Name )?. token ?. original Ġ?: Ġerror (" No Ġname Ġfound Ġfor Ġelement ") ĊĊĠĠĠ Ġprivate Ġfun ĠG um TreeNode . getElement Type (): ĠString ? Ġ= Ġchildren . first OrNull Ġ{ Ġit . is Type Node () Ġ} ?. pre Order () ĊĠĠĠĠĠĠĠ Ġ? . map NotNull Ġ{ Ġif Ġ( it . type Label Ġ== ĠType Labels . array Dimensions ) Ġ" []" Ġelse Ġit . token . original Ġ} ĊĠĠĠĠĠĠĠ Ġ? . join ToString ( separator Ġ= Ġ"") ĊĊĠĠĠ Ġprivate Ġfun ĠG um TreeNode . is Type Node () Ġ= Ġtype Label . endsWith (" Type ") ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġobject ĠType Labels Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval Ġarray Type Ġ= Ġ" ArrayType " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval Ġarray Dimensions Ġ= Ġ" Dimension " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval Ġsimple Name Ġ= Ġ" Simple Name " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval Ġtype Declaration Ġ= Ġ" Type Declaration " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval Ġenum Declaration Ġ= Ġ" Enum Declaration " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpossible En closing Elements Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Declaration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenum Declaration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval Ġsingle Variable Declaration Ġ= Ġ" Single Variable Declaration " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ