1 19 20 package edu.umd.cs.findbugs.ba.obl; 21 22 import java.util.HashMap ; 23 import java.util.Iterator ; 24 import java.util.Map ; 25 26 import org.apache.bcel.generic.ObjectType; 27 28 import edu.umd.cs.findbugs.annotations.SuppressWarnings; 29 import edu.umd.cs.findbugs.ba.Hierarchy; 30 31 35 public class ObligationFactory { 36 private Map <String , Obligation> classNameToObligationMap; 37 38 41 @SuppressWarnings ("ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD") 42 public ObligationFactory() { 43 this.classNameToObligationMap = new HashMap <String , Obligation>(); 44 } 46 47 public int getMaxObligationTypes() { 48 return classNameToObligationMap.size(); 49 } 50 51 public Iterator <Obligation> obligationIterator() { 52 return classNameToObligationMap.values().iterator(); 53 } 54 55 66 public Obligation getObligationByType(ObjectType type) 67 throws ClassNotFoundException { 68 for (Iterator <Obligation> i = obligationIterator(); i.hasNext(); ) { 69 Obligation obligation = i.next(); 70 if (Hierarchy.isSubtype(type, obligation.getType())) 71 return obligation; 72 } 73 return null; 74 } 75 76 public Obligation addObligation(String className) { 77 int nextId = classNameToObligationMap.size(); 78 Obligation obligation = new Obligation(className, nextId); 79 if (classNameToObligationMap.put(className, obligation) != null) { 80 throw new IllegalStateException ("Obligation " + className + 81 " added multiple times"); 82 } 83 return obligation; 84 } 85 86 public Obligation getObligationById(int id) { 87 for (Obligation obligation : classNameToObligationMap.values()) { 88 if (obligation.getId() == id) 89 return obligation; 90 } 91 return null; 92 } 93 94 101 public ObligationSet createObligationSet() { 102 return new ObligationSet(getMaxObligationTypes(), this); 103 } 104 } 105 106 | Popular Tags |