1 21 package proguard.retrace; 22 23 import java.io.*; 24 import java.util.*; 25 26 import proguard.obfuscate.MappingProcessor; 27 28 29 35 class StackTrace implements MappingProcessor 36 { 37 private boolean verbose; 39 40 private List stackTraceItems = new ArrayList(); 42 43 44 49 public StackTrace(boolean verbose) 50 { 51 this.verbose = verbose; 52 } 53 54 55 58 public void read(File stackTraceFile) throws IOException 59 { 60 LineNumberReader lineNumberReader = null; 61 62 try 63 { 64 Reader reader = stackTraceFile == null ? 65 (Reader)new InputStreamReader(System.in) : 66 (Reader)new BufferedReader(new FileReader(stackTraceFile)); 67 68 lineNumberReader = new LineNumberReader(reader); 69 70 while (true) 72 { 73 String line = lineNumberReader.readLine(); 74 if (line == null) 75 { 76 break; 77 } 78 79 line = line.trim(); 80 if (line.length() == 0) 81 { 82 continue; 83 } 84 85 StackTraceItem item = new StackTraceItem(verbose); 87 88 item.parse(line); 89 90 stackTraceItems.add(item); 91 } 92 } 93 catch (IOException ex) 94 { 95 throw new IOException("Can't read stack trace (" + ex.getMessage() + ")"); 96 } 97 finally 98 { 99 if (stackTraceFile != null && 100 lineNumberReader != null) 101 { 102 try 103 { 104 lineNumberReader.close(); 105 } 106 catch (IOException ex) 107 { 108 } 109 } 110 } 111 } 112 113 114 117 public void print() 118 { 119 for (int index = 0; index < stackTraceItems.size(); index++) 121 { 122 StackTraceItem item = (StackTraceItem)stackTraceItems.get(index); 123 124 item.print(); 125 } 126 } 127 128 129 131 public boolean processClassMapping(String className, 132 String newClassName) 133 { 134 boolean present = false; 136 for (int index = 0; index < stackTraceItems.size(); index++) 137 { 138 StackTraceItem item = (StackTraceItem)stackTraceItems.get(index); 139 140 present |= item.processClassMapping(className, 141 newClassName); 142 } 143 144 return present; 145 } 146 147 148 public void processFieldMapping(String className, 149 String fieldType, 150 String fieldName, 151 String newFieldName) 152 { 153 } 155 156 157 public void processMethodMapping(String className, 158 int firstLineNumber, 159 int lastLineNumber, 160 String methodReturnType, 161 String methodNameAndArguments, 162 String newMethodName) 163 { 164 for (int index = 0; index < stackTraceItems.size(); index++) 166 { 167 StackTraceItem item = (StackTraceItem)stackTraceItems.get(index); 168 169 item.processMethodMapping(className, 170 firstLineNumber, 171 lastLineNumber, 172 methodReturnType, 173 methodNameAndArguments, 174 newMethodName); 175 } 176 } 177 } 178 | Popular Tags |