xref: /aosp_15_r20/external/leakcanary2/shark-hprof/src/main/java/shark/ProguardMapping.kt (revision d9e8da70d8c9df9a41d7848ae506fb3115cae6e6)
1 package shark
2 
3 class ProguardMapping {
4 
5   // Classes can be simply stored as a obfuscatedName -> clearName
6   // For fields it's a bit more complicated since we need to know
7   // the class that a given field belongs to (two different classes
8   // can have a field with the same name). So files are stored as:
9   // obfuscatedClassName.obfuscatedFieldName -> clearFieldName
10   private val obfuscatedToClearNamesMap = linkedMapOf<String, String>()
11 
12   /**
13    * Returns deobfuscated class name or original string if there is no
14    * mapping for given obfuscated name.
15    */
deobfuscateClassNamenull16   fun deobfuscateClassName(obfuscatedClassName: String): String {
17     return obfuscatedToClearNamesMap[obfuscatedClassName] ?: obfuscatedClassName
18   }
19 
20   /**
21    * Returns deobfuscated field name or original string if there is no
22    * mapping for given obfuscated name.
23    */
deobfuscateFieldNamenull24   fun deobfuscateFieldName(
25     obfuscatedClass: String,
26     obfuscatedField: String
27   ): String {
28     return obfuscatedToClearNamesMap["$obfuscatedClass.$obfuscatedField"] ?: return obfuscatedField
29   }
30 
31   /**
32    * Adds entry to the obfuscatedToClearNamesMap map.
33    */
addMappingnull34   fun addMapping(
35     obfuscatedName: String,
36     clearName: String
37   ) {
38     obfuscatedToClearNamesMap[obfuscatedName] = clearName
39   }
40 }
41