private static Statement getCandidateForSplitting(Statement statement) { Statement candidateForSplitting = null; int sizeCandidateForSplitting = Integer.MAX_VALUE; int succsCandidateForSplitting = Integer.MAX_VALUE; for (Statement stat : statement.getStats()) { Set<Statement> setPreds = stat.getNeighboursSet(StatEdge.TYPE_REGULAR, Statement.DIRECTION_BACKWARD); if (setPreds.size() > 1) { int succCount = stat.getNeighboursSet(StatEdge.TYPE_REGULAR, Statement.DIRECTION_FORWARD).size(); if (succCount <= succsCandidateForSplitting) { int size = getStatementSize(stat) * (setPreds.size() - 1); if (succCount < succsCandidateForSplitting || size < sizeCandidateForSplitting) { candidateForSplitting = stat; sizeCandidateForSplitting = size; succsCandidateForSplitting = succCount; } } } } return candidateForSplitting; }
Set<Statement> setNew = stat.getNeighboursSet(StatEdge.TYPE_EXCEPTION, Statement.DIRECTION_FORWARD);
Set<Statement> setDest = head.getNeighboursSet(StatEdge.TYPE_REGULAR, Statement.DIRECTION_FORWARD); Set<Statement> setPred = stat.getNeighboursSet(StatEdge.TYPE_REGULAR, Statement.DIRECTION_BACKWARD); setPred.remove(head); if (setPred.contains(stat)) { Statement pred = setPred.iterator().next(); while (lst.contains(pred)) { Set<Statement> setPredTemp = pred.getNeighboursSet(StatEdge.TYPE_REGULAR, Statement.DIRECTION_BACKWARD); setPredTemp.remove(head); Set<Statement> setSucc = stat.getNeighboursSet(Statement.STATEDGE_DIRECT_ALL, Statement.DIRECTION_FORWARD); setSucc.retainAll(setDest); Set<Statement> set = statd.getNeighboursSet(StatEdge.TYPE_REGULAR, Statement.DIRECTION_BACKWARD); if (set.size() > 1) { post = statd;
public static boolean isDirectPath(Statement stat, Statement endstat) { Set<Statement> setStat = stat.getNeighboursSet(Statement.STATEDGE_DIRECT_ALL, Statement.DIRECTION_FORWARD); if (setStat.isEmpty()) { Statement parent = stat.getParent();
private static void cleanUpUnreachableBlocks(Statement stat) { boolean found; do { found = false; for (int i = 0; i < stat.getStats().size(); i++) { Statement st = stat.getStats().get(i); cleanUpUnreachableBlocks(st); if (st.type == Statement.TYPE_SEQUENCE && st.getStats().size() > 1) { Statement last = st.getStats().getLast(); Statement secondlast = st.getStats().get(st.getStats().size() - 2); if (last.getExprents() == null || !last.getExprents().isEmpty()) { if (!secondlast.hasBasicSuccEdge()) { Set<Statement> set = last.getNeighboursSet(Statement.STATEDGE_DIRECT_ALL, Statement.DIRECTION_BACKWARD); set.remove(secondlast); if (set.isEmpty()) { last.setExprents(new ArrayList<>()); found = true; break; } } } } } } while (found); }
private static Statement getCandidateForSplitting(Statement statement) { Statement candidateForSplitting = null; int sizeCandidateForSplitting = Integer.MAX_VALUE; int succsCandidateForSplitting = Integer.MAX_VALUE; for (Statement stat : statement.getStats()) { Set<Statement> setPreds = stat.getNeighboursSet(StatEdge.TYPE_REGULAR, Statement.DIRECTION_BACKWARD); if (setPreds.size() > 1) { int succCount = stat.getNeighboursSet(StatEdge.TYPE_REGULAR, Statement.DIRECTION_FORWARD).size(); if (succCount <= succsCandidateForSplitting) { int size = getStatementSize(stat) * (setPreds.size() - 1); if (succCount < succsCandidateForSplitting || size < sizeCandidateForSplitting) { candidateForSplitting = stat; sizeCandidateForSplitting = size; succsCandidateForSplitting = succCount; } } } } return candidateForSplitting; }
Set<Statement> setNew = stat.getNeighboursSet(StatEdge.TYPE_EXCEPTION, Statement.DIRECTION_FORWARD);
Set<Statement> setDest = head.getNeighboursSet(StatEdge.TYPE_REGULAR, Statement.DIRECTION_FORWARD); Set<Statement> setPred = stat.getNeighboursSet(StatEdge.TYPE_REGULAR, Statement.DIRECTION_BACKWARD); setPred.remove(head); if (setPred.contains(stat)) { Statement pred = setPred.iterator().next(); while (lst.contains(pred)) { Set<Statement> setPredTemp = pred.getNeighboursSet(StatEdge.TYPE_REGULAR, Statement.DIRECTION_BACKWARD); setPredTemp.remove(head); Set<Statement> setSucc = stat.getNeighboursSet(Statement.STATEDGE_DIRECT_ALL, Statement.DIRECTION_FORWARD); setSucc.retainAll(setDest); Set<Statement> set = statd.getNeighboursSet(StatEdge.TYPE_REGULAR, Statement.DIRECTION_BACKWARD); if (set.size() > 1) { post = statd;
public static boolean isDirectPath(Statement stat, Statement endstat) { Set<Statement> setStat = stat.getNeighboursSet(Statement.STATEDGE_DIRECT_ALL, Statement.DIRECTION_FORWARD); if (setStat.isEmpty()) { Statement parent = stat.getParent();
private static void cleanUpUnreachableBlocks(Statement stat) { boolean found; do { found = false; for (int i = 0; i < stat.getStats().size(); i++) { Statement st = stat.getStats().get(i); cleanUpUnreachableBlocks(st); if (st.type == Statement.TYPE_SEQUENCE && st.getStats().size() > 1) { Statement last = st.getStats().getLast(); Statement secondlast = st.getStats().get(st.getStats().size() - 2); if (last.getExprents() == null || !last.getExprents().isEmpty()) { if (!secondlast.hasBasicSuccEdge()) { Set<Statement> set = last.getNeighboursSet(Statement.STATEDGE_DIRECT_ALL, Statement.DIRECTION_BACKWARD); set.remove(secondlast); if (set.isEmpty()) { last.setExprents(new ArrayList<>()); found = true; break; } } } } } } while (found); }