mirror of
https://github.com/moparisthebest/fernflower
synced 2025-02-16 23:10:15 -05:00
decompiler: registry flag to dump original line numbers as comments
This commit is contained in:
parent
eb3db8dc8b
commit
92af36f412
@ -285,6 +285,9 @@ public class ClassesProcessor {
|
||||
if (DecompilerContext.getOption(IFernflowerPreferences.BYTECODE_SOURCE_MAPPING)) {
|
||||
BytecodeSourceMapper mapper = DecompilerContext.getBytecodeSourceMapper();
|
||||
mapper.addTotalOffset(total_offset_lines);
|
||||
if (DecompilerContext.getOption(IFernflowerPreferences.DUMP_ORIGINAL_LINES)) {
|
||||
buffer.dumpOriginalLineNumbers(mapper.getOriginalLinesMapping());
|
||||
}
|
||||
if (DecompilerContext.getOption(IFernflowerPreferences.UNIT_TEST_MODE)) {
|
||||
buffer.appendLineSeparator();
|
||||
mapper.dumpMapping(buffer, true);
|
||||
|
@ -104,6 +104,9 @@ public class TextBuffer {
|
||||
public String toString() {
|
||||
String original = myStringBuilder.toString();
|
||||
if (myLineToOffsetMapping == null || myLineToOffsetMapping.isEmpty()) {
|
||||
if (myLineMapping != null) {
|
||||
return addOriginalLineNumbers();
|
||||
}
|
||||
return original;
|
||||
}
|
||||
else {
|
||||
@ -140,6 +143,26 @@ public class TextBuffer {
|
||||
}
|
||||
}
|
||||
|
||||
private String addOriginalLineNumbers() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
int lineStart = 0, lineEnd;
|
||||
int count = 0, length = myLineSeparator.length();
|
||||
while ((lineEnd = myStringBuilder.indexOf(myLineSeparator, lineStart)) > 0) {
|
||||
++count;
|
||||
sb.append(myStringBuilder.substring(lineStart, lineEnd));
|
||||
Integer integer = myLineMapping.get(count);
|
||||
if (integer != null) {
|
||||
sb.append("// ").append(integer);
|
||||
}
|
||||
sb.append(myLineSeparator);
|
||||
lineStart = lineEnd + length;
|
||||
}
|
||||
if (lineStart < myStringBuilder.length()) {
|
||||
sb.append(myStringBuilder.substring(lineStart));
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private void appendLines(StringBuilder res, String[] srcLines, int from, int to, int requiredLineNumber) {
|
||||
if (to - from > requiredLineNumber) {
|
||||
List<String> strings = compactLines(Arrays.asList(srcLines).subList(from, to) ,requiredLineNumber);
|
||||
@ -278,4 +301,14 @@ public class TextBuffer {
|
||||
public StringBuilder getOriginalText() {
|
||||
return myStringBuilder;
|
||||
}
|
||||
|
||||
private Map<Integer, Integer> myLineMapping = null; // new to original
|
||||
public void dumpOriginalLineNumbers(int[] lineMapping) {
|
||||
if (lineMapping.length > 0) {
|
||||
myLineMapping = new HashMap<Integer, Integer>();
|
||||
for (int i = 0; i < lineMapping.length; i+=2) {
|
||||
myLineMapping.put(lineMapping[i+1], lineMapping[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -54,6 +54,7 @@ public interface IFernflowerPreferences {
|
||||
String INDENT_STRING = "ind";
|
||||
String BANNER = "ban";
|
||||
|
||||
String DUMP_ORIGINAL_LINES = "__dump_original_lines__";
|
||||
String UNIT_TEST_MODE = "__unit_test_mode__";
|
||||
|
||||
String LINE_SEPARATOR_WIN = "\r\n";
|
||||
@ -91,5 +92,6 @@ public interface IFernflowerPreferences {
|
||||
put(INDENT_STRING, " ");
|
||||
put(BANNER, "");
|
||||
put(UNIT_TEST_MODE, "0");
|
||||
put(DUMP_ORIGINAL_LINES, "0");
|
||||
}});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user