private boolean verifyFinallyEx(ControlFlowGraph graph, CatchAllStatement fstat, Record information) { Set<BasicBlock> tryBlocks = getAllBasicBlocks(fstat.getFirst()); Set<BasicBlock> catchBlocks = getAllBasicBlocks(fstat.getHandler()); BasicBlock first = fstat.getHandler().getBasichead().getBlock(); boolean skippedFirst = false; removeExceptionInstructionsEx(fstat.getHandler().getBasichead().getBlock(), 1, finallytype);
BasicBlock handler = fin.getHandler().getBasichead().getBlock();
private Record getFinallyInformation(StructMethod mt, RootStatement root, CatchAllStatement fstat) { Map<BasicBlock, Boolean> mapLast = new HashMap<>(); BasicBlockStatement firstBlockStatement = fstat.getHandler().getBasichead(); BasicBlock firstBasicBlock = firstBlockStatement.getBlock(); Instruction instrFirst = firstBasicBlock.getInstruction(0); Statement handler = fstat.getHandler(); for (StatEdge edge : blockStatement.getSuccessorEdges(Statement.STATEDGE_DIRECT_ALL)) { if (edge.getType() != StatEdge.TYPE_REGULAR && handler.containsStatement(blockStatement) if (fstat.getHandler().type == Statement.TYPE_BASICBLOCK) {
saveEdge(sourcenode, catchall.getHandler(), StatEdge.TYPE_REGULAR, isFinallyExit ? finallyShortRangeSource : null, finallyLongRangeSource, finallyShortRangeEntry, finallyLongRangeEntry, isFinallyMonitorExceptionPath); stack.add(new StackEntry(catchall, Boolean.TRUE, edgetype, destination, catchall.getHandler(), finallyLongRangeEntry == null ? catchall.getHandler() : finallyLongRangeEntry, sourcenode, finallyLongRangeSource, false)); statEntry.succEdges = lstSuccEdges; lstStackStatements.addFirst(statEntry); lstStackStatements.addFirst(new StatementStackEntry(catchall.getHandler(), stack, null));
if (ca.getFirst().isContainsMonitorExit() && ca.getHandler().isContainsMonitorExit()) { SynchronizedStatement sync = new SynchronizedStatement(current, ca.getFirst(), ca.getHandler()); sync.setAllParent();
private boolean verifyFinallyEx(ControlFlowGraph graph, CatchAllStatement fstat, Record information) { HashSet<BasicBlock> catchBlocks = getAllBasicBlocks(fstat.getHandler()); BasicBlock first = fstat.getHandler().getBasichead().getBlock(); boolean skippedFirst = false; removeExceptionInstructionsEx(fstat.getHandler().getBasichead().getBlock(), 1, finallytype);
BasicBlock handler = fin.getHandler().getBasichead().getBlock();
saveEdge(sourcenode, catchall.getHandler(), StatEdge.TYPE_REGULAR, isFinallyExit ? finallyShortRangeSource : null, finallyLongRangeSource, finallyShortRangeEntry, finallyLongRangeEntry, isFinallyMonitorExceptionPath); stack.add(new StackEntry(catchall, Boolean.TRUE, edgetype, destination, catchall.getHandler(), finallyLongRangeEntry == null ? catchall.getHandler() : finallyLongRangeEntry, sourcenode, finallyLongRangeSource, false)); statEntry.succEdges = lstSuccEdges; lstStackStatements.addFirst(statEntry); lstStackStatements.addFirst(new StatementStackEntry(catchall.getHandler(), stack, null));
private Record getFinallyInformation(StructMethod mt, RootStatement root, CatchAllStatement fstat) { Map<BasicBlock, Boolean> mapLast = new HashMap<>(); BasicBlockStatement firstBlockStatement = fstat.getHandler().getBasichead(); BasicBlock firstBasicBlock = firstBlockStatement.getBlock(); Instruction instrFirst = firstBasicBlock.getInstruction(0); Statement handler = fstat.getHandler(); for (StatEdge edge : blockStatement.getSuccessorEdges(Statement.STATEDGE_DIRECT_ALL)) { if (edge.getType() != StatEdge.TYPE_REGULAR && handler.containsStatement(blockStatement) if (fstat.getHandler().type == Statement.TYPE_BASICBLOCK) {
if (ca.getFirst().isContainsMonitorExit() && ca.getHandler().isContainsMonitorExit()) { SynchronizedStatement sync = new SynchronizedStatement(current, ca.getFirst(), ca.getHandler()); sync.setAllParent();