Ejemplo n.º 1
1
 private static void mapLines(
     TextBuffer code,
     StructLineNumberTableAttribute table,
     BytecodeMappingTracer tracer,
     int startLine) {
   // build line start offsets map
   HashMap<Integer, Set<Integer>> lineStartOffsets = new HashMap<Integer, Set<Integer>>();
   for (Map.Entry<Integer, Integer> entry : tracer.getMapping().entrySet()) {
     Integer lineNumber = entry.getValue() - startLine;
     Set<Integer> curr = lineStartOffsets.get(lineNumber);
     if (curr == null) {
       curr = new TreeSet<Integer>(); // requires natural sorting!
     }
     curr.add(entry.getKey());
     lineStartOffsets.put(lineNumber, curr);
   }
   String lineSeparator = DecompilerContext.getNewLineSeparator();
   StringBuilder text = code.getOriginalText();
   int pos = text.indexOf(lineSeparator);
   int lineNumber = 0;
   while (pos != -1) {
     Set<Integer> startOffsets = lineStartOffsets.get(lineNumber);
     if (startOffsets != null) {
       for (Integer offset : startOffsets) {
         int number = table.findLineNumber(offset);
         if (number >= 0) {
           code.setLineMapping(number, pos);
           break;
         }
       }
     }
     pos = text.indexOf(lineSeparator, pos + 1);
     lineNumber++;
   }
 }