private static void addToPostReversePostOrderList(Statement stat, List<Statement> lst, HashSet<Statement> setVisited) { if (setVisited.contains(stat)) { // because of not considered exception edges, s. isExitComponent. Should be rewritten, if possible. return; } setVisited.add(stat); for (StatEdge prededge : stat.getEdges(StatEdge.TYPE_REGULAR | StatEdge.TYPE_EXCEPTION, DIRECTION_BACKWARD)) { Statement pred = prededge.getSource(); if (!setVisited.contains(pred)) { addToPostReversePostOrderList(pred, lst, setVisited); } } lst.add(0, stat); }
public List<Statement> getPostReversePostOrderList(List<Statement> lstexits) { List<Statement> res = new ArrayList<>(); if (lstexits == null) { StrongConnectivityHelper schelper = new StrongConnectivityHelper(this); lstexits = StrongConnectivityHelper.getExitReps(schelper.getComponents()); } HashSet<Statement> setVisited = new HashSet<>(); for (Statement exit : lstexits) { addToPostReversePostOrderList(exit, res, setVisited); } if (res.size() != stats.size()) { throw new RuntimeException("computing post reverse post order failed!"); } return res; }
private static void addToPostReversePostOrderList(Statement stat, List<Statement> lst, HashSet<Statement> setVisited) { if (setVisited.contains(stat)) { // because of not considered exception edges, s. isExitComponent. Should be rewritten, if possible. return; } setVisited.add(stat); for (StatEdge prededge : stat.getEdges(StatEdge.TYPE_REGULAR | StatEdge.TYPE_EXCEPTION, DIRECTION_BACKWARD)) { Statement pred = prededge.getSource(); if (!setVisited.contains(pred)) { addToPostReversePostOrderList(pred, lst, setVisited); } } lst.add(0, stat); }
public List<Statement> getPostReversePostOrderList(List<Statement> lstexits) { List<Statement> res = new ArrayList<>(); if (lstexits == null) { StrongConnectivityHelper schelper = new StrongConnectivityHelper(this); lstexits = StrongConnectivityHelper.getExitReps(schelper.getComponents()); } HashSet<Statement> setVisited = new HashSet<>(); for (Statement exit : lstexits) { addToPostReversePostOrderList(exit, res, setVisited); } if (res.size() != stats.size()) { throw new RuntimeException("computing post reverse post order failed!"); } return res; }