1 19 20 package edu.umd.cs.findbugs; 21 22 import java.util.Iterator ; 23 import java.util.LinkedList ; 24 25 import org.apache.bcel.generic.InstructionHandle; 26 27 import edu.umd.cs.findbugs.ba.BasicBlock; 28 import edu.umd.cs.findbugs.ba.Edge; 29 30 35 public class InstructionScannerDriver { 36 private Iterator <Edge> edgeIter; 37 private LinkedList <InstructionScanner> scannerList; 38 39 private static final boolean DEBUG = SystemProperties.getBoolean("isd.debug"); 40 41 46 public InstructionScannerDriver(Iterator <Edge> edgeIter) { 47 this.edgeIter = edgeIter; 48 scannerList = new LinkedList <InstructionScanner>(); 49 } 50 51 58 public void execute(InstructionScannerGenerator generator) { 59 while (edgeIter.hasNext()) { 61 Edge edge = edgeIter.next(); 62 BasicBlock source = edge.getSource(); 63 if (DEBUG) System.out.println("ISD: scanning instructions in block " + source.getId()); 64 65 Iterator <InstructionHandle> i = source.instructionIterator(); 67 int count = 0; 68 while (i.hasNext()) { 69 InstructionHandle handle = i.next(); 70 71 if (generator.start(handle)) 73 scannerList.add(generator.createScanner()); 74 75 for (InstructionScanner scanner : scannerList) { 77 scanner.scanInstruction(handle); 78 } 79 80 ++count; 81 } 82 83 if (DEBUG) System.out.println("ISD: scanned " + count + " instructions"); 84 85 for (InstructionScanner scanner : scannerList) { 88 scanner.traverseEdge(edge); 89 } 90 } 91 } 92 } 93 94 | Popular Tags |