| 1 19 20 package edu.umd.cs.findbugs.ba; 21 22 import java.util.BitSet ; 23 import java.util.Iterator ; 24 25 import org.apache.bcel.classfile.ClassParser; 26 import org.apache.bcel.classfile.JavaClass; 27 import org.apache.bcel.classfile.Method; 28 29 import edu.umd.cs.findbugs.SystemProperties; 30 31 38 public class DominatorsAnalysis extends AbstractDominatorsAnalysis { 39 private DepthFirstSearch dfs; 40 41 48 public DominatorsAnalysis(CFG cfg, DepthFirstSearch dfs, boolean ignoreExceptionEdges) { 49 super(cfg, ignoreExceptionEdges); 50 this.dfs = dfs; 51 } 52 53 public boolean isForwards() { 54 return true; 55 } 56 57 public BlockOrder getBlockOrder(CFG cfg) { 58 return new ReversePostOrder(cfg, dfs); 59 } 60 61 public static void main(String [] argv) throws Exception { 62 if (argv.length != 1) { 63 System.err.println("Usage: " + DominatorsAnalysis.class.getName() + " <classfile>"); 64 System.exit(1); 65 } 66 67 DataflowTestDriver<BitSet , DominatorsAnalysis> driver = 68 new DataflowTestDriver<BitSet , DominatorsAnalysis>() { 69 70 73 @Override  74 public Dataflow<BitSet , DominatorsAnalysis> createDataflow(ClassContext classContext, Method method) throws CFGBuilderException, DataflowAnalysisException { 75 CFG cfg = classContext.getCFG(method); 76 DepthFirstSearch dfs = classContext.getDepthFirstSearch(method); 77 78 DominatorsAnalysis analysis = 79 new DominatorsAnalysis(cfg, dfs, SystemProperties.getBoolean("dominators.ignoreexceptionedges")); 80 81 Dataflow<BitSet , DominatorsAnalysis> dataflow = 82 new Dataflow<BitSet , DominatorsAnalysis>(cfg, analysis); 83 84 dataflow.execute(); 85 86 return dataflow; 87 } 88 89 }; 90 91 driver.execute(argv[0]); 92 } 93 } 94 95 | Popular Tags |