package Ġdata Ċ Ċ import Ġcom . google . gson .* Ċ import Ġcommon .* Ċ import Ġn lp . Pre Processor Ċ import Ġjava . io . File Ċ import Ġjava . lang . reflect . Type Ċ import Ġjava . nio . file . Paths Ċ Ċ class ĠProject Model ( val Ġroot Path : String , Ġvar Ġsource List Ġ: ĠMutable List < SourceFile > Ġ= Ġmutable ListOf ()) Ċ { ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠgetAll () ĊĠĠĠĠĠĠĠ Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfun ĠFile . to Save File () Ġ: ĠFile ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPaths . get ( this . path . replace (" Research \\ Repository "," Research \\ data "), ĠNAME _ PROJECT _ MODEL ). to File () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġload SourceFile ( root : File , Ġsource Path : String ) Ġ: ĠSource File ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGson (). fromJson ( root . read Text (), ĠProject Model :: class . java ). source List . find Ġ{ Ġit . path . equals ( source Path ) Ġ} !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġload ( root : ĠFile ) Ġ: ĠProject Model ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( root . name . equals ( NAME _ PROJECT _ MODEL ) Ġ|| Ġroot . name . equals ( NAME _ PROJECT _ MODEL _ CLEAN )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGson (). fromJson ( root . read Text (), ĠProject Model :: class . java ); ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsave File Ġ= Ġroot . to Save File (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGson (). fromJson ( save File . read Text (), ĠProject Model :: class . java ); ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( root : ĠFile ) Ġ: ĠProject Model ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject Model ( root . path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsave Path Ġ= Ġ" C :\\ Research \\ data " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsave File Ġ= ĠPaths . get ( save Path , Ġroot . path . substring After ("\\ Repository "), ĠNAME _ PROJECT _ MODEL ). to File (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfailed Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! save File . parent File . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave File . parent File . mkdir s () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . read All Files Ext ( root , Ġ" java "). forEach ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . add ( Pre Processor ( it . read Text ()). to SourceFile ( it . path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : Stack Overflow Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfailed ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfailed ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("[ Project Model ] create Ġ${ save File . path } Ġsuccess Ġ: Ġ${ success } Ġfailed Ġ: Ġ${ failed }") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave File . print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . print ( Gson Builder (). set Pretty Print ing (). create (). toJson ( project )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġproject ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġload OrCreate ( root : ĠFile ): ĠProject Model Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsave File Ġ= ĠPaths . get ( root . path . replace (" E :", Ġ" C : "). replace (" Research \\ Repository "," Research \\ data "), ĠNAME _ PROJECT _ MODEL ). to File (); ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( save File . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġload ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate ( root ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave ( save File : File ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġsave File . print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . print ( Gson Builder (). set Pretty Print ing (). create (). toJson ( this )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln (" saved Ġ${ save File . path }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( path : String , Ġcom Len : Int , Ġsrc Len : Int , Ġword Map : HashMap < String , ĠHashMap < String , ĠInt >>) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġsource List . add ( SourceFile ( path , Ġcom Len , Ġsrc Len , Ġword Map )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( source File : ĠSource File ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġsource List . add ( source File ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSimpl ify Serializer Ġ: ĠJsonSerializer < SourceFile > Ċ { ĊĠĠĠ Ġoverride Ġfun Ġserialize ( src : ĠSource File ?, ĠtypeOf Src : ĠType ?, Ġcontext : ĠJson Serialization Context ?): ĠJson Element Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJsonObject () ĊĠĠĠĠĠĠĠ Ġjson . addProperty (" path ", Ġsrc !!. path ); ĊĠĠĠĠĠĠĠ Ġreturn Ġjson ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠSource File ( val Ġpath : String , Ġval Ġcom Len Ġ: ĠInt , Ġval Ġsrc Len : Int , Ġval Ġword Map : HashMap < String , HashMap < String , ĠInt >>) Ċ { ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpath ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġword Map Size () Ġ: ĠInt ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ 0 ; ĊĊĠĠĠĠĠĠĠ Ġword Map . forEach { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . value . forEach { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġword Count () Ġ: ĠInt ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ 0 ; ĊĠĠĠĠĠĠĠ Ġval Ġset Ġ: ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĊĠĠĠĠĠĠĠ Ġword Map . values . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . addAll ( it . keys ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġset . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Merged Map () Ġ: ĠHashMap < String , ĠInt >? ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ: ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of () ĊĠĠĠĠĠĠĠ Ġresult . put All ( word Map . get ( KEY _ SOURCE ) !! ) ĊĊĠĠĠĠĠĠĠ Ġword Map . get ( KEY _ COMMENT )?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġit . key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( result . containsKey ( key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . set ( key , Ġresult . get ( key ) !! Ġ+ Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . put ( key , Ġit . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } ĊĊ