import Ġcom . github . jav ap ar ser . Java Parser Ċ import Ġcom . github . jav ap ar ser . ast . body . Method Declaration Ċ import Ġcom . github . kit tin un f . fuel . core . Response Deserial izable Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġcommon .* Ċ import Ġdata . Project Model Ċ import Ġdata . Repository Ċ import Ġdata . SourceFile Ċ import Ġgit . Cl oner Ċ import Ġgit . Commit Extractor Ċ import Ġjavafx . beans . binding . String Binding Ċ import Ġml . Cluster Ċ import Ġml . K means Ċ import Ġml . Node Ċ import Ġnet . Project Extractor Ċ import Ġnew data . Count Map Ċ import Ġnew data . Project Ċ import Ġnew data . Source An al yst Ċ import Ġnew data . Source Data Generator Ċ import Ġn lp . Pre Processor Ċ import Ġopen nlp . tools . cmdline . post ag . POS Model Loader Ċ import Ġopen nlp . tools . post ag . POST agger ME Ċ import Ġorg . know m . x chart . Bitmap Encoder Ċ import Ġorg . know m . x chart . Swing Wrapper Ċ import Ġorg . know m . x chart . XY Chart Builder Ċ import Ġorg . know m . x chart . style . St y ler Ċ import Ġorg . t art ar us . snow ball . ext . english Stem mer Ċ import Ġv op . DataManager Ċ import Ġv op . to Pair List Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ import Ġkotlin . collections . HashMap ĊĊ Ċ class ĠMain Ċ { ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠDF _ MAP Ġ: ĠHashMap < String , ĠInt > ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠFILTER _ WORD Ġ: ĠHashSet < String > ĊĠĠĠ Ġ} Ċ } Ċ // ìĨĮ ìĬ¤ ĠíĮĮìĿ¼ Ġbag Ġof Ġwords Ċ // count Ġof Ġlist , Ġcount Ġof Ġset Ċ // count Ġof Ġline Ċ fun ĠFile . to Save File (): ĠFile Ġ{ ĊĠĠĠ Ġreturn ĠPaths . get ( this . path . replace (" Research \\ Repository ", Ġ" Research \\ data "), ĠNAME _ PROJECT _ MODEL ). to File () Ċ } Ċ Ċ fun Ġprint All Clone Command () Ġ{ ĊĠĠĠ Ġval Ġclone Dir Ġ= Ġ" E :/ Repository "; ĊĠĠĠ Ġval Ġmap : ĠHashMap < String , ĠRepository > Ġ= ĠGson (). fromJson ( File ( PATH _ PROJECT _ MAP ). read Text (), Ġobject Ġ: ĠType Token < HashMap < String , ĠRepository >>() Ġ{} . type ) ĊĊĠĠĠ Ġprintln (" total Ġ: Ġ${ map . size }") ĊĠĠĠ Ġmap . values . forEach Ġ{ Ġtarget Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( target . language Ġ!= Ġnull Ġ&& Ġtarget . language . equals (" Java ") Ġ&& Ġtarget . size Ġ< Ġ 2 0 4 8 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġ"$ clone Dir /${ target . full _ name }" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! File ( path ). exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcmd Ġ= Ġ" git Ġclone Ġ${ target . clone _ url } Ġ${ path }"; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( cmd ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġload All Project Model File ( name : ĠString ): ĠSequence < File > Ġ{ ĊĠĠĠ Ġreturn ĠFile ( PATH _ DATA ). walk (). filter Ġ{ ĊĠĠĠĠĠĠĠ Ġit . name . equals ( name ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġsearch New ( target : String , Ġquery : String , Ġsave File : File , Ġk : Int Ġ= Ġ 1 0 0 0 ) Ċ { ĊĠĠĠ Ġval Ġresult : ĠSorted Set < Pair < String , ĠDouble >> Ġ= Ġsorted Set Of ( compare By Ġ{ Ġit . second Ġ}) ĊĠĠĠ Ġval Ġanal yst Ġ= ĠSource An al yst ( File ( query )) ĊĠĠĠ Ġanal yst . analysis () ĊĠĠĠ Ġval Ġquery Map Ġ= Ġanal yst . source File . tf Id f Map () ĊĠĠĠ Ġval ĠstartTime Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠ Ġload All Project Model File ( target ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject . load ( it ) ĊĊĠĠĠĠĠĠĠ Ġproject . source List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Map Ġ= Ġsource . tf Id f Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġcos ine Distance ( query Map , Ġsource Map ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . size Ġ< Ġk ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Pair ( source . path , Ġdistance )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġresult . last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last . second Ġ> Ġdistance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . remove ( last ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Pair ( source . path , Ġdistance )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" elapsed Ġ: Ġ${ System . currentTimeMillis () Ġ- ĠstartTime }") ĊĊĠĠĠ Ġsave File . print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠ Ġit . print ( Gson Builder (). set Pretty Print ing (). create (). toJson ( result )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġcos ine Distance ( v 1 : HashMap < String , ĠDouble >, Ġv 2 : HashMap < String , ĠDouble >) Ġ: ĠDouble Ċ { ĊĠĠĠ Ġif Ġ( v 1 Ġ!= Ġnull Ġ&& Ġv 2 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġboth Ġ= Ġv 1 . keys . to HashSet () ĊĠĠĠĠĠĠĠ Ġboth . retain All ( v 2 . keys . to HashSet ()) ĊĠĠĠĠĠĠĠ Ġvar Ġs cl ar Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġvar Ġnorm 1 Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġvar Ġnorm 2 Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġboth ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs cl ar Ġ+= Ġv 1 . get ( k ) !! Ġ* Ġv 2 . get ( k ) !! ĊĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġv 1 . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnorm 1 Ġ+= Ġv 1 . get ( k ) !! Ġ* Ġv 1 . get ( k ) !! ĊĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġv 2 . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnorm 2 Ġ+= Ġv 2 . get ( k ) !! Ġ* Ġv 2 . get ( k ) !! ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġs cl ar Ġ/ ĠMath . sqrt ( norm 1 Ġ* Ġnorm 2 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( result . isNaN ()) Ġ 1 . 0 Ġelse Ġ 1 . 0 Ġ- Ġresult ĊĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠ Ġreturn Ġ 1 . 0 Ċ } Ċ Ċ fun Ġsearch Test ( query : ĠFile , Ġsave File : ĠFile , Ġid f Map : ĠHashMap < String , ĠInt >, Ġk : ĠInt Ġ= Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠ Ġval ĠstartTime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠ Ġval Ġtarget Ġ= ĠPre Processor ( query . read Text ()). to SourceFile ( query . path ) ĊĠĠĠ Ġval Ġnode Ġ= ĠNode (" query ", Ġtarget . get Merged Map () !!. tf idf Doc ( idf Map )) ĊĠĠĠ Ġval Ġresult : ĠSorted Set < Pair < String , ĠDouble >> Ġ= Ġsorted Set Of ( compare By Descending Ġ{ Ġit . second Ġ}) ĊĊĠĠĠ Ġload All Project Model File ( NAME _ PROJECT _ MODEL _ CLEAN ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject Model . load ( it ) ĊĠĠĠĠĠĠĠ Ġproject . source List . map Ġ{ ĠNode ( it . path , Ġit . get Merged Map () !!. tf idf Doc ( idf Map )) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . size Ġ< Ġk ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Pair ( it . fileName , Ġit . distance To ( node ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġresult . last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġit . distance To ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last . second Ġ< Ġdistance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . remove ( last ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Pair ( it . fileName , Ġdistance )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" elapsed Ġ: Ġ${ System . currentTimeMillis () Ġ- ĠstartTime }") ĊĊĠĠĠ Ġsave File . print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠ Ġit . print ( Gson Builder (). set Pretty Print ing (). create (). toJson ( result )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġanalysis () Ġ{ ĊĠĠĠ Ġval Ġdf Map : ĠHashMap < String , ĠLong > Ġ= ĠGson (). fromJson ( File (" df _ map . json "). read Text (), Ġobject Ġ: ĠType Token < HashMap < String , ĠLong >>() Ġ{} . type ) ĊĠĠĠ Ġval Ġpf Map : ĠHashMap < String , ĠLong > Ġ= ĠGson (). fromJson ( File (" pf _ map . json "). read Text (), Ġobject Ġ: ĠType Token < HashMap < String , ĠLong >>() Ġ{} . type ) ĊĊĠĠĠ Ġprintln ( df Map . filter Ġ{ Ġit . value Ġ> Ġ 2 0 Ġ}. size ) ĊĊĠĠĠ Ġreturn ĊĊĠĠĠ Ġprintln ("${ df Map . size } Ġ/ Ġ${ pf Map . size }") ĊĠĠĠ Ġval Ġfile Count Limit Ġ= Ġ( 4 0 0 0 0 0 0 Ġ* Ġ 0 . 1 5 ). toInt () Ġ// Ġ 1 0 % ĊĠĠĠ Ġval Ġdiff Ġ= Ġ( 4 0 0 0 0 0 0 Ġ* Ġ 0 . 0 1 ). toInt () Ġ// Ġ 1 % ĊĠĠĠ Ġval Ġproject Count Ġ= Ġ 2 8 0 0 0 ĊĊĠĠĠ Ġval Ġthreshold List Ġ= Ġdiff .. file Count Limit Ġstep Ġdiff ĊĠĠĠ Ġval Ġcount List : ĠMutable List < Int > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġthreshold List . forEach Ġ{ Ġlimit Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġdf Map . filter Ġ{ Ġit . value Ġ> Ġlimit Ġ}. size ĊĠĠĠĠĠĠĠ Ġcount List . add ( size ) ĊĠĠĠĠĠĠĠ Ġprintln ("$ limit Ġ: Ġ$ size ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġchart Ġ= ĠXY Chart Builder (). width ( 8 0 0 ). height ( 6 0 0 ). title (" Title "). xAxis Title (" threshold "). yAxis Title (" number Ġof Ġword "). theme ( St y ler . Chart Theme . Mat lab ). build () ĊĠĠĠ Ġchart . sty ler . set Marker Size ( 5 ) ĊĠĠĠ Ġchart . sty ler . set Legend Visible ( false ) ĊĠĠĠ Ġchart . sty ler . set Legend Position ( St y ler . Legend Position . Inside NW ) ĊĠĠĠ Ġchart . sty ler . set Chart Title Visible ( false ) ĊĊĠĠĠ Ġchart . add Series (" com ", Ġthreshold List . toList (), Ġcount List ) ĊĊĠĠĠ ĠSw ing Wrapper ( chart ). display Chart () Ċ } ĊĊ Ċ fun Ġanalysis 1 ( limit : ĠInt Ġ= Ġ 0 , Ġthr : ĠInt Ġ= Ġ 0 , Ġsuffix : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġsrc Len List : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġword Len List : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġword Set : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĊĠĠĠ Ġval Ġsrc Word Len List : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġsrc Word Set : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĊĠĠĠ Ġval Ġcom Word Len List : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġcom Word Set : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĊĠĠĠ Ġval Ġadd Src Len List : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġadd Com Len List : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġvar Ġsrc Len Ġ= Ġ 0 . 0 ; ĊĠĠĠ Ġvar Ġp Src Len Ġ= Ġ 0 . 0 ; ĊĊĠĠĠ ĠFile ( PATH _ DATA ). walk Top Down (). filter Ġ{ ĊĠĠĠĠĠĠĠ Ġit . name . equals ( NAME _ PROJECT _ MODEL _ CLEAN ) ĊĠĠĠ Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject Model . load ( it ) ĊĠĠĠĠĠĠĠ Ġval Ġproject Word Set : ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġval Ġproject Src Word Set : ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġval Ġproject Com Word Set : ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĊĠĠĠĠĠĠĠ Ġproject Word Set . clear () ĊĠĠĠĠĠĠĠ Ġproject Src Word Set . clear () ĊĠĠĠĠĠĠĠ Ġproject Com Word Set . clear () ĊĊĠĠĠĠĠĠĠ Ġproject . source List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . word Map . get ( KEY _ COMMENT )?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . value Ġ> Ġthr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġit . key ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! project Word Set . contains ( key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Word Set . add ( key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! project Com Word Set . contains ( key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Com Word Set . add ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . word Map . get ( KEY _ SOURCE )?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . value Ġ> Ġthr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġit . key ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! project Word Set . contains ( key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Word Set . add ( key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! project Src Word Set . contains ( key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Src Word Set . add ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Len Ġ+= Ġit . word Map Size () Ġ/ Ġ 1 0 0 0 0 0 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject Com Word Set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( com Word Set . containsKey ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom Word Set . set ( it , Ġcom Word Set . get ( it ) !! Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom Word Set . put ( it , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject Src Word Set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( src Word Set . containsKey ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Word Set . set ( it , Ġsrc Word Set . get ( it ) !! Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Word Set . put ( it , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject Word Set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( word Set . containsKey ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword Set . set ( it , Ġword Set . get ( it ) !! Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword Set . put ( it , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( src Len Ġ- Ġp Src Len Ġ>= Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" add Ġ${ src Len }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpre Src Len Ġ= Ġif Ġ( src Word Len List . isEmpty ()) Ġ 0 . 0 Ġelse Ġsrc Word Len List . last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpre Com Len Ġ= Ġif Ġ( com Word Len List . isEmpty ()) Ġ 0 . 0 Ġelse Ġcom Word Len List . last () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġp Src Len Ġ= Ġsrc Len ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Len List . add ( src Len ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġword Len List . add ( word Set . filter Ġ{ Ġit . value Ġ>= Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Word Len List . add ( src Word Set . filter Ġ{ Ġit . value Ġ>= Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcom Word Len List . add ( com Word Set . filter Ġ{ Ġit . value Ġ>= Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Src Len List . add ( src Word Len List . last () Ġ- Ġpre Src Len ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Com Len List . add ( com Word Len List . last () Ġ- Ġpre Com Len ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" last Ġ${ src Len . toInt () }") ĊĠĠĠ Ġval Ġpre Src Len Ġ= Ġsrc Word Len List . last () ĊĠĠĠ Ġval Ġpre Com Len Ġ= Ġcom Word Len List . last () ĊĊĠĠĠ Ġp Src Len Ġ= Ġsrc Len ĊĠĠĠ Ġsrc Len List . add ( src Len ) ĊĠĠĠ Ġword Len List . add ( word Set . filter Ġ{ Ġit . value Ġ>= Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠ Ġsrc Word Len List . add ( src Word Set . filter Ġ{ Ġit . value Ġ>= Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠ Ġcom Word Len List . add ( com Word Set . filter Ġ{ Ġit . value Ġ>= Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠ Ġadd Src Len List . add ( src Word Len List . last () Ġ- Ġpre Src Len ) ĊĠĠĠ Ġadd Com Len List . add ( com Word Len List . last () Ġ- Ġpre Com Len ) Ċ // ĊĠĠĠ Ġval Ġchart Ġ= ĠXY Chart Builder (). width ( 8 0 0 ). height ( 6 0 0 ). title (" Title "). xAxis Title (" length Ġof Ġwords Ġin Ġsource Ġcode Ġ( m ) "). yAxis Title (" size Ġof Ġword set Ġ( k ) "). theme ( St y ler . Chart Theme . Mat lab ). build () ĊĠĠĠ Ġchart . sty ler . set Marker Size ( 5 ) ĊĠĠĠ Ġchart . sty ler . set Legend Position ( St y ler . Legend Position . Inside NW ) ĊĠĠĠ Ġchart . sty ler . set Chart Title Visible ( false ) ĊĊĠĠĠ Ġchart . add Series (" src + com ", Ġsrc Len List . toDouble Array (), Ġword Len List . toDouble Array ()) ĊĠĠĠ Ġchart . add Series (" src ", Ġsrc Len List . toDouble Array (), Ġsrc Word Len List . toDouble Array ()) ĊĠĠĠ Ġchart . add Series (" com ", Ġsrc Len List . toDouble Array (), Ġcom Word Len List . toDouble Array ()) Ċ Ċ // ĠĠĠ ĠSw ing Wrapper ( chart ). display Chart () ĊĠĠĠ Ġval Ġresult Dir Ġ= Ġ" C :\\ Research \\ Result " ĊĊĠĠĠ ĠBitmap Encoder . save Bitmap With DPI ( chart , Ġ"$ result Dir \\ ${ limit }_${ suffix }. png ", ĠBitmap Encoder . Bitmap Format . PNG , Ġ 2 0 0 ); ĊĊĠĠĠ ĠFile ( result Dir , Ġ"${ limit }_ src Word Set _${ suffix }. json "). print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠ Ġit . print ( Gson Builder (). set Pretty Print ing (). create (). toJson ( src Word Set . filter Ġ{ Ġit . value Ġ> Ġlimit Ġ}. toList (). sorted By Ġ{ Ġit . second Ġ}. reversed ())) ĊĠĠĠ Ġ} ĊĠĠĠ ĠFile ( result Dir , Ġ"${ limit }_ com Word Set _${ suffix }. json "). print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠ Ġit . print ( Gson Builder (). set Pretty Print ing (). create (). toJson ( com Word Set . filter Ġ{ Ġit . value Ġ> Ġlimit Ġ}. toList (). sorted By Ġ{ Ġit . second Ġ}. reversed ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġchart 2 Ġ= ĠXY Chart Builder (). width ( 8 0 0 ). height ( 6 0 0 ). title (" Title "). xAxis Title (" length Ġof Ġwords Ġin Ġsource Ġcode Ġ( m ) "). yAxis Title (" size Ġof Ġword set Ġ( k ) "). theme ( St y ler . Chart Theme . Mat lab ). build () ĊĠĠĠ Ġchart . sty ler . set Marker Size ( 5 ) ĊĠĠĠ Ġchart . sty ler . set Legend Position ( St y ler . Legend Position . Inside NW ) ĊĠĠĠ Ġchart . sty ler . set Chart Title Visible ( false ) ĊĊĠĠĠ Ġchart 2 . add Series (" add - src ", Ġsrc Len List . toDouble Array (), Ġadd Src Len List . toDouble Array ()) ĊĠĠĠ Ġchart 2 . add Series (" add - com ", Ġsrc Len List . toDouble Array (), Ġadd Com Len List . toDouble Array ()) ĊĊĠĠĠ ĠBitmap Encoder . save Bitmap With DPI ( chart 2 , Ġ"$ result Dir \\ ${ limit }_${ suffix }_ add . png ", ĠBitmap Encoder . Bitmap Format . PNG , Ġ 2 0 0 ); Ċ } Ċ Ċ fun Ġclean SourceFile ( source : ĠSource File ) Ġ{ ĊĠĠĠ Ġsource . word Map . values . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġiter Ġ= Ġit . iterator () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( iter . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġiter . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġvalue . key ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key . length Ġ<= Ġ 2 Ġ|| Ġkey . length Ġ>= Ġ 2 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiter . remove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġprint Base Info () Ġ{ ĊĠĠĠ Ġvar Ġtotal Src Len : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġtotal Com Len : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġtotal File Count : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġproject Count Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġtotal Word Count : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġload All Project Model File ( NAME _ PROJECT _ MODEL _ CLEAN ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject Model . load ( it ); ĊĊĠĠĠĠĠĠĠ Ġproject . source List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal File Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Com Len Ġ+= Ġit . com Len ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Src Len Ġ+= Ġit . src Len ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Word Count Ġ+= Ġit . word Map Size () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ++ project Count ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" src ĠLen Ġ: Ġ$ total Src Len Ġ/ Ġcom ĠLen Ġ: Ġ$ total Com Len Ġ/ Ġfile Count Ġ: Ġ$ total File Count Ġ/ Ġproject ĠCount Ġ: Ġ$ project Count Ġ/ Ġword Count Ġ: Ġ$ total Word Count ") Ċ } Ċ Ċ fun Ġclean Project ( root : ĠFile ) Ġ{ ĊĠĠĠ Ġprintln ("[ clean Project ] ${ root . path }") ĊĠĠĠ Ġroot . walk Top Down (). filter Ġ{ ĊĠĠĠĠĠĠĠ Ġit . isFile Ġ&& Ġ( it . name Without Extension . length Ġ== Ġ 1 Ġ|| Ġ( it . name Without Extension . toLowerCase (). matches ( Regex (" r | package - info "))) Ġ|| Ġ(! it . path . contains (". git ") Ġ&& Ġ! it . extension . equals (" java ") Ġ&& Ġ! it . extension . equals (" md "))) ĊĠĠĠ Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġprintln ( it . path ) ĊĠĠĠĠĠĠĠ Ġit . delete () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠgetAll Directories ( root : ĠFile ): ĠList < File > Ġ{ ĊĠĠĠ Ġreturn Ġroot . walk (). filter Ġ{ Ġit . isDirectory Ġ}. toList () Ċ } Ċ Ċ fun ĠgetAll Files Ext ( root : ĠFile , Ġext : ĠString ): ĠList < File > Ġ{ ĊĠĠĠ Ġreturn Ġroot . walk (). filter Ġ{ Ġit . extension . equals ( ext ) Ġ}. toList () Ċ } Ċ Ċ data Ġclass ĠSource ( val Ġpath : ĠString , Ġval Ġimports : ĠMutable List < String > Ġ= Ġmutable ListOf (), Ġval Ġmethod Calls : ĠMutable List < String > Ġ= Ġmutable ListOf ()) Ċ data Ġclass ĠProject ( val ĠprojectName : ĠString , Ġval Ġsource List : ĠMutable List < Source > Ġ= Ġmutable ListOf ()) Ċ Ċ fun Ġnorm Value ( map : ĠHashMap < String , ĠInt >, Ġid f Map : ĠHashMap < String , ĠInt >): ĠDouble Ġ{ ĊĠĠĠ Ġvar Ġnorm Ġ= Ġ 0 . 0 ; ĊĊĠĠĠ Ġmap . filter Ġ{ Ġid f Map . containsKey ( it . key ) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġnorm Ġ+= ĠMath . pow ( tf idf ( it , Ġid f Map ), Ġ 2 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġ 1 Ġ/ ĠMath . sqrt ( norm ) Ċ } Ċ Ċ fun Ġtf idf ( entry : ĠMap . Entry < String , ĠInt >, Ġid f Map : ĠHashMap < String , ĠInt >): ĠDouble Ġ{ ĊĠĠĠ Ġreturn Ġ( 1 Ġ+ ĠMath . log ( entry . value . toDouble ())) Ġ* ĠMath . log ( 1 Ġ+ Ġid f Map . size Ġ/ Ġid f Map . get ( entry . key ) !!. toDouble ()) Ċ } ĊĊ Ċ fun ĠHashMap < String , ĠInt >. tf idf Doc ( idf Map : ĠHashMap < String , ĠInt >): ĠHashMap < String , ĠDouble > Ġ{ ĊĠĠĠ Ġval Ġresult : ĠHashMap < String , ĠDouble > Ġ= Ġhash Map Of () ĊĊĠĠĠ Ġthis . filter Ġ{ Ġid f Map . containsKey ( it . key ) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġresult . put ( it . key , Ġtf idf ( it , Ġid f Map )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġresult ; Ċ } Ċ Ċ fun Ġcreate Id f Map ( size : ĠInt ): ĠHashMap < String , ĠDouble > Ġ{ ĊĠĠĠ Ġval Ġresult : ĠHashMap < String , ĠDouble > Ġ= Ġhash Map Of () ĊĊĠĠĠ Ġrun Ġextract @ Ġ{ ĊĠĠĠĠĠĠĠ Ġload All Project Model File ( NAME _ PROJECT _ MODEL _ CLEAN ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject Model . load ( it ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . source List . filter Ġ{ Ġit . word Count () Ġ> Ġ 2 0 Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . get Merged Map () !!. keys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . containsKey ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . set ( it , Ġresult . get ( it ) !! Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . put ( it , Ġ 1 . 0 ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Ġ> Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ extract ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ fun Ġget NodeList ( size : ĠInt , Ġid f Map : ĠHashMap < String , ĠInt >): ĠList < Node > Ġ{ ĊĠĠĠ Ġval Ġnode List : ĠMutable List < Node > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġrun Ġextract @ Ġ{ ĊĠĠĠĠĠĠĠ Ġload All Project Model File ( NAME _ PROJECT _ MODEL _ CLEAN ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject Model . load ( it ); ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode List . addAll ( project . source List . filter Ġ{ Ġit . word Count () Ġ> Ġ 1 0 Ġ}. map Ġ{ ĠNode ( it . path , Ġit . get Merged Map () !!. tf idf Doc ( idf Map )) Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node List . size Ġ> Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ extract ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" getNode Ġ${ node List . size }") ĊĊĠĠĠ Ġreturn Ġnode List Ċ } ĊĊ Ċ fun Ġk mean Cluster ing ( node List : ĠList < Node >) Ġ{ ĊĠĠĠ Ġval Ġk mean Ġ= ĠK means ( Math . sqrt ( node List . size . toDouble ()). toInt ()) ĊĠĠĠ Ġk mean . clustering ( node List ) ĊĠĠĠ ĠPaths . get ( PATH _ RESULT , Ġ" cluster ", Ġ" k mean _${ node List . size }. json "). to File (). print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠ Ġit . print ( Gson (). toJson ( k mean . clusters )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġsearch Top K ( k : ĠInt Ġ= Ġ 3 0 0 , Ġquery : ĠFile ): ĠSorted Set < Pair < String , ĠDouble >> Ġ{ ĊĠĠĠ Ġval Ġid f Map : ĠHashMap < String , ĠInt > Ġ= ĠGson (). fromJson ( File (" map _ idf . json "). read Text (), Ġobject Ġ: ĠType Token < HashMap < String , ĠInt >>() Ġ{} . type ); ĊĊĠĠĠ Ġval ĠstartTime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠ Ġprintln (" start ĠSearch Ġ$ startTime Ġ/ Ġ${ idf Map . size }") ĊĊĠĠĠ Ġval Ġtarget Ġ= ĠPre Processor ( query . read Text ()). to SourceFile ( query . path ) ĊĊĠĠĠ Ġval Ġnode Ġ= ĠNode (" query ", Ġtarget . get Merged Map () !!. tf idf Doc ( idf Map )) ĊĊĠĠĠ Ġval Ġresult : ĠSorted Set < Pair < String , ĠDouble >> Ġ= Ġsorted Set Of ( compare By Descending Ġ{ Ġit . second Ġ}) ĊĊĠĠĠ Ġload All Project Model File ( NAME _ PROJECT _ MODEL _ CLEAN ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject Model . load ( it ); ĊĊĠĠĠĠĠĠĠ Ġproject . source List . map Ġ{ ĠNode ( it . path , Ġit . get Merged Map () !!. tf idf Doc ( idf Map )) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . size Ġ< Ġk ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Pair ( it . fileName , Ġit . distance To ( node ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġresult . last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġit . distance To ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last . second Ġ< Ġdistance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . remove ( last ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Pair ( it . fileName , Ġdistance )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" elapsed Ġmilli Ġsec Ġ${ System . currentTimeMillis () Ġ- ĠstartTime }") ĊĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ fun Ġextract Target Commit () Ġ{ ĊĠĠĠ Ġval Ġtarget : ĠHashMap < String , ĠRepository > Ġ= ĠGson (). fromJson ( File (" target _ map . json "). read Text (), Ġobject Ġ: ĠType Token < HashMap < String , ĠRepository >>() Ġ{} . type ) ĊĊĠĠĠ Ġtarget . values . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" extract Ġ${ it . to Root (). path }") ĊĠĠĠĠĠĠĠ Ġval Ġsave File Ġ= ĠFile (" D :\\ git Exp _ game engine \\ ${ it . full _ name . replace ("/", Ġ"_ ") }. json ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( save File . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠCommit Extractor ( it . to Root (). path ). extract Commit MetaData ( 5 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġsave File . print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . print ( Gson (). toJson ( data )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġsearch In Clusters ( clusters : ĠList < Cluster >, Ġnode : ĠNode ) Ġ{ ĊĠĠĠ Ġvar Ġmatch Dis Ġ= ĠDouble . MIN _ VALUE ĊĠĠĠ Ġvar Ġmatch Idx Ġ= Ġ 0 ĊĠĠĠ Ġval ĠstartTime Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠ Ġclusters . forEach Indexed Ġ{ Ġindex , Ġcluster Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġdis Ġ= Ġnode . distance To ( cluster . getC ent roid ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( dis Ġ> Ġmatch Dis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatch Dis Ġ= Ġdis ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatch Idx Ġ= Ġindex ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġresult : ĠSorted Set < Pair < String , ĠDouble >> Ġ= Ġsorted Set Of ( compare By Descending Ġ{ Ġit . second Ġ}) ĊĊĠĠĠ Ġval Ġselected Cluster Ġ= Ġclusters . get ( match Idx ) ĊĊĠĠĠ Ġselected Cluster . member List . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= Ġselected Cluster . get Nodes (). get ( it ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result . size Ġ< Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Pair ( current . fileName , Ġcurrent . distance To ( node ))) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġresult . last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġcurrent . distance To ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last . second Ġ< Ġdistance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . remove ( last ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Pair ( current . fileName , Ġdistance )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" elapsed Ġ: Ġ${ System . currentTimeMillis () Ġ- ĠstartTime }") ĊĊĠĠĠ ĠPaths . get ( PATH _ RESULT , Ġ" search Clusters _${ node . fileName }. json "). to File (). print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠ Ġit . print ( Gson Builder (). set Pretty Print ing (). create (). toJson ( result )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġsearch In Node ( nodes : ĠList < Node >, Ġquery : ĠNode ) Ġ{ ĊĠĠĠ Ġval Ġresult : ĠSorted Set < Pair < String , ĠDouble >> Ġ= Ġsorted Set Of ( compare By Descending Ġ{ Ġit . second Ġ}) ĊĠĠĠ Ġval ĠstartTime Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠ Ġnodes . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result . size Ġ< Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Pair ( it . fileName , Ġit . distance To ( query ))) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġresult . last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġit . distance To ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last . second Ġ< Ġdistance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . remove ( last ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Pair ( it . fileName , Ġdistance )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" elapsed Ġ: Ġ${ System . currentTimeMillis () Ġ- ĠstartTime }") ĊĊĠĠĠ ĠPaths . get ( PATH _ RESULT , Ġ" search Seq _${ query . fileName }. json "). to File (). print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠ Ġit . print ( Gson Builder (). set Pretty Print ing (). create (). toJson ( result )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmb To KB ( mb : ĠInt ): ĠInt Ġ= Ġmb Ġ* Ġ 1 0 2 4 ; Ċ Ċ fun Ġclean All Project Models () Ġ{ ĊĠĠĠ Ġload All Project Model File ( NAME _ PROJECT _ MODEL ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠProject Model . load ( it ) ĊĊĠĠĠĠĠĠĠ Ġp . source List . parallel Stream (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclean SourceFile ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġregex Ġ= ĠRegex (" r . java | package - info . java | test ") ĊĠĠĠĠĠĠĠ Ġp . source List Ġ= Ġp . source List . filter Ġ{ Ġit . word Count () Ġ> Ġ 1 0 Ġ&& Ġ! regex . contains Match In ( it . path . toLowerCase ()) Ġ}. to Mutable List () ĊĊĠĠĠĠĠĠĠ Ġval Ġsave File Ġ= ĠFile ( it . path . replace ( NAME _ PROJECT _ MODEL , ĠNAME _ PROJECT _ MODEL _ CLEAN )) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( save File . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave File . delete () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( p . source List . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" saved Ġ${ save File . path }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave File . print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . print ( Gson (). toJson ( p )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ val Ġreg Camel Case Ġ= ĠRegex ( String . format ("% s |% s |% s ", ĊĠĠĠĠĠĠĠ Ġ"( ?< =[ A - Z ]) (? =[ A - Z ][ a - z ]) (\\ B )", ĊĠĠĠĠĠĠĠ Ġ"( ?< =[ ^ A - Z ]) (? =[ A - Z ]) (\\ B )", ĊĠĠĠĠĠĠĠ Ġ"( ?< =[ A - Za - z ]) (? =[ ^ A - Za - z ]) (\\ B )" Ċ )) Ċ Ċ fun Ġsimilarity ( a : ĠString , Ġb : ĠString ): ĠDouble Ġ{ ĊĠĠĠ Ġval Ġa Set Ġ= Ġreg Camel Case . replace ( a , Ġ" Ġ"). toLowerCase (). split (" Ġ"). to HashSet () ĊĠĠĠ Ġval Ġb Set Ġ= Ġreg Camel Case . replace ( b , Ġ" Ġ"). toLowerCase (). split (" Ġ"). to HashSet () ĊĊĠĠĠ Ġval Ġunion : ĠHashSet < String > Ġ= Ġhash Set Of () ĊĠĠĠ Ġunion . addAll ( a Set ) ĊĠĠĠ Ġunion . addAll ( b Set ) ĊĊĠĠĠ Ġa Set . retain All ( b Set ) Ġ// Ġêµ Ĳ ì§ĳ íķ© ĊĊĠĠĠ Ġval Ġinter Ġ= Ġa Set . size ĊĊĠĠĠ Ġreturn Ġinter . toDouble () Ġ/ Ġunion . size Ċ } Ċ Ċ fun Ġexpand able Score ( query Set : ĠList < String >, ĠresultSet : ĠList < String >, Ġthreshold : ĠDouble Ġ= Ġ 0 . 3 5 ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĊĠĠĠ ĠresultSet . forEach Ġ{ Ġcurrent Ġ-> ĊĠĠĠĠĠĠĠ Ġvar Ġmax Ġ= ĠDouble . MIN _ VALUE ĊĊĠĠĠĠĠĠĠ Ġquery Set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsim Ġ= Ġsimilarity ( current , Ġit ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sim Ġ> Ġmax ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Ġ= Ġsim ; ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( max Ġ<= Ġthreshold ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġcount Ċ } Ċ Ċ fun Ġmethod Sim ( query Set : ĠList < String >, ĠresultSet : ĠList < String >): ĠDouble Ġ{ ĊĠĠĠ Ġvar Ġtotal Max Ġ= Ġ 0 . 0 ĊĊĠĠĠ Ġquery Set . forEach Ġ{ Ġcurrent Ġ-> ĊĠĠĠĠĠĠĠ Ġvar Ġmax Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ ĠresultSet . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsim Ġ= Ġsimilarity ( current , Ġit ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sim Ġ> Ġmax ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Ġ= Ġsim ; ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtotal Max Ġ+= Ġmax ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġtotal Max Ġ/ Ġquery Set . size . toDouble () Ċ } Ċ Ċ fun Ġanalysis New 2 ( filter Set : Set < String >) Ġ{ ĊĠĠĠ Ġval Ġimports Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġc mt Class Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġc mt Method Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġc mt Var Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġname Param Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġname Method Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġname Class Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġname Var Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġtype Method Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġtype Param Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġtype Var Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĊĠĠĠ Ġload All Project Model File ( NAME _ PROJECT ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject . load ( it ) ĊĠĠĠĠĠĠĠ Ġproject . source List . forEach Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . comments Class Or Interface . filter Keys Ġ{ Ġfilter Set . contains ( it ) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc mt Class Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . comments Method . filter Keys Ġ{ Ġfilter Set . contains ( it ) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc mt Method Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . comments Variable . filter Keys Ġ{ Ġfilter Set . contains ( it ) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc mt Var Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . imports . filter Keys Ġ{ Ġfilter Set . contains ( it ) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimports Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Class Or Interface . filter Keys Ġ{ Ġfilter Set . contains ( it ) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Class Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Method . filter Keys Ġ{ Ġfilter Set . contains ( it ) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Method Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Variable . filter Keys Ġ{ Ġfilter Set . contains ( it ) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Var Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Parameter . filter Keys Ġ{ Ġfilter Set . contains ( it ) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Param Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Method . filter Keys Ġ{ Ġfilter Set . contains ( it ) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Method Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Parameter . filter Keys Ġ{ Ġfilter Set . contains ( it ) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Param Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Variable . filter Keys Ġ{ Ġfilter Set . contains ( it ) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Var Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln ("${ imports Map . size }/${ imports Map . values . sum ()}, ${ cmt Class Map . size }/${ cmt Class Map . values . sum ()}, Ġ${ cmt Var Map . size }/${ cmt Var Map . values . sum ()}, Ġ${ cmt Method Map . size }/${ cmt Method Map . values . sum () }") ĊĠĠĠ Ġprintln ("${ name Class Map . size }/${ name Class Map . values . sum ()}, Ġ${ name Method Map . size }/${ name Method Map . values . sum ()}, Ġ${ name Param Map . size }/${ name Param Map . values . sum ()}, Ġ${ name Var Map . size }/${ name Var Map . values . sum () }") ĊĠĠĠ Ġprintln ("${ type Method Map . size }/${ type Method Map . values . sum ()}, Ġ${ type Param Map . size }/${ type Param Map . values . sum ()}, Ġ${ type Var Map . size }/${ type Var Map . values . sum () }") Ċ } Ċ Ċ fun Ġtest () Ġ{ ĊĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġid f Map Ġ= ĠCount Map () ĊĠĠĠ Ġvar Ġdf Map Ġ= ĠCount Map () ĊĠĠĠ Ġvar Ġn df Map Ġ= ĠCount Map () ĊĠĠĠ Ġvar Ġt df Map Ġ= ĠCount Map () ĊĊĠĠĠ Ġload All Project Model File ( NAME _ PROJECT ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject . load ( it ) ĊĠĠĠĠĠĠĠ Ġval Ġi set Ġ: ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġval Ġset : ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġval Ġn set : ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġval Ġt set : ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĊĠĠĠĠĠĠĠ Ġproject . source List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi set . addAll ( it . imports . keys ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . addAll ( it . comments Class Or Interface . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . addAll ( it . comments Method . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . addAll ( it . comments Variable . keys ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġn set . addAll ( it . name Variable . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn set . addAll ( it . name Parameter . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn set . addAll ( it . name Method . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn set . addAll ( it . name Class Or Interface . keys ) Ċ // ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt set . addAll ( it . type Method . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt set . addAll ( it . type Parameter . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt set . addAll ( it . type Variable . keys ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ++ count ĊĊĊĠĠĠĠĠĠĠ Ġi set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid f Map . put ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdf Map . put ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġn set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn df Map . put ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġt set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt df Map . put ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln ("$ count Ġ/ Ġ${ idf Map . size } Ġ/ Ġ${ df Map . size } Ġ/ Ġ${ td f Map . size } Ġ/ Ġ${ nd f Map . size }") ĊĊĠĠĠ ĠFile (" res _ imports . json "). print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠ Ġit . print ( Gson Builder (). set Pretty Print ing (). create (). toJson ( idf Map . toList (). sorted By Descending Ġ{ Ġit . second Ġ})) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠFile (" res _ comment . json "). print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠ Ġit . print ( Gson Builder (). set Pretty Print ing (). create (). toJson ( df Map . toList (). sorted By Descending Ġ{ Ġit . second Ġ})) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠFile (" res _ type . json "). print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠ Ġit . print ( Gson Builder (). set Pretty Print ing (). create (). toJson ( td f Map . toList (). sorted By Descending Ġ{ Ġit . second Ġ})) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠFile (" res _ name . json "). print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠ Ġit . print ( Gson Builder (). set Pretty Print ing (). create (). toJson ( nd f Map . toList (). sorted By Descending Ġ{ Ġit . second Ġ})) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġanalysis New 3 () Ġ{ ĊĠĠĠ Ġval Ġimports Map = ĠCount Map () ĊĠĠĠ Ġval Ġc mt Class Map = ĠCount Map () ĊĠĠĠ Ġval Ġc mt Method Map = ĠCount Map () ĊĠĠĠ Ġval Ġc mt Var Map = ĠCount Map () ĊĠĠĠ Ġval Ġname Param Map = ĠCount Map () ĊĠĠĠ Ġval Ġname Method Map = ĠCount Map () ĊĠĠĠ Ġval Ġname Class Map = ĠCount Map () ĊĠĠĠ Ġval Ġname Var Map = ĠCount Map () ĊĠĠĠ Ġval Ġtype Method Map = ĠCount Map () ĊĠĠĠ Ġval Ġtype Param Map = ĠCount Map () ĊĠĠĠ Ġval Ġtype Var Map = ĠCount Map () ĊĊĠĠĠ Ġval Ġsrc Len List : ĠMutable List < Int > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġws C mt List 1 : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġws C mt List 2 : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġws C mt List 3 : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġws Name List 1 : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġws Name List 2 : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġws Name List 3 : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġws Name List 4 : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġws TypeList 1 : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġws TypeList 2 : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġws TypeList 3 : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġws Import List : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġvar Ġpre Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġcurrent Ġ= Ġ 0 ĊĠĠĠ Ġval Ġstep Ġ= Ġ 4 0 0 0 0 0 ĊĠĠĠ Ġval Ġlimit Ġ= Ġ 1 0 0 ĊĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĊĠĠĠ Ġval Ġpf Map Ġ= ĠCount Map () ĊĊĠĠĠ Ġload All Project Model File ( NAME _ PROJECT ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject . load ( it ) ĊĠĠĠĠĠĠĠ Ġval Ġimports Set Ġ: ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġval Ġc mt Class Set Ġ: ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġval Ġc mt Var Set Ġ: ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġval Ġc mt Method Set Ġ: ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġval Ġname Class Set Ġ: ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġval Ġname Param Set Ġ: ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġval Ġname Method Set Ġ: ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġval Ġname Var Set Ġ: ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġval Ġtype Method Set Ġ: ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġval Ġtype Param Set Ġ: ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġval Ġtype Var Set Ġ: ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĊĠĠĠĠĠĠĠ Ġ++ count ĊĊĠĠĠĠĠĠĠ Ġproject . source List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimports Set . addAll ( it . imports . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc mt Class Set . addAll ( it . comments Class Or Interface . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc mt Var Set . addAll ( it . comments Variable . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc mt Method Set . addAll ( it . comments Method . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Param Set . addAll ( it . name Parameter . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Method Set . addAll ( it . name Method . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Var Set . addAll ( it . name Variable . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Class Set . addAll ( it . name Class Or Interface . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Method Set . addAll ( it . type Method . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Param Set . addAll ( it . type Parameter . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Var Set . addAll ( it . type Variable . keys ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ++ current ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Ġ- Ġpre Ġ> Ġstep ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre Ġ= Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Len List . add ( current Ġ/ Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġws C mt List 1 . add ( cmt Class Map . filter Ġ{ Ġit . value Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġws C mt List 2 . add ( cmt Method Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġws C mt List 3 . add ( cmt Var Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġws Name List 1 . add ( name Class Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġws Name List 2 . add ( name Method Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġws Name List 3 . add ( name Param Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġws Name List 4 . add ( name Var Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġws TypeList 1 . add ( type Method Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġws TypeList 2 . add ( type Param Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġws TypeList 3 . add ( type Var Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġws Import List . add ( imports Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġimports Set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimports Map . put ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġc mt Class Set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc mt Class Map . put ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġc mt Var Set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc mt Var Map . put ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġc mt Method Set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc mt Method Map . put ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġname Param Set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Param Map . put ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġname Method Set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Method Map . put ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġname Var Set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Var Map . put ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġname Class Set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Class Map . put ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtype Method Set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Method Map . put ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtype Param Set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Param Map . put ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtype Var Set . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Var Map . put ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln ( count ) ĊĊĠĠĠ Ġif Ġ( current Ġ!= Ġpre ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpre Ġ= Ġcurrent ĊĠĠĠĠĠĠĠ Ġsrc Len List . add ( current Ġ/ Ġ 1 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġws C mt List 1 . add ( cmt Class Map . filter Ġ{ Ġit . value Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġws C mt List 2 . add ( cmt Method Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġws C mt List 3 . add ( cmt Var Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġws Name List 1 . add ( name Class Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġws Name List 2 . add ( name Method Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġws Name List 3 . add ( name Param Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġws Name List 4 . add ( name Var Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġws TypeList 1 . add ( type Method Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġws TypeList 2 . add ( type Param Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġws TypeList 3 . add ( type Var Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġws Import List . add ( imports Map . filter Ġ{ Ġit . value Ġ Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġchart Ġ= ĠXY Chart Builder (). width ( 8 0 0 ). height ( 6 0 0 ). title (" Title ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. xAxis Title ("# source Ġfile Ġ( k )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. yAxis Title (" size Ġof Ġword set Ġ( k ) "). theme ( St y ler . Chart Theme . Mat lab ). build () ĊĠĠĠ Ġchart . sty ler . set Marker Size ( 5 ) ĊĠĠĠ Ġchart . sty ler . set Legend Position ( St y ler . Legend Position . Inside NW ) ĊĠĠĠ Ġchart . sty ler . set Chart Title Visible ( false ) ĊĊĠĠĠ Ġchart . add Series (" comment _ class ", Ġsrc Len List , Ġws C mt List 1 ) ĊĠĠĠ Ġchart . add Series (" comment _ method ", Ġsrc Len List , Ġws C mt List 2 ) ĊĠĠĠ Ġchart . add Series (" comment _ var ", Ġsrc Len List , Ġws C mt List 3 ) ĊĊĠĠĠ ĠSw ing Wrapper ( chart ). display Chart () ĊĊĠĠĠ ĠBitmap Encoder . save Bitmap With DPI ( chart , ĠPaths . get ( PATH _ RESULT , Ġ" new _ analysis _ 1 . png "). toString (), ĠBitmap Encoder . Bitmap Format . PNG , Ġ 2 0 0 ); ĊĊĠĠĠ Ġval Ġchart 2 Ġ= ĠXY Chart Builder (). width ( 8 0 0 ). height ( 6 0 0 ). title (" Title ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. xAxis Title ("# source Ġfile Ġ( k )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. yAxis Title (" size Ġof Ġword set Ġ( k ) "). theme ( St y ler . Chart Theme . Mat lab ). build () ĊĠĠĠ Ġchart 2 . sty ler . set Marker Size ( 5 ) ĊĠĠĠ Ġchart 2 . sty ler . set Legend Position ( St y ler . Legend Position . Inside NW ) ĊĠĠĠ Ġchart 2 . sty ler . set Chart Title Visible ( false ) ĊĊĠĠĠ Ġchart 2 . add Series (" name _ class ", Ġsrc Len List , Ġws Name List 1 ) ĊĠĠĠ Ġchart 2 . add Series (" name _ method ", Ġsrc Len List , Ġws Name List 2 ) ĊĠĠĠ Ġchart 2 . add Series (" name _ param ", Ġsrc Len List , Ġws Name List 3 ) ĊĠĠĠ Ġchart 2 . add Series (" name _ value ", Ġsrc Len List , Ġws Name List 4 ) ĊĠĠĠ ĠSw ing Wrapper ( chart 2 ). display Chart () ĊĊĠĠĠ ĠBitmap Encoder . save Bitmap With DPI ( chart 2 , ĠPaths . get ( PATH _ RESULT , Ġ" new _ analysis _ 2 . png "). toString (), ĠBitmap Encoder . Bitmap Format . PNG , Ġ 2 0 0 ); ĊĊĠĠĠ Ġval Ġchart 3 Ġ= ĠXY Chart Builder (). width ( 8 0 0 ). height ( 6 0 0 ). title (" Title ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. xAxis Title ("# source Ġfile Ġ( k )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. yAxis Title (" size Ġof Ġword set Ġ( k ) "). theme ( St y ler . Chart Theme . Mat lab ). build () ĊĠĠĠ Ġchart 3 . sty ler . set Marker Size ( 5 ) ĊĠĠĠ Ġchart 3 . sty ler . set Legend Position ( St y ler . Legend Position . Inside NW ) ĊĠĠĠ Ġchart 3 . sty ler . set Chart Title Visible ( false ) ĊĊĠĠĠ Ġchart 3 . add Series (" type _ method ", Ġsrc Len List , Ġws TypeList 1 ) ĊĠĠĠ Ġchart 3 . add Series (" type _ param ", Ġsrc Len List , Ġws TypeList 2 ) ĊĠĠĠ Ġchart 3 . add Series (" type _ value ", Ġsrc Len List , Ġws TypeList 3 ) ĊĊĠĠĠ ĠSw ing Wrapper ( chart 3 ). display Chart () ĊĊĠĠĠ ĠBitmap Encoder . save Bitmap With DPI ( chart , ĠPaths . get ( PATH _ RESULT , Ġ" new _ analysis _ 3 . png "). toString (), ĠBitmap Encoder . Bitmap Format . PNG , Ġ 2 0 0 ); ĊĊĠĠĠ Ġval Ġchart 4 Ġ= ĠXY Chart Builder (). width ( 8 0 0 ). height ( 6 0 0 ). title (" Title ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. xAxis Title ("# source Ġfile Ġ( k )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. yAxis Title (" size Ġof Ġword set Ġ( k ) "). theme ( St y ler . Chart Theme . Mat lab ). build () ĊĠĠĠ Ġchart 4 . sty ler . set Marker Size ( 5 ) ĊĠĠĠ Ġchart 4 . sty ler . set Legend Position ( St y ler . Legend Position . Inside NW ) ĊĠĠĠ Ġchart 4 . sty ler . set Chart Title Visible ( false ) ĊĊĠĠĠ Ġchart 4 . add Series (" import ", Ġsrc Len List , Ġws Import List ) ĊĊĠĠĠ ĠSw ing Wrapper ( chart 4 ). display Chart () ĊĊĠĠĠ ĠBitmap Encoder . save Bitmap With DPI ( chart , ĠPaths . get ( PATH _ RESULT , Ġ" new _ analysis _ 3 . png "). toString (), ĠBitmap Encoder . Bitmap Format . PNG , Ġ 2 0 0 ); Ċ } Ċ Ċ fun Ġanalysis New () Ġ{ ĊĠĠĠ Ġval Ġimports Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġc mt Class Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġc mt Method Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġc mt Var Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġname Param Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġname Method Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġname Class Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġname Var Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġtype Method Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġtype Param Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠ Ġval Ġtype Var Map : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĊĠĠĠ Ġval Ġsrc Len List : ĠMutable List < Int > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġws C mt List : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġws Name List : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġws TypeList : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġval Ġws Import List : ĠMutable List < Double > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġvar Ġpre Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġcurrent Ġ= Ġ 0 ĊĠĠĠ Ġval Ġstep Ġ= Ġ 4 5 0 0 0 0 ĊĠĠĠ Ġval Ġlimit Ġ= Ġ 0 ĊĠĠĠ Ġval Ġdf Map Ġ= ĠCount Map () ĊĊĠĠĠ Ġload All Project Model File ( NAME _ PROJECT ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject . load ( it ) ĊĠĠĠĠĠĠĠ Ġval Ġset : ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĊĠĠĠĠĠĠĠ Ġproject . source List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . addAll ( it . comments Class Or Interface . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . comments Class Or Interface . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc mt Class Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . addAll ( it . comments Method . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . comments Method . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc mt Method Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . addAll ( it . comments Variable . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . comments Variable . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc mt Var Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . addAll ( it . imports . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . imports . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimports Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . addAll ( it . name Class Or Interface . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Class Or Interface . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Class Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . addAll ( it . name Method . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Method . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Method Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . addAll ( it . name Variable . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Variable . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Var Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . addAll ( it . name Parameter . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Parameter . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Param Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . addAll ( it . type Method . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Method . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Method Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . addAll ( it . type Parameter . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Parameter . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Param Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . addAll ( it . type Variable . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Variable . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Var Map . increase ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ++ current ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Ġ- Ġpre Ġ> Ġstep ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre Ġ= Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Len List . add ( current Ġ/ Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġws C mt List . add (( cmt Class Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size Ġ+ Ġc mt Method Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size Ġ+ Ġc mt Var Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size ) Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġws Name List . add (( name Class Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size Ġ+ Ġname Method Map . size Ġ+ Ġname Param Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size Ġ+ Ġname Var Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size ) Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġws TypeList . add (( type Method Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size Ġ+ Ġtype Param Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size Ġ+ Ġtype Var Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size ) Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġws Import List . add ( imports Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln ( set . size ) ĊĠĠĠĠĠĠĠ Ġset . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdf Map . put ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( current Ġ!= Ġpre ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpre Ġ= Ġcurrent ĊĠĠĠĠĠĠĠ Ġsrc Len List . add ( current Ġ/ Ġ 1 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġws C mt List . add (( cmt Class Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size Ġ+ Ġc mt Method Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size Ġ+ Ġc mt Var Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size ) Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġws Name List . add (( name Class Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size Ġ+ Ġname Method Map . size Ġ+ Ġname Param Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size Ġ+ Ġname Var Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size ) Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġws TypeList . add (( type Method Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size Ġ+ Ġtype Param Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size Ġ+ Ġtype Var Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size ) Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġws Import List . add ( imports Map . filter Ġ{ Ġdf Map . get OrDefault ( it . key , Ġ 0 ) Ġ> Ġlimit Ġ}. size Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġchart Ġ= ĠXY Chart Builder (). width ( 8 0 0 ). height ( 6 0 0 ). title (" Title ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. xAxis Title ("# source Ġfile Ġ( k )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. yAxis Title (" size Ġof Ġword set Ġ( k ) "). theme ( St y ler . Chart Theme . Mat lab ). build () ĊĠĠĠ Ġchart . sty ler . set Marker Size ( 5 ) ĊĠĠĠ Ġchart . sty ler . set Legend Position ( St y ler . Legend Position . Inside NW ) ĊĠĠĠ Ġchart . sty ler . set Chart Title Visible ( false ) ĊĊĠĠĠ Ġchart . add Series (" comment ", Ġsrc Len List , Ġws C mt List ) ĊĠĠĠ Ġchart . add Series (" type ", Ġsrc Len List , Ġws TypeList ) ĊĠĠĠ Ġchart . add Series (" name ", Ġsrc Len List , Ġws Name List ) ĊĠĠĠ Ġchart . add Series (" import ", Ġsrc Len List , Ġws Import List ) ĊĊĠĠĠ ĠSw ing Wrapper ( chart ). display Chart () ĊĊĠĠĠ ĠBitmap Encoder . save Bitmap With DPI ( chart , ĠPaths . get ( PATH _ RESULT , Ġ" new _ analysis . png "). toString (), ĠBitmap Encoder . Bitmap Format . PNG , Ġ 2 0 0 ); Ċ } ĊĊ Ċ val ĠT 1 Ġ= Ġ" E :\\ Repository \\ spring - projects \\ spring - framework \\ spring - core \\ src \\ main \\ java \\ org \\ springframework \\ util \\ StringUtils . java " Ġ// Ġ 5 1 Ċ val ĠT 2 Ġ= Ġ" E :\\ Repository \\ zx ing \\ zx ing \\ core \\ src \\ main \\ java \\ com \\ google \\ zx ing \\ common \\ detector \\ Math Utils . java " Ċ val ĠT 3 Ġ= Ġ" E :\\ Repository \\ zy uan ming \\ Music Man \\ src \\ org \\ ming \\ util \\ FileUtils . java " Ġ// Ġ 2 0 Ċ val ĠT 4 Ġ= Ġ" E :\\ Repository \\ spring - projects \\ spring - framework \\ spring - core \\ src \\ main \\ java \\ org \\ springframework \\ util \\ Base 6 4 Utils . java " Ċ val ĠT 5 Ġ= Ġ" E :\\ Repository \\ spring - projects \\ spring - framework \\ spring - core \\ src \\ main \\ java \\ org \\ springframework \\ util \\ Socket Utils . java " Ċ val ĠT 6 Ġ= Ġ" E :\\ Repository \\ google \\ gu ava \\ gu ava \\ src \\ com \\ google \\ common \\ base \\ Char Matcher . java " Ċ Ċ fun ĠHashMap < String , ĠInt >. increase ( key : ĠString , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( containsKey ( key )) ĊĠĠĠĠĠĠĠ Ġset ( key , Ġget ( key ) !! Ġ+ Ġvalue ) ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġput ( key , Ġvalue ) Ċ } Ċ Ċ fun Ġproject Info Filtering () Ċ { ĊĠĠĠ Ġval Ġfilter Set Ġ= ĠMain . DF _ MAP . keys . toSet () ĊĊĠĠĠ Ġload All Project Model File ( NAME _ PROJECT ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject . load ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . source List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . imports . keys . remove If { Ġ! filter Set . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Parameter . keys . remove If { Ġ! filter Set . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Variable . keys . remove If { Ġ! filter Set . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Method . keys . remove If { Ġ! filter Set . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . comments Method . keys . remove If { Ġ! filter Set . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . comments Class Or Interface . keys . remove If { Ġ! filter Set . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . comments Variable . keys . remove If { Ġ! filter Set . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Variable . keys . remove If { Ġ! filter Set . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Parameter . keys . remove If { Ġ! filter Set . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Method . keys . remove If { Ġ! filter Set . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Class Or Interface . keys . remove If { Ġ! filter Set . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . source List . remove If Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getAll Words (). size Ġ< Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsave File Ġ= ĠFile ( it . path . replace ( NAME _ PROJECT , ĠNAME _ PROJECT _ FILTER ED )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( project . source List . size Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave File . print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" CREATE Ġ- Ġ${ save File . path }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . print ( Gson (). toJson ( project )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( save File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" DEL Ġ- Ġ${ save File . path }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave File . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e : Exception ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" EXP CEPT ION Ġ- Ġ${ it . path }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġcreate DF Map ( target : String , Ġsave File : File ) Ċ { ĊĠĠĠ Ġval Ġdf Map Ġ= ĠCount Map () ĊĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĊĠĠĠ Ġload All Project Model File ( target ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject . load ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . source List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . imports . keys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf Map . put ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Method . keys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf Map . put ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Variable . keys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf Map . put ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Parameter . keys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf Map . put ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . comments Variable . keys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf Map . put ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . comments Class Or Interface . keys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf Map . put ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . comments Method . keys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf Map . put ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Class Or Interface . keys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf Map . put ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Method . keys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf Map . put ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Parameter . keys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf Map . put ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Variable . keys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf Map . put ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : Exception ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ it . path } Ġexception ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" Source ĠCount Ġ: Ġ$ count Ġdf Map Ġkeys Ġ: Ġ${ df Map . keys . size }") ĊĊĠĠĠ Ġsave File . print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠ Ġit . println ( Gson (). toJson ( df Map )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġeval SearchResult ( target : String , Ġresult File : File ) Ċ { ĊĠĠĠ Ġval Ġsearch Map : ĠSet < Pair < String , ĠDouble >> Ġ= ĠGson (). fromJson ( result File . read Text (), Ġobject Ġ: ĠType Token < Set < Pair < String , ĠDouble >> >() Ġ{} . type ) ĊĊĠĠĠ Ġval Ġquery Parser Ġ= ĠJava Parser . parse ( File ( target )) ĊĠĠĠ Ġval Ġset Ġ= Ġquery Parser . findAll ( Method Declaration :: class . java ). map Ġ{ Ġit . name . toString () Ġ}. to HashSet () ĊĊĠĠĠ Ġvar Ġmax ES Ġ= ĠInt . MIN _ VALUE ĊĠĠĠ Ġvar Ġmin ES Ġ= ĠInt . MAX _ VALUE ĊĠĠĠ Ġvar Ġtotal ES Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġmax Mas Ġ= ĠDouble . MIN _ VALUE ĊĠĠĠ Ġvar Ġmin Mas Ġ= ĠDouble . MAX _ VALUE ĊĠĠĠ Ġvar Ġtotal Mas Ġ= Ġ 0 . 0 ĊĠĠĠ Ġvar Ġsize Ġ= Ġ 5 0 ; ĊĊĠĠĠ Ġsearch Map . filter Ġ{ Ġ! it . first . equals ( target ) Ġ}. take ( 5 0 ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠJava Parser . parse ( File ( it . first )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Set Ġ= Ġparser . findAll ( Method Declaration :: class . java ). map Ġ{ Ġit . name . toString () Ġ}. toSet () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġes Ġ= Ġexpand able Score ( set . toList (), Ġcurrent Set . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġms Ġ= Ġmethod Sim ( set . toList (), Ġcurrent Set . toList ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( es Ġ> Ġmax ES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax ES Ġ= Ġes ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( es Ġ< Ġmin ES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin ES Ġ= Ġes ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ms Ġ> Ġmax Mas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Mas Ġ= Ġms ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ms Ġ< Ġmin Mas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Mas Ġ= Ġms ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Mas Ġ+= Ġms ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal ES Ġ+= Ġes ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize -- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("[ error ] ${ it . first }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln ("$ min ES Ġ/ Ġ$ max ES Ġ/ Ġ${ total ES Ġ/ Ġsize . toDouble ()} Ġ/ Ġ$ min Mas Ġ/ Ġ$ max Mas Ġ/ Ġ${ total Mas Ġ/ Ġsize }") Ċ } ĊĊ Ċ fun Ġload Project Map () Ġ: ĠHashMap < String , Repository > Ċ { ĊĠĠĠ Ġreturn ĠGson (). fromJson ( File ( PATH _ PROJECT _ MAP ). read Text (), Ġobject Ġ: ĠType Token < HashMap < String , ĠRepository >>() Ġ{} . type ) Ċ } Ċ val Ġstem mer Ġ= Ġenglish Stem mer () Ċ Ċ fun ĠString . preprocessing () Ġ: ĠList < String > Ċ { ĊĠĠĠ Ġvar Ġstr Ġ= ĠPre Processor . reg Camel Case . replace ( this ," Ġ") ĊĠĠĠ Ġstr Ġ= ĠPre Processor . reg Html . replace ( str , Ġ"") ĊĠĠĠ Ġstr Ġ= Ġcom . sun . deploy . util . StringUtils . trim Whitespace ( str ) ĊĊĠĠĠ Ġreturn ĠPre Processor . reg Non Al phanum . split ( str . toLowerCase ()). filter Ġ{ Ġit . length Ġ> Ġ 2 Ġ&& Ġit . length Ġ< Ġ 2 0 Ġ&& Ġ! Stop words . instance . contains ( it . toLowerCase ()) Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠ Ġstem mer . setCurrent ( it ) ĊĠĠĠĠĠĠĠ Ġstem mer . stem () ĊĠĠĠĠĠĠĠ Ġstem mer . current ĊĠĠĠ Ġ} Ċ } Ċ // Ċ // fun ĠString . preprocessing () Ġ: ĠString Ċ // { Ċ // ĠĠĠ Ġvar Ġstr Ġ= ĠPre Processor . reg Camel Case . replace ( this ," Ġ") Ċ // ĠĠĠ Ġstr Ġ= ĠPre Processor . reg Html . replace ( str , Ġ"") Ċ // ĠĠĠ Ġstr Ġ= Ġcom . sun . deploy . util . StringUtils . trim Whitespace ( str ) Ċ // Ċ // ĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () Ċ // ĠĠĠ ĠPre Processor . reg Non Al phanum . split ( str . toLowerCase ()). filter Ġ{ Ġit . length Ġ> Ġ 2 Ġ&& Ġit . length Ġ< Ġ 2 0 Ġ&& Ġ! Stop words . instance . contains ( it . toLowerCase ()) Ġ}. map Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġstem mer . setCurrent ( it ) Ċ // ĠĠĠĠĠĠĠ Ġstem mer . stem () Ċ // ĠĠĠĠĠĠĠ Ġstem mer . current Ċ // ĠĠĠ Ġ}. forEach Ġ{ Ġsb . append ( it Ġ+ Ġ' Ġ') Ġ} Ċ // Ċ // ĠĠĠ Ġreturn Ġsb . toString () Ċ //} Ċ Ċ fun Ġsrc File To Document ( src File : File ) Ġ: ĠString Ċ { ĊĠĠĠ Ġval Ġparser Ġ= ĠJava Parser . parse ( src File ) ĊĠĠĠ Ġvar Ġsen Ġ: ĠMutable List < String > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġparser . findAll ( Method Declaration :: class . java ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( it . comment . isPresent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsen . addAll ( it . comment . get (). toString (). preprocessing ()) ĊĊĠĠĠĠĠĠĠ Ġsen . addAll ( it . name AsString . preprocessing ()) ĊĊĠĠĠĠĠĠĠ Ġif ( it . body . isPresent ) ĊĠĠĠĠĠĠĠĠĠĠ Ġsen . addAll ( it . body . get (). toString (). preprocessing ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif ( sen . size Ġ<= Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĊĠĠĠ Ġreturn Ġsen . filter Ġ{ ĠMain . FILTER _ WORD . contains ( it ) Ġ}. join ToString (" Ġ") Ċ } Ċ Ċ data Ġclass ĠSource Doc Meta ( val Ġpath : String , Ġval Ġdoc : String ) Ċ Ċ fun Ġextract DataSet () Ċ { ĊĠĠĠ Ġval Ġtarget Ġ= Ġload Project Map (). filter Values Ġ{ Ġit . size Ġ< Ġmb To KB ( 2 0 4 8 ) Ġ}. values ĊĊĠĠĠ Ġval Ġregex Ġ= ĠRegex (" r . java | package - info . java | \\\\ test | test \\\\ | test . java ") Ċ // ĠĠĠ Ġval Ġgson Ġ= ĠGson Builder (). set Pretty Print ing (). create () ĊĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠ Ġtarget . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġit . to Root () ĊĠĠĠĠĠĠĠ Ġif (! root . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĊĠĠĠĠĠĠĠ Ġval Ġsources Ġ: ĠMutable List < Source Doc Meta > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġif ( root . exists ()) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . read All Files Ext ( root , Ġ" java "). filter Ġ{ Ġ! regex . contains Match In ( it . path . toLowerCase ()) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc File -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= Ġsrc File To Document ( src File ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( doc . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsources . add ( Source Doc Meta ( src File . name Without Extension , Ġdoc )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( e : Exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ src File . path } Ġexception ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsave File Ġ= ĠPaths . get ( PATH _ DOCS ," ${ it . full _ name . replace ("/ "," _ ") }. json "). to File () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave File . print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . print ( gson . toJson ( sources )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" created Ġ${ save File . path }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ċ } ĊĊ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĊĠĠĠ Ġprintln ( File ( T 1 ). to Pair List ()) ĊĊĠĠĠ Ġreturn ĊĠĠĠ ĠFile (" E :/ Repository "). list Files (). map Ġ{ Ġit . list Files () Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġit . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Manager . create ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ // ĠĠĠ Ġval Ġmap Ġ: ĠHashMap < String , ĠInt > Ġ= ĠGson (). fromJson ( File (" new _ df _ map . json "). read Text (), Ġobject : Type Token < HashMap < String , ĠInt >>() Ġ{} . type ) Ċ // ĠĠĠ Ġmap . values . remove If { Ċ // ĠĠĠĠĠĠĠ Ġit Ġ< Ġ 3 0 Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ ĠMain . FILTER _ WORD Ġ= Ġmap . keys . to HashSet () Ċ // Ċ // ĠĠĠ Ġextract DataSet () Ċ // ĠĠĠ Ġprintln ( src File To Document ( File ( T 1 ))) ĊĠĠĠ Ġreturn Ċ // ĠĠĠ Ġval Ġj Ġ= ĠJac card (); Ċ // ĠĠĠ Ġprintln ( j . similarity (" return Ġarray Ġempty ", Ġ" set Ġpreserve Ġreturned ")) Ċ // ĠĠĠ Ġreturn ĊĠĠĠ ĠMain . DF _ MAP Ġ= ĠGson (). fromJson ( File (" new _ df _ map . json "). read Text (), Ġobject : Type Token < HashMap < String , ĠInt >>() Ġ{} . type ) ĊĠĠĠ ĠMain . DF _ MAP . values . remove If { ĊĠĠĠĠĠĠĠ Ġit Ġ< Ġ 2 0 ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln ( Main . DF _ MAP . toList (). sorted By Descending Ġ{ Ġit . second Ġ}. take ( 1 0 0 0 )) ĊĊĠĠĠ Ġreturn ĊĠĠĠ Ġeval SearchResult ( T 1 , ĠPaths . get ( PATH _ RESULT , Ġ" search _ new _ t 1 _ om . json "). to File ()) ĊĠĠĠ Ġeval SearchResult ( T 2 , ĠPaths . get ( PATH _ RESULT , Ġ" search _ new _ t 2 _ om . json "). to File ()) ĊĠĠĠ Ġeval SearchResult ( T 3 , ĠPaths . get ( PATH _ RESULT , Ġ" search _ new _ t 3 _ om . json "). to File ()) ĊĠĠĠ Ġeval SearchResult ( T 4 , ĠPaths . get ( PATH _ RESULT , Ġ" search _ new _ t 4 _ om . json "). to File ()) ĊĠĠĠ Ġeval SearchResult ( T 5 , ĠPaths . get ( PATH _ RESULT , Ġ" search _ new _ t 5 _ om . json "). to File ()) ĊĠĠĠ Ġreturn ĊĠĠĠ Ġsearch New ( NAME _ PROJECT , ĠT 1 , ĠPaths . get ( PATH _ RESULT , Ġ" search _ new _ t 1 _ om . json "). to File ()) ĊĠĠĠ Ġsearch New ( NAME _ PROJECT , ĠT 2 , ĠPaths . get ( PATH _ RESULT , Ġ" search _ new _ t 2 _ om . json "). to File ()) ĊĠĠĠ Ġsearch New ( NAME _ PROJECT , ĠT 3 , ĠPaths . get ( PATH _ RESULT , Ġ" search _ new _ t 3 _ om . json "). to File ()) ĊĠĠĠ Ġsearch New ( NAME _ PROJECT , ĠT 4 , ĠPaths . get ( PATH _ RESULT , Ġ" search _ new _ t 4 _ om . json "). to File ()) ĊĠĠĠ Ġsearch New ( NAME _ PROJECT , ĠT 5 , ĠPaths . get ( PATH _ RESULT , Ġ" search _ new _ t 5 _ om . json "). to File ()) ĊĠĠĠ Ġreturn ĊĠĠĠ ĠSource Data Generator ( File ( T 1 )). generate () ĊĠĠĠ Ġreturn ĊĊĊĠĠĠ Ġreturn ĊĊ Ċ // Ċ // ĠĠĠ Ġproject Info Filtering () Ċ Ċ // ĠĠĠ Ġsearch New ( NAME _ PROJECT _ FILTER ED , ĠT 1 , ĠPaths . get ( PATH _ RESULT , Ġ" new _ search _ T 1 . json "). to File ()) Ċ // ĠĠĠ Ġsearch New ( NAME _ PROJECT _ FILTER ED , ĠT 2 , ĠPaths . get ( PATH _ RESULT , Ġ" new _ search _ T 2 . json "). to File ()) Ċ // ĠĠĠ Ġsearch New ( NAME _ PROJECT _ FILTER ED , ĠT 3 , ĠPaths . get ( PATH _ RESULT , Ġ" new _ search _ T 3 . json "). to File ()) Ċ // ĠĠĠ Ġsearch New ( NAME _ PROJECT _ FILTER ED , ĠT 4 , ĠPaths . get ( PATH _ RESULT , Ġ" new _ search _ T 4 . json "). to File ()) Ċ // ĠĠĠ Ġsearch New ( NAME _ PROJECT _ FILTER ED , ĠT 5 , ĠPaths . get ( PATH _ RESULT , Ġ" new _ search _ T 5 . json "). to File ()) Ċ // ĠĠĠ Ġcreate Ċ // ĊĠĠĠ Ġeval SearchResult ( T 4 , ĠPaths . get ( PATH _ RESULT , Ġ" t 4 _ filter . json "). to File ()) ĊĠĠĠ Ġreturn ĊĊĠĠĠ Ġval Ġtarget Ġ= ĠT 6 ĊĠĠĠ Ġval Ġsearch Map : ĠSet < Pair < String , ĠDouble >> Ġ= ĠGson (). fromJson ( Paths . get ( PATH _ RESULT , Ġ" t 5 _ filter . json "). to File (). read Text (), Ġobject Ġ: ĠType Token < Set < Pair < String , ĠDouble >> >() Ġ{} . type ) Ċ // ĠĠĠ Ġval Ġorigin Ġ: ĠSet < Pair < String , ĠDouble >> Ġ= Ġ ĠGson (). fromJson ( Paths . get ( PATH _ RESULT , Ġ" t 1 _ search _ org _ result . json "). to File (). read Text (), Ġobject : Type Token < Set < Pair < String , Double >>> Ġ() Ġ{} . type ) ĊĊĠĠĠ Ġval Ġquery Parser Ġ= ĠJava Parser . parse ( File ( target )) ĊĠĠĠ Ġval Ġset Ġ= Ġquery Parser . findAll ( Method Declaration :: class . java ). map Ġ{ Ġit . name . toString () Ġ}. to HashSet () ĊĊĠĠĠ Ġvar Ġmax ES Ġ= ĠInt . MIN _ VALUE ĊĠĠĠ Ġvar Ġmin ES Ġ= ĠInt . MAX _ VALUE ĊĠĠĠ Ġvar Ġtotal ES Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġmax Mas Ġ= ĠDouble . MIN _ VALUE ĊĠĠĠ Ġvar Ġmin Mas Ġ= ĠDouble . MAX _ VALUE ĊĠĠĠ Ġvar Ġtotal Mas Ġ= Ġ 0 . 0 ĊĠĠĠ Ġvar Ġsize Ġ= Ġ 5 0 ; ĊĊĠĠĠ Ġprintln ( set . size ) ĊĠĠĠ Ġprintln ( set ) ĊĠĠĠ Ġreturn ĊĊĠĠĠ Ġsearch Map . filter Ġ{ Ġ! it . first . equals ( target ) Ġ}. take ( 5 0 ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠJava Parser . parse ( File ( it . first )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Set Ġ= Ġparser . findAll ( Method Declaration :: class . java ). map Ġ{ Ġit . name . toString () Ġ}. toSet () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġes Ġ= Ġexpand able Score ( set . toList (), Ġcurrent Set . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġms Ġ= Ġmethod Sim ( set . toList (), Ġcurrent Set . toList ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ it . first } Ġes Ġ: Ġ$ es ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( es Ġ> Ġmax ES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax ES Ġ= Ġes ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( es Ġ< Ġmin ES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin ES Ġ= Ġes ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ms Ġ> Ġmax Mas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Mas Ġ= Ġms ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ms Ġ< Ġmin Mas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Mas Ġ= Ġms ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Mas Ġ+= Ġms ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal ES Ġ+= Ġes ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize -- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("[ error ] ${ it . first }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln ("$ min ES Ġ/ Ġ$ max ES Ġ/ Ġ${ total ES Ġ/ Ġsize . toDouble ()} Ġ/ Ġ$ min Mas Ġ/ Ġ$ max Mas Ġ/ Ġ${ total Mas Ġ/ Ġsize }") Ċ Ċ // ĠĠĠ Ġdf Map . filter Values Ġ{ Ġit Ġ> Ġ 1 9 Ġ&& Ġit Ġ< Ġ 5 0 0 0 0 0 } Ċ Ċ // ĠĠĠ Ġval Ġanal yst Ġ= ĠSource An al yst ( File ( T 2 )) Ċ // ĠĠĠ Ġanal yst . analysis () Ċ // ĠĠĠ Ġprintln ( Gson Builder (). set Pretty Print ing (). create (). toJson ( Ġanal yst . source File )) Ċ // ĠĠĠ Ġreturn Ċ // ĠĠĠ Ġanalysis New 3 () ĊĊĠĠĠ Ġreturn ĊĊ Ċ // ĠĠĠ Ġprintln ( Gson Builder (). set Pretty Print ing (). create (). toJson ( new data . SourceFile . create ( File ( T 6 )))) ĊĊ Ċ // ĠĠĠ Ġval Ġdf Map Ġ: ĠHashMap < String , ĠLong > Ġ= ĠGson (). fromJson ( File (" df _ map . json "). read Text (), Ġobject : Type Token < HashMap < String , ĠDouble >>() Ġ{} . type ) Ċ // ĠĠĠ Ġval Ġid f Map Ġ: ĠHashMap < String , ĠLong > Ġ= Ġhash Map Of () Ċ // ĠĠĠ Ġid f Map . put All ( df Map . filter Ġ{ Ġit . value Ġ> Ġ 1 9 Ġ&& Ġit . value Ġ< Ġ 6 0 0 0 0 0 Ġ}) Ċ // Ċ // ĠĠĠ Ġsearch Test ( File ( T 6 ), ĠPaths . get ( PATH _ RESULT ," t 6 _ org . json "). to File (), Ġdf Map ); Ċ // ĠĠĠ Ġsearch Test ( File ( T 6 ), ĠPaths . get ( PATH _ RESULT ," t 6 _ filter . json "). to File (), Ġid f Map ); Ċ // ĠĠĠ Ġval Ġq p Ġ= ĠJava Parser . parse ( File ( T 6 )) Ċ //// Ċ //// ĠĠĠ Ġq p . findAll ( Method Declaration :: class . java ). forEach Ġ{ Ċ //// ĠĠĠĠĠĠĠ Ġprintln ( it . body ) Ċ //// ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġq p . findAll ( Class Or Interface Declaration :: class . java ). forEach Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġprintln ( it . comment . get ()) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġq p . findAll ( Constructor Declaration :: class . java ). forEach Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġprintln ("${ it . name } Ġ: Ġ${ it . parameters }") Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġq p . findAll ( Method Declaration :: class . java ). forEach Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġprintln ("${ it . name } Ġ: Ġ${ it . parameters }") Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĊĊĠĠĠ Ġreturn ĊĠĠĠ Ġval Ġpf Map : ĠHashMap < String , ĠLong > Ġ= ĠGson (). fromJson ( File (" pf _ map . json "). read Text (), Ġobject Ġ: ĠType Token < HashMap < String , ĠLong >>() Ġ{} . type ) ĊĊĊĠĠĠ Ġreturn ĊĠĠĠ Ġanalysis () ĊĠĠĠ Ġreturn ĊĠĠĠ Ġprint Base Info () ĊĠĠĠ Ġreturn ĊĠĠĠ Ġanalysis 1 ( limit Ġ= Ġ 0 , Ġsuffix Ġ= Ġ" new ") ĊĠĠĠ Ġanalysis 1 ( limit Ġ= Ġ 1 0 , Ġsuffix Ġ= Ġ" new ") ĊĠĠĠ Ġanalysis 1 ( limit Ġ= Ġ 1 0 0 , Ġsuffix Ġ= Ġ" new ") ĊĠĠĠ Ġreturn ĊĠĠĠ Ġprint Base Info () ĊĊĊĠĠĠ Ġreturn ĊĊĠĠĠ Ġreturn ĊĠĠĠ Ġprint All Clone Command () ĊĠĠĠ Ġreturn ĊĠĠĠ Ġval Ġc Ġ= ĠCalendar . getInstance () ĊĠĠĠ Ġval Ġformat Ġ= ĠSimpleDateFormat (" yyyy - MM - dd ") ĊĊĠĠĠ Ġfor Ġ( year Ġin Ġ 2 0 0 8 .. 2 0 1 7 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġc . set ( Calendar . YEAR , Ġyear ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( day Ġin Ġ 1 .. 3 5 8 Ġstep Ġ 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . set ( Calendar . DAY _ OF _ YEAR , Ġday ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġformat . format ( c . time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . add ( Calendar . DAY _ OF _ YEAR , Ġ+ 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġformat . format ( c . time ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject Extractor ( Paths . get ( PATH _ PROJECT _ MAP ), Ġstart , Ġend ). extract (); ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ Ġfor ( month Ġin Ġ 1 .. 1 2 ) Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( week Ġin Ġ 1 .. 5 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġws Ġ= Ġ( week - 1 )* 7 Ġ+ Ġ 1 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwe Ġ= Ġweek * 7 Ġ+ Ġ 1 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠCalendar . getInstance () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . set ( Calendar . YEAR , Ġ 2 0 1 4 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . set ( Calendar . MONTH , Ġ 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . set ( Calendar . DAY _ OF _ YEAR , Ġi ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProject Extractor ( Paths . get ( PATH _ PROJECT _ MAP ), Ġ"$ year -$ month -$ ws ", Ġ"$ year -$ month -$ we "). extract (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĊĊĠĠĠ ĠFile (" E :/ Repository "). list Files (). map Ġ{ Ġit . list Files () Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġit . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclean Project ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĊĊĠĠĠ Ġprint All Clone Command () ĊĠĠĠ Ġreturn Ċ Ċ // ĠĠĠ Ġprint Base Info () Ċ // ĠĠĠ Ġreturn Ċ // Ċ // ĠĠĠ Ġval Ġid f Map Ġ: ĠHashMap < String , ĠDouble > Ġ= ĠGson (). fromJson ( File (" map _ idf . json "). read Text (), Ġobject : Type Token < HashMap < String , ĠDouble >>() Ġ{} . type ) Ċ // ĠĠĠ Ġval Ġsize Ġ= Ġ 5 0 0 0 0 Ċ // ĠĠĠ Ġk mean Cluster ing ( 3 0 0 0 0 0 , Ġid f Map , Ġget NodeList ( size , Ġid f Map )) Ċ Ċ // ĠĠĠ Ġval Ġid f Map Ġ: ĠHashMap < String , ĠDouble > Ġ= ĠGson (). fromJson ( File (" map _ idf . json "). read Text (), Ġobject : Type Token < HashMap < String , ĠDouble >>() Ġ{} . type ); Ċ // ĠĠĠ Ġval Ġquery Ġ= ĠFile (" C :\\ Research \\ Repository \\ zx ing \\ zx ing \\ core \\ src \\ main \\ java \\ com \\ google \\ zx ing \\ common \\ detector \\ Math Utils . java ") Ċ // ĠĠĠ Ġval Ġtarget Ġ= ĠPre Processor ( query . read Text ()). to SourceFile ( query . path ) Ċ // Ċ // ĠĠĠ Ġval Ġnode Ġ= ĠNode (" query " Ġ, Ġtarget . get Merged Map () !!. tf idf Doc ( idf Map )) Ċ // Ċ // ĠĠĠ Ġval Ġclusters Ġ: ĠList < Cluster > Ġ= ĠGson (). fromJson ( Paths . get ( PATH _ RESULT , Ġ" cluster ", Ġ" k mean _ 5 0 3 1 9 . json "). to File (). read Text (), Ġobject : Type Token < List < Cluster >>() Ġ{} . type ); Ċ // ĠĠĠ Ġval Ġnode List Ġ Ġ= Ġget NodeList ( 5 0 0 0 0 , Ġid f Map ) Ċ // Ċ // ĠĠĠ Ġsearch In Clusters ( clusters , Ġnode ) Ċ // ĠĠĠ Ġsearch In Node ( node List , Ġnode ) Ċ // ĠĠĠ Ġreturn Ċ Ċ // ĠĠĠ Ġval Ġsize Ġ= Ġ 1 0 0 0 0 0 Ċ // ĠĠĠ Ġk mean Cluster ing ( getNode List ( 3 0 0 0 0 0 , Ġid f Map )) Ċ // ĠĠĠ Ġk mean Cluster ing ( getNode List ( 5 0 0 0 0 0 , Ġid f Map )) Ċ // ĠĠĠ Ġreturn Ċ Ċ // ĠĠĠ Ġval Ġclusters Ġ: ĠList < Cluster > Ġ= ĠGson (). fromJson ( Paths . get ( PATH _ RESULT , Ġ" cluster ", Ġ" k mean _ 1 0 1 4 1 8 . json "). to File (). read Text (), Ġobject : Type Token < List < Cluster >>() Ġ{} . type ); Ċ // ĠĠĠ Ġval Ġnode List Ġ Ġ= Ġget NodeList ( size , Ġid f Map ) Ċ // Ċ // ĠĠĠ Ġval Ġquery Ġ= ĠFile ( T 1 ) Ċ // ĠĠĠ Ġval Ġtarget Ġ= ĠPre Processor ( query . read Text ()). to SourceFile ( query . path ) Ċ // ĠĠĠ Ġval Ġnode Ġ= ĠNode ( query . name Without Extension Ġ, Ġtarget . get Merged Map () !!. tf idf Doc ( idf Map )) Ċ // Ċ // ĠĠĠ Ġsearch In Clusters ( clusters , Ġnode ) Ċ // ĠĠĠ Ġsearch In Node ( node List , Ġnode ) Ċ // Ċ // ĠĠĠ Ġreturn Ċ Ċ // ĠĠĠ Ġk mean Cluster ing ( 5 0 0 0 0 , Ġid f Map ); Ċ // ĠĠĠ Ġk mean Cluster ing ( 1 0 0 0 0 0 , Ġid f Map ); Ċ // ĠĠĠ Ġk mean Cluster ing ( 1 5 0 0 0 0 , Ġid f Map ); ĊĠĠĠ Ġreturn Ċ // Ċ // ĠĠĠ Ġval Ġs Ġ= Ġsearch Top K ( query Ġ= ĠFile (" C :\\ Research \\ Repository \\ spring - projects \\ spring - framework \\ spring - core \\ src \\ main \\ java \\ org \\ springframework \\ util \\ StringUtils . java ")) Ċ // ĠĠĠ ĠPaths . get ( PATH _ RESULT , Ġ" search _ top 3 0 0 _ tf idf . json "). to File (). print Writer (). use Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġit . print ( Gson Builder (). set Pretty Print ing (). create (). toJson ( s )) Ċ // ĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ċ // ĠĠĠ Ġval Ġid f Map : HashMap < String , ĠDouble > Ġ= Ġhash Map Of () Ċ // Ċ // ĠĠĠ Ġload All Project Model File ( NAME _ PROJECT _ MODEL _ CLEAN ). forEach Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject Model . load ( it ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġproject . source List . forEach Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġit . get Merged Map () !!. keys . forEach Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( idf Map . containsKey ( it )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid f Map . set ( it , Ġid f Map . get ( it ) !! Ġ+ Ġ 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid f Map . put ( it , Ġ 1 . 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ ĠFile (" map _ idf . json "). print Writer (). use Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġit . print ( Gson Builder (). set Pretty Print ing (). create (). toJson ( idf Map )) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġreturn Ċ } ĊĊ Ċ private Ġfun Ġclone All () Ġ{ ĊĠĠĠ ĠCl oner ( PATH _ PROJECT _ MAP ). clone All () Ċ } Ċ Ċ data Ġclass ĠSearch Response ( var Ġitems : ĠList < Repository >, Ġvar Ġtotal _ count : ĠInt ) Ġ{ ĊĠĠĠ Ġclass ĠDeserial izer Ġ: ĠResponse Deserial izable < Search Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( content : ĠString ) Ġ= ĠGson (). fromJson ( content , ĠSearch Response :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< T > ĠMutable List < T >. map In Place ( mut ator : Ġ( T ) Ġ-> ĠT ) Ġ{ ĊĠĠĠ Ġval Ġiterate Ġ= Ġthis . list Iterator () ĊĠĠĠ Ġwhile Ġ( iterate . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠoldValue Ġ= Ġiterate . next () ĊĠĠĠĠĠĠĠ Ġval ĠnewValue Ġ= Ġmut ator ( oldValue ) ĊĠĠĠĠĠĠĠ Ġif Ġ( newValue Ġ!== ĠoldValue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiterate . set ( newValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊĊĊĊ