'Switch' statements with single case converted to 'if', other warnings fixed

master
Tagir Valeev 6 years ago
parent c7bdab8b00
commit 32674967de
  1. 49
      src/org/jetbrains/java/decompiler/modules/decompiler/ExitHelper.java
  2. 13
      src/org/jetbrains/java/decompiler/modules/decompiler/MergeHelper.java

@ -80,32 +80,31 @@ public class ExitHelper {
} }
} }
switch (stat.type) { if (stat.type == Statement.TYPE_IF) {
case Statement.TYPE_IF: IfStatement ifst = (IfStatement)stat;
IfStatement ifst = (IfStatement)stat; if (ifst.getIfstat() == null) {
if (ifst.getIfstat() == null) { StatEdge ifedge = ifst.getIfEdge();
StatEdge ifedge = ifst.getIfEdge(); dest = isExitEdge(ifedge);
dest = isExitEdge(ifedge); if (dest != null) {
if (dest != null) { BasicBlockStatement bstat = new BasicBlockStatement(new BasicBlock(
BasicBlockStatement bstat = new BasicBlockStatement(new BasicBlock( DecompilerContext.getCounterContainer().getCounterAndIncrement(CounterContainer.STATEMENT_COUNTER)));
DecompilerContext.getCounterContainer().getCounterAndIncrement(CounterContainer.STATEMENT_COUNTER))); bstat.setExprents(DecHelper.copyExprentList(dest.getExprents()));
bstat.setExprents(DecHelper.copyExprentList(dest.getExprents()));
ifst.getFirst().removeSuccessor(ifedge);
ifst.getFirst().removeSuccessor(ifedge); StatEdge newedge = new StatEdge(StatEdge.TYPE_REGULAR, ifst.getFirst(), bstat);
StatEdge newedge = new StatEdge(StatEdge.TYPE_REGULAR, ifst.getFirst(), bstat); ifst.getFirst().addSuccessor(newedge);
ifst.getFirst().addSuccessor(newedge); ifst.setIfEdge(newedge);
ifst.setIfEdge(newedge); ifst.setIfstat(bstat);
ifst.setIfstat(bstat); ifst.getStats().addWithKey(bstat, bstat.id);
ifst.getStats().addWithKey(bstat, bstat.id); bstat.setParent(ifst);
bstat.setParent(ifst);
StatEdge oldexitedge = dest.getAllSuccessorEdges().get(0);
StatEdge oldexitedge = dest.getAllSuccessorEdges().get(0); StatEdge newexitedge = new StatEdge(StatEdge.TYPE_BREAK, bstat, oldexitedge.getDestination());
StatEdge newexitedge = new StatEdge(StatEdge.TYPE_BREAK, bstat, oldexitedge.getDestination()); bstat.addSuccessor(newexitedge);
bstat.addSuccessor(newexitedge); oldexitedge.closure.addLabeledEdge(newexitedge);
oldexitedge.closure.addLabeledEdge(newexitedge); ret = 1;
ret = 1;
}
} }
}
} }
} }

@ -376,14 +376,13 @@ public class MergeHelper {
return stat; return stat;
} }
switch (stat.type) { if (stat.type == Statement.TYPE_SEQUENCE) {
case Statement.TYPE_SEQUENCE: for (int i = stat.getStats().size() - 1; i >= 0; i--) {
for (int i = stat.getStats().size() - 1; i >= 0; i--) { Statement tmp = getLastDirectData(stat.getStats().get(i));
Statement tmp = getLastDirectData(stat.getStats().get(i)); if (tmp == null || !tmp.getExprents().isEmpty()) {
if (tmp == null || !tmp.getExprents().isEmpty()) { return tmp;
return tmp;
}
} }
}
} }
return null; return null;
} }

Loading…
Cancel
Save