package Ġch . u zh . ifi . se al . bench er . analysis . finder . jdt Ċ Ċ import Ġch . u zh . ifi . se al . bench er . analysis . finder . shared . Bench Class Ċ import Ġch . u zh . ifi . se al . bench er . analysis . finder . shared . State Object Manager Ċ import Ġorg . eclipse . jdt . core . dom . AST Visitor Ċ import Ġorg . eclipse . jdt . core . dom . Annotation Ċ import Ġorg . eclipse . jdt . core . dom . Field Declaration Ċ import Ġorg . eclipse . jdt . core . dom . Type Declaration Ċ Ċ abstract Ġclass ĠJ dt Bench Abstract Class Visitor ( som : ĠState Object Manager ? Ġ= Ġnull ) Ġ: ĠAST Visitor () Ġ{ ĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġfully Qualified ClassName : ĠString ĊĠĠĠ Ġprotected Ġval Ġbench Class Ġ= ĠB ench Class ( som ) ĊĊĠĠĠ Ġ// Ġsub Ġvisitor ĊĠĠĠ Ġprotected Ġval Ġf vs : ĠMutable List < J dt Bench Field Visitor > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġprotected Ġfun Ġis F qn Init () Ġ= Ġ:: fully Qualified ClassName . isInitialized ĊĊĠĠĠ Ġoverride Ġfun Ġvisit ( node : ĠType Declaration ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfully Qualified ClassName Ġ= ĠFull y QualifiedName Helper . get ClassName ( node ) ĊĊĠĠĠĠĠĠĠ Ġnode . fields . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Field ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnode . modifiers (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠAnnotation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Annotation ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbf Ġ= Ġf vs . map Ġ{ Ġit . bench Field Ġ} ĊĠĠĠĠĠĠĠ Ġbench Class . set J mh Params ( bf ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġvisit Field ( node : ĠField Declaration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfv Ġ= ĠJ dt Bench Field Visitor () ĊĠĠĠĠĠĠĠ Ġnode . accept ( fv ) ĊĠĠĠĠĠĠĠ Ġf vs . add ( fv ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġvisit Annotation ( node : ĠAnnotation ) Ċ }