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