diff --git a/src/org/jetbrains/java/decompiler/main/collectors/BytecodeSourceMapper.java b/src/org/jetbrains/java/decompiler/main/collectors/BytecodeSourceMapper.java index ca37b5b..6cbaa83 100644 --- a/src/org/jetbrains/java/decompiler/main/collectors/BytecodeSourceMapper.java +++ b/src/org/jetbrains/java/decompiler/main/collectors/BytecodeSourceMapper.java @@ -1,6 +1,9 @@ package org.jetbrains.java.decompiler.main.collectors; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map.Entry; import org.jetbrains.java.decompiler.main.DecompilerContext; @@ -55,9 +58,14 @@ public class BytecodeSourceMapper { } buffer.appendIndent(1).append("method " + method_entry.getKey() + "{" + lineSeparator); - for(Entry line : method_mapping.entrySet()) { - String strOffset = offsetsToHex ? Integer.toHexString(line.getKey()): line.getKey().toString(); - buffer.appendIndent(2).append(strOffset).appendIndent(2).append((line.getValue() + offset_total) + lineSeparator); + List lstBytecodeOffsets = new ArrayList(method_mapping.keySet()); + Collections.sort(lstBytecodeOffsets); + + for(Integer offset : lstBytecodeOffsets) { + Integer line = method_mapping.get(offset); + + String strOffset = offsetsToHex ? Integer.toHexString(offset): line.toString(); + buffer.appendIndent(2).append(strOffset).appendIndent(2).append((line + offset_total) + lineSeparator); } buffer.appendIndent(1).append("}").appendLineSeparator(); is_first_method = false; diff --git a/testData/classes/pkg/TestClassSimpleBytecodeMapping.class b/testData/classes/pkg/TestClassSimpleBytecodeMapping.class new file mode 100644 index 0000000..1313994 Binary files /dev/null and b/testData/classes/pkg/TestClassSimpleBytecodeMapping.class differ diff --git a/testData/results/TestClassSimpleBytecodeMapping.dec b/testData/results/TestClassSimpleBytecodeMapping.dec new file mode 100644 index 0000000..ad02e64 --- /dev/null +++ b/testData/results/TestClassSimpleBytecodeMapping.dec @@ -0,0 +1,36 @@ +package pkg; + +public class TestClassSimpleBytecodeMapping { + public int test() { + System.out.println("before"); + if(Math.random() > 0.0D) { + System.out.println("0"); + return 0; + } else { + System.out.println("1"); + return 1; + } + } +} + +class test/TestClassSimpleBytecodeMapping{ + method test ()I{ + 0 4 + 3 4 + 5 4 + 8 5 + b 5 + c 5 + d 5 + 10 6 + 13 6 + 15 6 + 18 7 + 19 7 + 1a 9 + 1d 9 + 1f 9 + 22 10 + 23 10 + } +} diff --git a/testData/src/pkg/TestClassSimpleBytecodeMapping.java b/testData/src/pkg/TestClassSimpleBytecodeMapping.java new file mode 100644 index 0000000..8233fa9 --- /dev/null +++ b/testData/src/pkg/TestClassSimpleBytecodeMapping.java @@ -0,0 +1,20 @@ +package pkg; + +public class TestClassSimpleBytecodeMapping { + + public TestClassSimpleBytecodeMapping() {} + + public int test() { + + System.out.println("before"); + + if(Math.random() > 0) { + System.out.println("0"); + return 0; + } else { + System.out.println("1"); + return 1; + } + } + +}