diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/FinallyProcessor.java b/src/org/jetbrains/java/decompiler/modules/decompiler/FinallyProcessor.java index a0698ed..a49f8f3 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/FinallyProcessor.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/FinallyProcessor.java @@ -889,13 +889,16 @@ public class FinallyProcessor { if (seqPattern.length() < seqSample.length()) { // split in two blocks SimpleInstructionSequence seq = new SimpleInstructionSequence(); + LinkedList oldOffsets = new LinkedList(); for (int i = seqSample.length() - 1; i >= seqPattern.length(); i--) { seq.addInstruction(0, seqSample.getInstr(i), -1); + oldOffsets.addFirst(sample.getOldOffset(i)); seqSample.removeInstruction(i); } BasicBlock newblock = new BasicBlock(++graph.last_id); newblock.setSeq(seq); + newblock.getInstrOldOffsets().addAll(oldOffsets); List lstTemp = new ArrayList(); lstTemp.addAll(sample.getSuccs()); diff --git a/testData/results/TestClassLoop.dec b/testData/results/TestClassLoop.dec index 7cebd04..060fcec 100644 --- a/testData/results/TestClassLoop.dec +++ b/testData/results/TestClassLoop.dec @@ -13,7 +13,7 @@ public class TestClassLoop { while(true) { try { if(!var0) {// 33 - return; + return;// 34 } } finally { System.out.println("1");// 38 @@ -37,7 +37,7 @@ public class TestClassLoop { } } - System.out.println("4"); + System.out.println("4");// 58 } } } @@ -54,6 +54,7 @@ class 'pkg/TestClassLoop' { 4 10 d 10 f 14 + 1a 15 26 18 27 18 2a 18 @@ -71,6 +72,9 @@ class 'pkg/TestClassLoop' { 2a 33 2d 33 2f 33 + 37 39 + 3a 39 + 3c 39 } } @@ -78,13 +82,13 @@ Lines mapping: 23 <-> 6 29 <-> 11 33 <-> 15 +34 <-> 16 38 <-> 19 45 <-> 25 49 <-> 30 52 <-> 33 53 <-> 34 +58 <-> 40 Not mapped: -34 39 54 -58 diff --git a/testData/results/TestClassVar.dec b/testData/results/TestClassVar.dec index cf28a10..37aa5ec 100644 --- a/testData/results/TestClassVar.dec +++ b/testData/results/TestClassVar.dec @@ -50,6 +50,7 @@ class 'pkg/TestClassVar' { 20 11 26 12 29 12 + 2e 7 34 18 } diff --git a/testData/results/TestTryCatchFinally.dec b/testData/results/TestTryCatchFinally.dec index 2e917ff..cb59619 100644 --- a/testData/results/TestTryCatchFinally.dec +++ b/testData/results/TestTryCatchFinally.dec @@ -36,7 +36,7 @@ public class TestTryCatchFinally { System.out.println("Finally");// 55 } - return -1; + return -1;// 56 } } @@ -67,13 +67,16 @@ class 'pkg/TestTryCatchFinally' { method 'test (Ljava/lang/String;)I' { 1 30 4 30 + e 31 10 33 1a 33 23 33 26 33 + 31 38 34 35 35 35 38 35 + 3f 38 } } @@ -90,11 +93,11 @@ Lines mapping: 51 <-> 31 53 <-> 34 55 <-> 36 +56 <-> 39 +57 <-> 39 Not mapped: 25 28 32 35 52 -56 -57