package Ġch . u zh . ifi . se al . sm r . so a . evaluation . comments Ċ Ċ import Ġorg . apache . logging . log 4 j . Log Manager Ċ import Ġorg . eclipse . jdt . core . dom .* Ċ Ċ private Ġval Ġlog Ġ= ĠLog Manager . getLogger () Ċ Ċ class ĠComment Visitor ( private Ġvar Ġcompilation Unit : ĠCompilation Unit , Ġprivate Ġval Ġsource : ĠList < String >, Ġprivate Ġval Ġsource File : ĠString , Ġprivate Ġval Ġproject : ĠString ) Ġ: ĠAST Visitor () Ġ{ ĊĠĠĠ Ġval Ġmethod Names Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠ Ġoverride Ġfun Ġvisit ( node : ĠLine Comment ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġstart LineNumber Ġ= Ġcompilation Unit . get LineNumber ( node . start Position ) Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġline Comment Ġ= Ġsource [ start LineNumber ]. trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck ( line Comment , Ġnode , Ġstart LineNumber ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit ( node : ĠBlock Comment ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart LineNumber Ġ= Ġcompilation Unit . get LineNumber ( node . start Position ) Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġend LineNumber Ġ= Ġcompilation Unit . get LineNumber ( node . start Position Ġ+ Ġnode . length ) Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( line Count Ġin Ġstart LineNumber .. end LineNumber ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Comment Line Ġ= Ġsource [ line Count ]. trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( block Comment Line , Ġnode , Ġline Count ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck ( text : ĠString , Ġnode : ĠAST Node , ĠlineNumber : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( text . contains ("@ Benchmark ")) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent LineNumber Ġ= ĠlineNumber ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( current LineNumber Ġ< Ġsource . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Line Ġ= Ġsource [ current LineNumber ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Line . contains (" public ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġcurrent Line . substring Before (' (' ). substring After Last (' Ġ') ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" [$ project ] Ġcannot Ġextract Ġmethod Ġname Ġfor Ġline Ġ$ line Number Ġin Ġfile Ġ$ source File ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Names . add ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent LineNumber ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }