1 19 20 package edu.umd.cs.findbugs.ba.vna; 21 22 import java.util.BitSet ; 23 import java.util.HashMap ; 24 import java.util.Map ; 25 26 import org.apache.bcel.generic.InstructionHandle; 27 import org.apache.bcel.generic.MethodGen; 28 29 import edu.umd.cs.findbugs.ba.XField; 30 31 41 public class LoadedFieldSet { 42 45 public static class LoadStoreCount { 46 int loadCount, storeCount; 47 48 49 public int getLoadCount() { 50 return loadCount; 51 } 52 53 54 public int getStoreCount() { 55 return storeCount; 56 } 57 } 58 59 private Map <XField, LoadStoreCount> loadStoreCountMap; 62 private Map <InstructionHandle, XField> handleToFieldMap; 63 private BitSet loadHandleSet; 64 65 71 public LoadedFieldSet(MethodGen methodGen) { 72 this.loadStoreCountMap = new HashMap <XField, LoadStoreCount>(); 74 this.handleToFieldMap = new HashMap <InstructionHandle, XField>(); 75 this.loadHandleSet = new BitSet (); 76 } 77 78 84 public LoadStoreCount getLoadStoreCount(XField field) { 85 LoadStoreCount loadStoreCount = loadStoreCountMap.get(field); 86 if (loadStoreCount == null) { 87 loadStoreCount = new LoadStoreCount(); 88 loadStoreCountMap.put(field, loadStoreCount); 89 } 90 return loadStoreCount; 91 } 92 93 99 public void addLoad(InstructionHandle handle, XField field) { 100 getLoadStoreCount(field).loadCount++; 101 handleToFieldMap.put(handle, field); 102 loadHandleSet.set(handle.getPosition()); 103 } 104 105 111 public void addStore(InstructionHandle handle, XField field) { 112 getLoadStoreCount(field).storeCount++; 113 handleToFieldMap.put(handle, field); 114 } 115 116 123 public XField getField(InstructionHandle handle) { 124 return handleToFieldMap.get(handle); 125 } 126 127 135 public boolean isLoaded(XField field) { 136 return getLoadStoreCount(field).loadCount > 0; 137 } 138 139 145 public boolean instructionIsLoad(InstructionHandle handle) { 146 return loadHandleSet.get(handle.getPosition()); 147 } 148 } 149 150 | Popular Tags |