1 21 package proguard.obfuscate; 22 23 import proguard.classfile.*; 24 import proguard.classfile.util.*; 25 26 27 33 public class MappingKeeper implements MappingProcessor 34 { 35 private ClassPool classPool; 36 private WarningPrinter warningPrinter; 37 38 private Clazz clazz; 40 41 42 49 public MappingKeeper(ClassPool classPool, 50 WarningPrinter warningPrinter) 51 { 52 this.classPool = classPool; 53 this.warningPrinter = warningPrinter; 54 } 55 56 57 59 public boolean processClassMapping(String className, 60 String newClassName) 61 { 62 String name = ClassUtil.internalClassName(className); 64 65 clazz = classPool.getClass(name); 66 if (clazz != null) 67 { 68 String newName = ClassUtil.internalClassName(newClassName); 69 70 if (warningPrinter != null) 73 { 74 String currentNewName = ClassObfuscator.newClassName(clazz); 75 if (currentNewName != null && 76 !currentNewName.equals(newName)) 77 { 78 warningPrinter.print("Warning: " + 79 className + 80 " is not being kept as '" + 81 ClassUtil.externalClassName(currentNewName) + 82 "', but remapped to '" + 83 newClassName + "'"); 84 } 85 } 86 87 ClassObfuscator.setNewClassName(clazz, newName); 88 89 return true; 91 } 92 93 return false; 94 } 95 96 97 public void processFieldMapping(String className, 98 String fieldType, 99 String fieldName, 100 String newFieldName) 101 { 102 if (clazz != null) 103 { 104 String name = fieldName; 106 String descriptor = ClassUtil.internalType(fieldType); 107 108 Field field = clazz.findField(name, descriptor); 109 if (field != null) 110 { 111 if (warningPrinter != null) 114 { 115 String currentNewName = MemberObfuscator.newMemberName(field); 116 if (currentNewName != null && 117 !currentNewName.equals(newFieldName)) 118 { 119 warningPrinter.print("Warning: " + 120 className + 121 ": field '" + fieldType + " " + fieldName + 122 "' is not being kept as '" + currentNewName + 123 "', but remapped to '" + newFieldName + "'"); 124 } 125 } 126 127 MemberObfuscator.setFixedNewMemberName(field, newFieldName); 129 } 130 } 131 } 132 133 134 public void processMethodMapping(String className, 135 int firstLineNumber, 136 int lastLineNumber, 137 String methodReturnType, 138 String methodNameAndArguments, 139 String newMethodName) 140 { 141 if (clazz != null) 142 { 143 String name = ClassUtil.externalMethodName(methodNameAndArguments); 145 String descriptor = ClassUtil.internalMethodDescriptor(methodReturnType, 146 methodNameAndArguments); 147 148 Method method = clazz.findMethod(name, descriptor); 149 if (method != null) 150 { 151 if (warningPrinter != null) 154 { 155 String currentNewName = MemberObfuscator.newMemberName(method); 156 if (currentNewName != null && 157 !currentNewName.equals(newMethodName)) 158 { 159 warningPrinter.print("Warning: " + 160 className + 161 ": method '" + methodReturnType + " " + methodNameAndArguments + 162 "' is not being kept as '" + currentNewName + 163 "', but remapped to '" + newMethodName + "'"); 164 } 165 } 166 167 MemberObfuscator.setFixedNewMemberName(method, newMethodName); 169 } 170 } 171 } 172 } 173 | Popular Tags |