diff options
author | Stiver <stiver.mail@gmail.com> | 2014-08-13 22:04:51 +0200 |
---|---|---|
committer | Stiver <stiver.mail@gmail.com> | 2014-08-13 22:04:51 +0200 |
commit | 53ad2b920ec63b1d5900357e9d4725f74031daa9 (patch) | |
tree | 9c0ecca97f2d7d257b08be10d095352cbb0c3dad | |
parent | de249340fc5a0446701dcf8a117aa69ad6dd3f71 (diff) | |
download | fernflower-53ad2b920ec63b1d5900357e9d4725f74031daa9.tar fernflower-53ad2b920ec63b1d5900357e9d4725f74031daa9.tar.gz fernflower-53ad2b920ec63b1d5900357e9d4725f74031daa9.tar.lz fernflower-53ad2b920ec63b1d5900357e9d4725f74031daa9.tar.xz fernflower-53ad2b920ec63b1d5900357e9d4725f74031daa9.zip |
Fixed 'IDEA-128593: Wrong order of switch cases'
-rw-r--r-- | src/de/fernflower/modules/decompiler/stats/SwitchStatement.java | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/de/fernflower/modules/decompiler/stats/SwitchStatement.java b/src/de/fernflower/modules/decompiler/stats/SwitchStatement.java index 21fdfcf..f3d2231 100644 --- a/src/de/fernflower/modules/decompiler/stats/SwitchStatement.java +++ b/src/de/fernflower/modules/decompiler/stats/SwitchStatement.java @@ -266,15 +266,20 @@ public class SwitchStatement extends Statement { setPreds.remove(first); if(!setPreds.isEmpty()) { - Statement pred = setPreds.iterator().next(); // at most one predecessor node besides the head - for(int j=index+1;j<nodes.size();j++) { - if(nodes.get(j) == pred) { + Statement pred = setPreds.iterator().next(); // assumption: at most one predecessor node besides the head. May not hold true for obfuscated code. + for(int j=0;j<nodes.size();j++) { + if(j != (index - 1) && nodes.get(j) == pred) { nodes.add(j+1, stat); edges.add(j+1, edges.get(index)); - nodes.remove(index); - edges.remove(index); - index--; + if(j > index) { + nodes.remove(index); + edges.remove(index); + index--; + } else { + nodes.remove(index + 1); + edges.remove(index + 1); + } break; } } |