/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking Ġwe chat - matrix Ġavailable . Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠLicensed Ġunder Ġthe ĠBSD Ġ 3 - Clause ĠLicense Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttps :// opensource . org / licenses / BSD - 3 - Clause Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . by ted ance . r heat race . plugin . re trace Ċ Ċ import Ġorg . object web . asm . Type Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġca ich ong yang Ġon Ġ 2 0 1 7 / 8 / 3 . Ċ Ġ*/ Ċ class ĠMapping Collector Ġ: ĊĠĠĠ ĠMapping Processor Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Mapping Collector " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ CAP ACITY Ġ= Ġ 2 0 0 0 ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġm Obfuscated Raw Class Map : ĠHashMap < String , ĠString > Ġ= ĠHashMap ( DEFAULT _ CAP ACITY ) ĊĠĠĠ Ġprivate Ġvar Ġm Raw Obfuscated Class Map : ĠHashMap < String , ĠString > Ġ= ĠHashMap ( DEFAULT _ CAP ACITY ) ĊĠĠĠ Ġprivate Ġvar Ġm Raw Obfuscated Package Map : ĠHashMap < String , ĠString > Ġ= ĠHashMap ( DEFAULT _ CAP ACITY ) ĊĠĠĠ Ġprivate Ġval Ġm Obfuscated Class Method Map : ĠMutable Map < String , ĠMutable Map < String , ĠMutable Set < MethodInfo >>> Ġ= ĊĠĠĠĠĠĠĠ ĠHashMap () ĊĠĠĠ Ġprivate Ġval Ġm Original Class Method Map : ĠMutable Map < String , ĠMutable Map < String , ĠMutable Set < MethodInfo >>> Ġ= ĊĠĠĠĠĠĠĠ ĠHashMap () ĊĊĠĠĠ Ġoverride Ġfun Ġprocess Class Mapping ( className : ĠString , Ġnew ClassName : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġm Obfuscated Raw Class Map [ new ClassName ] Ġ= ĠclassName ĊĠĠĠĠĠĠĠ Ġm Raw Obfuscated Class Map [ className ] Ġ= Ġnew ClassName ĊĠĠĠĠĠĠĠ Ġif Ġ( className . contains (". ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Raw Obfuscated Package Map [ className . substring ( 0 , ĠclassName . lastIndexOf ('. ')) ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ClassName . substring ( 0 , Ġnew ClassName . lastIndexOf ('. ')) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Raw Obfuscated Package Map [ "" ] Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess Method Mapping ( ĊĠĠĠĠĠĠĠ ĠclassName : ĠString , ĊĠĠĠĠĠĠĠ Ġmethod ReturnType : ĠString , ĊĠĠĠĠĠĠĠ ĠmethodName : ĠString , ĊĠĠĠĠĠĠĠ Ġmethod Arguments : ĠString , ĊĠĠĠĠĠĠĠ Ġnew ClassName : ĠString ?, ĊĠĠĠĠĠĠĠ Ġnew MethodName : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew ClassName Temp Ġ= Ġm Raw Obfuscated Class Map [ className ] Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġvar Ġmethod Map Ġ= Ġm Obfuscated Class Method Map [ new ClassName Temp ] ĊĠĠĠĠĠĠĠ Ġif Ġ( method Map Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Map Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Obfuscated Class Method Map [ new ClassName Temp ] Ġ= Ġmethod Map ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġmethod Set Ġ= Ġmethod Map [ new MethodName ] ĊĠĠĠĠĠĠĠ Ġif Ġ( method Set Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Set Ġ= ĠLinked HashSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Map [ new MethodName ] Ġ= Ġmethod Set ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmethod Set . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethodInfo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod ReturnType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmethodName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Arguments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġvar Ġmethod Map 2 Ġ= Ġm Original Class Method Map [ className ] ĊĠĠĠĠĠĠĠ Ġif Ġ( method Map 2 Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Map 2 Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Original Class Method Map [ className ] Ġ= Ġmethod Map 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġmethod Set 2 Ġ= Ġmethod Map 2 [ methodName ] ĊĠĠĠĠĠĠĠ Ġif Ġ( method Set 2 Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Set 2 Ġ= ĠLinked HashSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Map 2 [ methodName ] Ġ= Ġmethod Set 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmethod Set 2 . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethodInfo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ClassName Temp !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod ReturnType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew MethodName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Arguments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġoriginal ClassName ( pro guard ClassName : ĠString , Ġdefault ClassName : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m Obfuscated Raw Class Map . containsKey ( pro guard ClassName )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Obfuscated Raw Class Map [ pro guard ClassName ] !! ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault ClassName ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpro guard ClassName ( original ClassName : ĠString , Ġdefault ClassName : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m Raw Obfuscated Class Map . containsKey ( original ClassName )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Raw Obfuscated Class Map [ original ClassName ] !! ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault ClassName ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpro guard PackageName ( original Package : ĠString , Ġdefault Package : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m Raw Obfuscated Package Map . containsKey ( original Package )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Raw Obfuscated Package Map [ original Package ] !! ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Package ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġget Ġoriginal Ġmethod Ġinfo ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġob fuscated ClassName ĊĠĠĠĠ Ġ* Ġ@ param Ġob fuscated MethodName ĊĠĠĠĠ Ġ* Ġ@ param Ġob fuscated Method Desc ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġoriginal MethodInfo ( ĊĠĠĠĠĠĠĠ Ġob fuscated ClassName : ĠString ?, ĊĠĠĠĠĠĠĠ Ġob fuscated MethodName : ĠString , ĊĠĠĠĠĠĠĠ Ġob fuscated Method Desc : ĠString ĊĠĠĠ Ġ): ĠMethodInfo Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdesc Info Ġ= Ġparse Method Desc ( ob fuscated Method Desc , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġob fuscated Ġname Ġ-> Ġoriginal Ġmethod Ġnames . ĊĠĠĠĠĠĠĠ Ġval Ġmethod Map : ĠMap < String , ĠMutable Set < MethodInfo >> ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Obfuscated Class Method Map [ ob fuscated ClassName ] ĊĠĠĠĠĠĠĠ Ġif Ġ( method Map Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Set : ĠSet < MethodInfo >? Ġ= Ġmethod Map [ ob fuscated MethodName ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( method Set Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFind Ġall Ġmatching Ġmethods . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Info Iterator Ġ= Ġmethod Set . iterator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( method Info Iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Info Ġ= Ġmethod Info Iterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( method Info . matches ( desc Info . returnType , Ġdesc Info . arguments )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew MethodInfo Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMethodInfo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew MethodInfo . desc Ġ= Ġdesc Info . desc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew MethodInfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdefault MethodInfo : ĠMethodInfo Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethodInfo . de Fault () ĊĠĠĠĠĠĠĠ Ġdefault MethodInfo . desc Ġ= Ġdesc Info . desc ĊĠĠĠĠĠĠĠ Ġdefault MethodInfo . original Name Ġ= Ġob fuscated MethodName ĊĠĠĠĠĠĠĠ Ġreturn Ġdefault MethodInfo ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġget Ġob fuscated Ġmethod Ġinfo ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġoriginal ClassName ĊĠĠĠĠ Ġ* Ġ@ param Ġoriginal MethodName ĊĠĠĠĠ Ġ* Ġ@ param Ġoriginal Method Desc ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġob fuscated MethodInfo ( ĊĠĠĠĠĠĠĠ Ġoriginal ClassName : ĠString ?, ĊĠĠĠĠĠĠĠ Ġoriginal MethodName : ĠString , ĊĠĠĠĠĠĠĠ Ġoriginal Method Desc : ĠString ĊĠĠĠ Ġ): ĠMethodInfo Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdesc Info Ġ= Ġparse Method Desc ( original Method Desc , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠClass Ġname Ġ-> Ġob fuscated Ġmethod Ġnames . ĊĠĠĠĠĠĠĠ Ġval Ġmethod Map : ĠMap < String , ĠSet < MethodInfo >> ? Ġ= Ġm Original Class Method Map [ original ClassName ] ĊĠĠĠĠĠĠĠ Ġif Ġ( method Map Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Set Ġ= Ġmethod Map [ original MethodName ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġmethod Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFind Ġall Ġmatching Ġmethods . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Info Iterator Ġ= Ġmethod Set . iterator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( method Info Iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Info Ġ= Ġmethod Info Iterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew MethodInfo Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMethodInfo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġob fuscated MethodInfo ( new MethodInfo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new MethodInfo . matches ( desc Info . returnType , Ġdesc Info . arguments )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew MethodInfo . desc Ġ= Ġdesc Info . desc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew MethodInfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdefault MethodInfo : ĠMethodInfo Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethodInfo . de Fault () ĊĠĠĠĠĠĠĠ Ġdefault MethodInfo . desc Ġ= Ġdesc Info . desc ĊĠĠĠĠĠĠĠ Ġdefault MethodInfo . original Name Ġ= Ġoriginal MethodName ĊĠĠĠĠĠĠĠ Ġreturn Ġdefault MethodInfo ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġob fuscated MethodInfo ( method Info : ĠMethodInfo ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Arguments Ġ= Ġmethod Info . original Arguments ĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġmethod Arguments . split ("," ). to Typed Array () ĊĠĠĠĠĠĠĠ Ġval Ġstring Buffer Ġ= ĠStringBuffer () ĊĠĠĠĠĠĠĠ Ġfor Ġ( str Ġin Ġargs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġstr . replace ("[ ", Ġ""). replace (" ]", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Raw Obfuscated Class Map . containsKey ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Buffer . append ( str . replace ( key , Ġm Raw Obfuscated Class Map [ key ] !! )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Buffer . append ( str ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring Buffer . append (',') ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( string Buffer . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring Buffer . delete Char At ( string Buffer . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġmethod ReturnType Ġ= Ġmethod Info . original Type ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġmethod ReturnType . replace ("[ ", Ġ""). replace (" ]", Ġ"") ĊĠĠĠĠĠĠĠ Ġif Ġ( m Raw Obfuscated Class Map . containsKey ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod ReturnType Ġ= Ġmethod ReturnType . replace ( key , Ġm Raw Obfuscated Class Map [ key ] !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmethod Info . original Arguments Ġ= Ġstring Buffer . toString () ĊĠĠĠĠĠĠĠ Ġmethod Info . original Type Ġ= Ġmethod ReturnType ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġparse Ġmethod Ġdesc ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdesc ĊĠĠĠĠ Ġ* Ġ@ param Ġis Raw To Obfuscated ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġparse Method Desc ( desc : ĠString , Ġis Raw To Obfuscated : ĠBoolean ): ĠDesc Info Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdesc Info Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDesc Info () ĊĠĠĠĠĠĠĠ Ġval Ġargs Obj Ġ= ĠType . get Argument Types ( desc ) ĊĠĠĠĠĠĠĠ Ġval Ġarguments Buffer Ġ= ĠStringBuffer () ĊĠĠĠĠĠĠĠ Ġval Ġdesc Buffer Ġ= ĠStringBuffer () ĊĠĠĠĠĠĠĠ Ġdesc Buffer . append (' (' ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( type Ġin Ġargs Obj ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġtype . className . replace ("[ ", Ġ""). replace (" ]", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Raw To Obfuscated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Raw Obfuscated Class Map . containsKey ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Buffer . append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype . className . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Raw Obfuscated Class Map [ key ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesc Buffer . append ( type . toString (). replace ( key , Ġm Raw Obfuscated Class Map [ key ] !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Buffer . append ( type . className ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesc Buffer . append ( type . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Obfuscated Raw Class Map . containsKey ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Buffer . append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype . className . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Obfuscated Raw Class Map [ key ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesc Buffer . append ( type . toString (). replace ( key , Ġm Obfuscated Raw Class Map [ key ] !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Buffer . append ( type . className ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesc Buffer . append ( type . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Buffer . append (',') ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdesc Buffer . append (' )') ĊĠĠĠĠĠĠĠ Ġval Ġreturn Obj : ĠType Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType . get ReturnType ( desc ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠArray Index OutOfBoundsException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType . get ReturnType ("$ desc ; ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Raw To Obfuscated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġreturn Obj . className . replace ("[ ", Ġ""). replace (" ]", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Raw Obfuscated Class Map . containsKey ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesc Info . returnType Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Obj . className . replace ( key , Ġm Raw Obfuscated Class Map [ key ] !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesc Buffer . append ( return Obj . toString (). replace ( key , Ġm Raw Obfuscated Class Map [ key ] !! )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesc Info . returnType Ġ= Ġreturn Obj . className ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesc Buffer . append ( return Obj . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġreturn Obj . className . replace ("[ ", Ġ""). replace (" ]", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Obfuscated Raw Class Map . containsKey ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesc Info . returnType Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Obj . className . replace ( key , Ġm Obfuscated Raw Class Map [ key ] !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesc Buffer . append ( return Obj . toString (). replace ( key , Ġm Obfuscated Raw Class Map [ key ] !! )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesc Info . returnType Ġ= Ġreturn Obj . className ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesc Buffer . append ( return Obj . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġdelete Ġlast Ġ, ĊĠĠĠĠĠĠĠ Ġif Ġ( arguments Buffer . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Buffer . delete Char At ( arguments Buffer . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdesc Info . arguments Ġ= Ġarguments Buffer . toString () ĊĠĠĠĠĠĠĠ Ġdesc Info . desc Ġ= Ġdesc Buffer . toString () ĊĠĠĠĠĠĠĠ Ġreturn Ġdesc Info ĊĠĠĠ Ġ} Ċ }