1 19 20 package edu.umd.cs.findbugs.detect; 21 22 import org.apache.bcel.Constants; 23 import org.apache.bcel.generic.ConstantPoolGen; 24 import org.apache.bcel.generic.Instruction; 25 import org.apache.bcel.generic.ObjectType; 26 27 import edu.umd.cs.findbugs.ba.Hierarchy; 28 import edu.umd.cs.findbugs.ba.Location; 29 import edu.umd.cs.findbugs.ba.RepositoryLookupFailureCallback; 30 31 36 public class InstanceFieldLoadStreamFactory implements StreamFactory { 37 private String streamBaseClass; 38 private String bugPatternType; 39 40 50 public InstanceFieldLoadStreamFactory(String streamBaseClass) { 51 this.streamBaseClass = streamBaseClass; 52 } 53 54 61 public InstanceFieldLoadStreamFactory setBugPatternType(String bugPatternType) { 62 this.bugPatternType = bugPatternType; 63 return this; 64 } 65 66 public Stream createStream(Location location, ObjectType type, ConstantPoolGen cpg, 67 RepositoryLookupFailureCallback lookupFailureCallback) { 68 69 Instruction ins = location.getHandle().getInstruction(); 70 if (ins.getOpcode() != Constants.GETFIELD) 71 return null; 72 73 String fieldClass = type.getClassName(); 74 try { 75 if (fieldClass.startsWith("[")) 76 return null; 77 if (!Hierarchy.isSubtype(fieldClass, streamBaseClass)) 78 return null; 79 80 Stream stream = new Stream(location, fieldClass, streamBaseClass); 81 stream.setIsOpenOnCreation(true); 82 stream.setOpenLocation(location); 83 if (bugPatternType != null) 84 stream.setInteresting(bugPatternType); 85 86 return stream; 88 } catch (ClassNotFoundException e) { 89 lookupFailureCallback.reportMissingClass(e); 90 return null; 91 } 92 } 93 } 94 95 | Popular Tags |