/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠPl ume ĠAuthors Ċ Ġ* Ġ< p > Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ġ< p > Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ġ< p > Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġio . github . pl ume . oss . store Ċ Ċ import Ġio . github . pl ume . oss . metrics . Cache Metrics Ċ import Ġio . github . pl ume . oss . options . Cache Options Ċ import Ġio . shift left . code property graph . generated . nodes . New File Builder Ċ import Ġio . shift left . code property graph . generated . nodes . New Namespace Block Builder Ċ import Ġio . shift left . code property graph . generated . nodes . New Type Builder Ċ import Ġio . shift left . code property graph . generated . nodes . New Type Decl Builder Ċ import Ġorg . apache . logging . log 4 j . Log Manager Ċ import Ġorg . cache 2 k . Cache Ċ import Ġorg . cache 2 k . Cache 2 k Builder ĊĊ Ċ /** Ċ Ġ* ĠA Ġlocal Ġcache Ġto Ġreduce Ġread Ġcalls Ġto Ġthe Ġdatabase . ĠThe Ġcaching Ġpolicy Ġcan Ġbe Ġconfigured Ġunder Ġ[ Cache Options ]. Ċ Ġ*/ Ċ object ĠLocal Cache Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLog Manager . getLogger ( Local Cache :: java Class ) ĊĊĠĠĠ Ġprivate Ġval Ġtype Cache : ĠCache < String , ĠNew Type Builder > ĊĠĠĠ Ġprivate Ġval Ġtype Decl Cache : ĠCache < String , ĠNew Type Decl Builder > ĊĠĠĠ Ġprivate Ġval Ġfile Cache : ĠCache < String , ĠNew File Builder > ĊĠĠĠ Ġprivate Ġval Ġnamespace Block Cache : ĠCache < String , ĠNew Namespace Block Builder > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Decl Size Ġ= Ġ( Cache Options . cache Size Ġ* Ġ 0 . 2 6 ). to Long () ĊĠĠĠĠĠĠĠ Ġval Ġtype Size Ġ= Ġ( Cache Options . cache Size Ġ* Ġ 0 . 2 6 ). to Long () ĊĠĠĠĠĠĠĠ Ġval ĠfileSize Ġ= Ġ( Cache Options . cache Size Ġ* Ġ 0 . 2 4 ). to Long () ĊĠĠĠĠĠĠĠ Ġval Ġnamespace BlockSize Ġ= Ġ( Cache Options . cache Size Ġ* Ġ 0 . 2 4 ). to Long () ĊĠĠĠĠĠĠĠ Ġtype Cache Ġ= Ġobject Ġ: ĠCache 2 k Builder < String , ĠNew Type Builder >() Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. name (" type Cache "). entry Capacity ( type Size ). build () ĊĠĠĠĠĠĠĠ Ġtype Decl Cache Ġ= Ġobject Ġ: ĠCache 2 k Builder < String , ĠNew Type Decl Builder >() Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. name (" type Decl Cache "). entry Capacity ( type Decl Size ). build () ĊĠĠĠĠĠĠĠ Ġfile Cache Ġ= Ġobject Ġ: ĠCache 2 k Builder < String , ĠNew File Builder >() Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. name (" file Cache "). entry Capacity ( file Size ). build () ĊĠĠĠĠĠĠĠ Ġnamespace Block Cache Ġ= Ġobject Ġ: ĠCache 2 k Builder < String , ĠNew Namespace Block Builder >() Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. name (" namespace Block Cache "). entry Capacity ( namespace BlockSize ). build () ĊĠĠĠĠĠĠĠ Ġlogger . info (" Configured Ġcache Ġsize Ġis Ġ${ Cache Options . cache Size }. ") ĊĠĠĠĠĠĠĠ Ġlogger . debug (" Assign ing Ġcache Ġas Ġfollows Ġ=> Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( TYPE , Ġ$ type Size ), Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( TYPE _ DECL , Ġ$ type Decl Size ), Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( FILE , Ġ$ file Size ), Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( NAMESPACE _ BLOCK , Ġ$ namespace BlockSize )") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Type ( fullName : ĠString ) Ġ= Ġtype Cache . remove ( fullName ) ĊĊĠĠĠ Ġfun Ġadd Type ( t : ĠNew Type Builder ) Ġ= Ġtype Cache . put ( t . build (). fullName (), Ġt ) ĊĊĠĠĠ Ġfun ĠgetType ( fullName : ĠString ): ĠNew Type Builder ? Ġ= Ġtype Cache [ fullName ] ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġif Ġ( this Ġ!= Ġnull ) ĠCache Metrics . cache Hit () Ġelse ĠCache Metrics . cache Miss () Ġ} ĊĊĠĠĠ Ġfun Ġremove Type Decl ( fullName : ĠString ) Ġ= Ġtype Decl Cache . remove ( fullName ) ĊĊĠĠĠ Ġfun Ġadd Type Decl ( td : ĠNew Type Decl Builder ) Ġ= Ġtype Decl Cache . put ( td . build (). fullName (), Ġtd ) ĊĊĠĠĠ Ġfun ĠgetType Decl ( fullName : ĠString ): ĠNew Type Decl Builder ? Ġ= Ġtype Decl Cache [ fullName ] ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġif Ġ( this Ġ!= Ġnull ) ĠCache Metrics . cache Hit () Ġelse ĠCache Metrics . cache Miss () Ġ} ĊĊĠĠĠ Ġfun Ġremove File ( name : ĠString ) Ġ= Ġfile Cache . remove ( name ) ĊĊĠĠĠ Ġfun Ġadd File ( f : ĠNew File Builder ) Ġ= Ġfile Cache . put ( f . build (). name (), Ġf ) ĊĊĠĠĠ Ġfun ĠgetFile ( name : ĠString ): ĠNew File Builder ? Ġ= Ġfile Cache [ name ] ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġif Ġ( this Ġ!= Ġnull ) ĠCache Metrics . cache Hit () Ġelse ĠCache Metrics . cache Miss () Ġ} ĊĊĠĠĠ Ġfun Ġremove Namespace Block ( fullName : ĠString ) Ġ= Ġnamespace Block Cache . remove ( fullName ) ĊĊĠĠĠ Ġfun Ġadd Namespace Block ( n : ĠNew Namespace Block Builder ) Ġ= Ġnamespace Block Cache . put ( n . build (). fullName (), Ġn ) ĊĊĠĠĠ Ġfun Ġget Namespace Block ( name : ĠString ): ĠNew Namespace Block Builder ? Ġ= Ġnamespace Block Cache [ name ] ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġif Ġ( this Ġ!= Ġnull ) ĠCache Metrics . cache Hit () Ġelse ĠCache Metrics . cache Miss () Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġtype Cache . clear () ĊĠĠĠĠĠĠĠ Ġtype Decl Cache . clear () ĊĠĠĠĠĠĠĠ Ġfile Cache . clear () ĊĠĠĠĠĠĠĠ Ġnamespace Block Cache . clear () ĊĠĠĠ Ġ} Ċ } Ċ