| 1 21 package proguard.obfuscate; 22 23 import proguard.classfile.*; 24 import proguard.classfile.util.*; 25 import proguard.classfile.visitor.*; 26 27 import java.io.*; 28 29 30 38 public class MappingPrinter 39 extends SimplifiedVisitor 40 implements ClassVisitor, 41 MemberVisitor 42 { 43 private PrintStream ps; 44 45 46 49 public MappingPrinter() 50 { 51 this(System.out); 52 } 53 54 55 59 public MappingPrinter(PrintStream printStream) 60 { 61 this.ps = printStream; 62 } 63 64 65 67 public void visitProgramClass(ProgramClass programClass) 68 { 69 String name = programClass.getName(); 70 String newName = ClassObfuscator.newClassName(programClass); 71 72 ps.println(ClassUtil.externalClassName(name) + 73 " -> " + 74 ClassUtil.externalClassName(newName) + 75 ":"); 76 77 programClass.fieldsAccept(this); 79 programClass.methodsAccept(this); 80 } 81 82 83 public void visitLibraryClass(LibraryClass libraryClass) 84 { 85 } 86 87 88 90 public void visitProgramField(ProgramClass programClass, ProgramField programField) 91 { 92 String newName = MemberObfuscator.newMemberName(programField); 93 if (newName != null) 94 { 95 ps.println(" " + 96 ClassUtil.externalFullFieldDescription( 98 0, 99 programField.getName(programClass), 100 programField.getDescriptor(programClass)) + 101 " -> " + 102 newName); 103 } 104 } 105 106 107 public void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod) 108 { 109 String name = programMethod.getName(programClass); 112 if (name.equals(ClassConstants.INTERNAL_METHOD_NAME_CLINIT) || 113 name.equals(ClassConstants.INTERNAL_METHOD_NAME_INIT)) 114 { 115 return; 116 } 117 118 String newName = MemberObfuscator.newMemberName(programMethod); 119 if (newName != null) 120 { 121 ps.println(" " + 122 lineNumberRange(programClass, programMethod) + 123 ClassUtil.externalFullMethodDescription( 124 programClass.getName(), 125 0, 126 programMethod.getName(programClass), 127 programMethod.getDescriptor(programClass)) + 128 " -> " + 129 newName); 130 } 131 } 132 133 134 136 140 private static String lineNumberRange(ProgramClass programClass, ProgramMember programMember) 141 { 142 String range = programMember.getLineNumberRange(programClass); 143 return range != null ? 144 (range + ":") : 145 ""; 146 } 147 } 148 | Popular Tags |