package Ġcom . intellij . rem oter obot . fixtures . data Extractor . server Ċ Ċ import Ġcom . intellij . rem oter obot . utils . L ru Cache Ċ import Ġjava . util .* Ċ import Ġjava . util . function . Bi Consumer Ċ import Ġjava . util . function . Consumer Ċ Ċ object ĠText To Key Cache Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtext To Key Map Ġ= ĠCollections . synchronized Map ( L ru Cache < String , ĠMutable Set < String >>( 1 0 _ 0 0 0 )) ĊĊĠĠĠ Ġfun Ġinit ( ide ClassLoader : ĠClassLoader ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Class Ġ= ĠClass . forName (" com . intellij . Bundle Base ", Ġtrue , Ġide ClassLoader ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 2 1 3 ĊĠĠĠĠĠĠĠ Ġval Ġset Translation Consumer Function Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle Class . getMethod (" set Translation Consumer ", ĠBi Consumer :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( set Translation Consumer Function Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconsumer Ġ= ĠBi Consumer < String , ĠString > Ġ{ Ġkey , Ġt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġremove Mnemonic ( ide ClassLoader , Ġt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text To Key Map . containsKey ( text ). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext To Key Map [ text ] Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext To Key Map [ text ]?. add ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Translation Consumer Function . invoke ( null , Ġconsumer ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Call Consumer List Field Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle Class . getField (" translation Consumer List ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( message Call Consumer List Field Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Call Consumer List Field . get ( null ) Ġas ĠMutable List < Consumer <* >> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġit . java Class . getDeclared Field (" first "). get ( it ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġit . java Class . getDeclared Field (" second "). get ( it ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġremove Mnemonic ( ide ClassLoader , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text To Key Map . containsKey ( text ). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext To Key Map [ text ] Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext To Key Map [ text ]?. add ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Key ( text : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġkey : ĠSet < String >? Ġ= Ġtext To Key Map [ text ] ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull Ġ&& Ġtext . endsWith (" ... ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( text To Key Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġtext To Key Map [ text To Key Map . keys . first OrNull Ġ{ Ġit . startsWith ( text . split (" ... ")[ 0 ]) Ġ}] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull Ġ&& Ġtext . contains (" (" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġtext To Key Map [ text . split (" (" )[ 0 ]. trim ()] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġkey ?. join ToString (" Ġ") Ġ{ Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Mnemonic ( ide ClassLoader : ĠClassLoader , Ġstr : ĠString ): ĠString Ġ= ĊĠĠĠĠĠĠĠ ĠClass . forName (" com . intellij . util . ui . UI Util ", Ġtrue , Ġide ClassLoader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getDeclared Method (" remove Mnemonic ", ĠString :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. invoke ( null , Ġstr ) Ġas ĠString Ċ }