use of org.candle.decompiler.instruction.graph.vertex.InstructionComparator in project candle-decompiler by bradsdavis.
the class ConditionEdgeEnhancer method process.
@Override
public void process(InstructionHandle ih) {
if (ih instanceof BranchHandle) {
// ok, now we need to replace existing successor edges appropriately.
BranchHandle bh = (BranchHandle) ih;
List<InstructionHandle> successors = igc.getSuccessors(ih);
TreeSet<InstructionHandle> orderedSuccessors = new TreeSet<InstructionHandle>(new InstructionComparator());
orderedSuccessors.addAll(successors);
if (successors.size() == 2) {
// lowest will be true condition....
IntermediateEdge truePath = igc.getGraph().getEdge(ih, orderedSuccessors.first());
ConditionEdge trueCondition = createConditionalEdge(truePath, true);
igc.getGraph().removeEdge(truePath);
igc.getGraph().addEdge(ih, orderedSuccessors.first(), trueCondition);
// highest will be false condition....
IntermediateEdge falsePath = igc.getGraph().getEdge(ih, orderedSuccessors.last());
ConditionEdge falseCondition = createConditionalEdge(falsePath, false);
igc.getGraph().removeEdge(falsePath);
igc.getGraph().addEdge(ih, orderedSuccessors.last(), falseCondition);
}
}
}
Aggregations