private Block createBlock(Block successor) { Block result = createBlock(); result.addSuccessor(successor); return result; }
private Block createBranch(Tree terminator, Block trueBranch, Block falseBranch) { Block result = createBlock(); result.terminator = terminator; result.addFalseSuccessor(falseBranch); result.addTrueSuccessor(trueBranch); return result; }
private void buildConditionalBinaryLHS(BinaryExpressionTree tree, Block trueBlock, Block falseBlock) { currentBlock = createBlock(); Block toComplete = currentBlock; build(tree.leftOperand()); toComplete.terminator = tree; toComplete.addFalseSuccessor(falseBlock); toComplete.addTrueSuccessor(trueBlock); }
private static boolean isLiveInMethodEntry(Symbol privateFieldSymbol, MethodTree methodTree) { CFG cfg = CFG.build(methodTree); LiveVariables liveVariables = LiveVariables.analyzeWithFields(cfg); return liveVariables.getIn(cfg.entryBlock()).contains(privateFieldSymbol); }
public static Map<Tree, CFGLoop> getCFGLoops(CFG cfg) { Map<Tree, CFGLoop> cfgLoops = new HashMap<>(); for (CFG.Block block : cfg.blocks()) { if (CFGLoop.isStarting(block)) { Tree terminator = block.terminator(); if (!cfgLoops.containsKey(terminator)) { create(block, cfgLoops); } } } return cfgLoops; }
private static CFGLoop create(CFG.Block block, Map<Tree, CFGLoop> container) { CFGLoop loop = new CFGLoop(block); container.put(block.terminator(), loop); loop.initialize(block, container); return loop; } }
private boolean returnsToStart(CFG.Block block, Map<Tree, CFGLoop> container, Set<CFG.Block> visitedBlocks) { Set<Block> localSuccessors = localSuccessors(block, container); if (localSuccessors == null) { return true; } boolean answer = false; for (CFG.Block successor : localSuccessors) { if (startingBlock.id() == successor.id()) { answer = true; } else { answer |= collectBlocks(successor, container, visitedBlocks); } } return answer; }
/** * Returns LiveVariables object with information concerning local variables and parameters */ public static LiveVariables analyze(CFG cfg) { return analyze(cfg, false); }
@Override public int hashCode() { if(hashcode == 0) { hashcode = block.id() * 31 + i; } return hashcode; }
public static CFG buildCFG(List<? extends Tree> trees) { return new CFG(trees, null, false); } public static CFG build(MethodTree tree) {
private void buildConditionalBinaryLHS(BinaryExpressionTree tree, Block trueBlock, Block falseBlock) { currentBlock = createBlock(); Block toComplete = currentBlock; build(tree.leftOperand()); toComplete.terminator = tree; toComplete.addFalseSuccessor(falseBlock); toComplete.addTrueSuccessor(trueBlock); }
private Block createBranch(Tree terminator, Block trueBranch, Block falseBranch) { Block result = createBlock(); result.terminator = terminator; result.addFalseSuccessor(falseBranch); result.addTrueSuccessor(trueBranch); return result; }
private Block createBlock(Block successor) { Block result = createBlock(); result.addSuccessor(successor); return result; }
/** * Returns LiveVariables object with information concerning local variables, parameters and fields */ public static LiveVariables analyzeWithFields(CFG cfg) { return analyze(cfg, true); }
private Block createBranch(Tree terminator, Block trueBranch, Block falseBranch) { Block result = createBlock(); result.terminator = terminator; result.addFalseSuccessor(falseBranch); result.addTrueSuccessor(trueBranch); return result; }
private Block createBlock(Block successor) { Block result = createBlock(); result.addSuccessor(successor); return result; }
@Override public String toString() { return "B" + programPoint.block.id() + "." + programPoint.i + ": " + programState; }