public boolean containsStatement(Statement stat) { return this == stat || containsStatementStrict(stat); }
public boolean containsStatementStrict(Statement stat) { if (stats.contains(stat)) { return true; } for (Statement st : stats) { if (st.containsStatementStrict(stat)) { return true; } } return false; }
private static boolean existsPath(Statement from, Statement to) { for (StatEdge edge : to.getAllPredecessorEdges()) { if (from.containsStatementStrict(edge.getSource())) { return true; } } return false; }
if (!closure.containsStatementStrict(edge_example.closure)) { closure = edge_example.closure; if (!closure.containsStatementStrict(edge_example.closure)) { closure = edge_example.closure;
private static boolean isSequenceDisbandable(Statement block, Statement next) { Statement last = block.getStats().getLast(); List<StatEdge> lstSuccs = last.getAllSuccessorEdges(); if (!lstSuccs.isEmpty()) { if (lstSuccs.get(0).getDestination() != next) { return false; } } for (StatEdge edge : next.getPredecessorEdges(StatEdge.TYPE_BREAK)) { if (last != edge.getSource() && !last.containsStatementStrict(edge.getSource())) { return false; } } return true; }
private static Statement getMinContinueClosure(StatEdge edge) { Statement closure = edge.closure; while (true) { boolean found = false; for (Statement st : closure.getStats()) { if (st.containsStatementStrict(edge.getSource())) { if (MergeHelper.isDirectPath(st, edge.getDestination())) { closure = st; found = true; break; } } } if (!found) { break; } } return closure; } }
private static boolean noExitLabels(Statement block, Statement sequence) { for (StatEdge edge : block.getAllSuccessorEdges()) { if (edge.getType() != StatEdge.TYPE_REGULAR && edge.getDestination().type != Statement.TYPE_DUMMYEXIT) { if (!sequence.containsStatementStrict(edge.getDestination())) { return false; } } } for (Statement st : block.getStats()) { if (!noExitLabels(st, sequence)) { return false; } } return true; }
public static void lowClosures(Statement stat) { for (StatEdge edge : new ArrayList<>(stat.getLabelEdges())) { if (edge.getType() == StatEdge.TYPE_BREAK) { // FIXME: ? for (Statement st : stat.getStats()) { if (st.containsStatementStrict(edge.getSource())) { if (MergeHelper.isDirectPath(st, edge.getDestination())) { st.addLabeledEdge(edge); } } } } } for (Statement st : stat.getStats()) { lowClosures(st); } }
private static boolean sameCatchRanges(StatEdge edge) { Statement from = edge.getSource(); Statement to = edge.getDestination(); while (true) { Statement parent = from.getParent(); if (parent.containsStatementStrict(to)) { break; } if (parent.type == Statement.TYPE_TRYCATCH || parent.type == Statement.TYPE_CATCHALL) { if (parent.getFirst() == from) { return false; } } else if (parent.type == Statement.TYPE_SYNCRONIZED) { if (parent.getStats().get(1) == from) { return false; } } from = parent; } return true; }
if (this == edge.getDestination() || this.containsStatementStrict(edge.getDestination())) { edge.closure = null;
public static void lowContinueLabels(Statement stat, HashSet<StatEdge> edges) { boolean ok = (stat.type != Statement.TYPE_DO); if (!ok) { DoStatement dostat = (DoStatement)stat; ok = dostat.getLooptype() == DoStatement.LOOP_DO || dostat.getLooptype() == DoStatement.LOOP_WHILE || (dostat.getLooptype() == DoStatement.LOOP_FOR && dostat.getIncExprent() == null); } if (ok) { edges.addAll(stat.getPredecessorEdges(StatEdge.TYPE_CONTINUE)); } if (ok && stat.type == Statement.TYPE_DO) { for (StatEdge edge : edges) { if (stat.containsStatementStrict(edge.getSource())) { edge.getDestination().removePredecessor(edge); edge.getSource().changeEdgeNode(Statement.DIRECTION_FORWARD, edge, stat); stat.addPredecessor(edge); stat.addLabeledEdge(edge); } } } for (Statement st : stat.getStats()) { if (st == stat.getFirst()) { lowContinueLabels(st, edges); } else { lowContinueLabels(st, new HashSet<>()); } } }
if (stat.containsStatementStrict(edge.getSource())) { edge.getSource().changeEdgeType(DIRECTION_FORWARD, edge, StatEdge.TYPE_BREAK); stat.addLabeledEdge(edge); stat.containsStatementStrict(prededge.getSource())) { prededge.getSource().changeEdgeType(DIRECTION_FORWARD, prededge, StatEdge.TYPE_CONTINUE); stat.addLabeledEdge(prededge);
if (!edge.explicit && stat.containsStatementStrict(edge.getSource()) && MergeHelper.isDirectPath(edge.getSource().getParent(), bstat)) { bstat.addPredecessor(edge); if (!stat.containsStatementStrict(edge.closure)) { stat.addLabeledEdge(edge);
public boolean containsStatement(Statement stat) { return this == stat || containsStatementStrict(stat); }
private static boolean isOkClosure(Statement closure, Statement source, Statement stat) { boolean ok = false; if (stat != null && stat.containsStatementStrict(source)) { List<StatEdge> lst = stat.getAllSuccessorEdges(); ok = lst.isEmpty(); if (!ok) { StatEdge edge = lst.get(0); ok = (edge.closure == closure && edge.getType() == StatEdge.TYPE_BREAK); } } return ok; }
private static boolean existsPath(Statement from, Statement to) { for (StatEdge edge : to.getAllPredecessorEdges()) { if (from.containsStatementStrict(edge.getSource())) { return true; } } return false; }
public boolean containsStatementStrict(Statement stat) { if (stats.contains(stat)) { return true; } for (int i = 0; i < stats.size(); i++) { if (stats.get(i).containsStatementStrict(stat)) { return true; } } return false; }
private static Statement getNextBreakLift(Statement stat, StatEdge edge, HashMap<Integer, Boolean> statLabeled, Statement max) { Statement closure = stat.getParent(); while (closure != null && closure != max && !closure.containsStatementStrict(edge.getDestination())) { boolean edge_labeled = LowBreakHelper.isBreakEdgeLabeled(edge.getSource(), closure); boolean stat_labeled = statLabeled.containsKey(closure.id) ? statLabeled.get(closure.id) : closure.isLabeled(); if (stat_labeled || !edge_labeled) { return closure; } closure = closure.getParent(); } return null; }
private static boolean isSequenceDisbandable(Statement block, Statement next) { Statement last = block.getStats().getLast(); List<StatEdge> lstSuccs = last.getAllSuccessorEdges(); if (!lstSuccs.isEmpty()) { if (lstSuccs.get(0).getDestination() != next) { return false; } } for (StatEdge edge : next.getPredecessorEdges(StatEdge.TYPE_BREAK)) { if (last != edge.getSource() && !last.containsStatementStrict(edge.getSource())) { return false; } } return true; }
private static Statement getNextBreakLift(Statement stat, StatEdge edge) { Statement closure = stat.getParent(); while (closure != null && !closure.containsStatementStrict(edge.getDestination())) { boolean labeled = isBreakEdgeLabeled(edge.getSource(), closure); if (closure.isLabeled() || !labeled) { return closure; } closure = closure.getParent(); } return null; } }