Fixed 'IDEA-128593: Wrong order of switch cases'

This commit is contained in:
Stiver 2014-08-13 22:04:51 +02:00
parent de249340fc
commit 53ad2b920e
1 changed files with 11 additions and 6 deletions

View File

@ -266,15 +266,20 @@ public class SwitchStatement extends Statement {
setPreds.remove(first); setPreds.remove(first);
if(!setPreds.isEmpty()) { if(!setPreds.isEmpty()) {
Statement pred = setPreds.iterator().next(); // at most one predecessor node besides the head Statement pred = setPreds.iterator().next(); // assumption: at most one predecessor node besides the head. May not hold true for obfuscated code.
for(int j=index+1;j<nodes.size();j++) { for(int j=0;j<nodes.size();j++) {
if(nodes.get(j) == pred) { if(j != (index - 1) && nodes.get(j) == pred) {
nodes.add(j+1, stat); nodes.add(j+1, stat);
edges.add(j+1, edges.get(index)); edges.add(j+1, edges.get(index));
nodes.remove(index); if(j > index) {
edges.remove(index); nodes.remove(index);
index--; edges.remove(index);
index--;
} else {
nodes.remove(index + 1);
edges.remove(index + 1);
}
break; break;
} }
} }