1 19 package edu.umd.cs.findbugs.detect; 20 21 import edu.umd.cs.findbugs.*; 22 import edu.umd.cs.findbugs.ba.*; 23 import java.util.BitSet ; 24 import org.apache.bcel.Constants; 25 import org.apache.bcel.classfile.*; 26 27 31 public class URLProblems extends BytecodeScanningDetector { 32 33 final static String [] BAD_SIGNATURES = { "Map<Ljava/net/URL", 34 "Set<Ljava/net/URL" }; 35 36 final private BugReporter bugReporter; 37 38 public URLProblems(BugReporter bugReporter) { 39 this.bugReporter = bugReporter; 40 } 41 42 @Override 43 public void visit(Signature obj) { 44 String sig = obj.getSignature(); 45 for (String s : BAD_SIGNATURES) 46 if (sig.indexOf(s) >= 0) { 47 if (visitingField()) 48 bugReporter.reportBug(new BugInstance(this, "DMI_COLLECTION_OF_URLS", 49 HIGH_PRIORITY).addClass(this).addVisitedField( 50 this)); 51 else if (visitingMethod()) 52 bugReporter.reportBug(new BugInstance(this, "DMI_COLLECTION_OF_URLS", 53 HIGH_PRIORITY).addClassAndMethod(this)); 54 else 55 bugReporter.reportBug(new BugInstance(this, "DMI_COLLECTION_OF_URLS", 56 HIGH_PRIORITY).addClass(this).addClass(this)); 57 } 58 } 59 60 @Override 61 public void sawOpcode(int seen) { 62 if (seen == INVOKEVIRTUAL 63 && getClassConstantOperand().equals("java/net/URL")) { 64 if (getNameConstantOperand().equals("equals") 65 && getSigConstantOperand().equals("(Ljava/lang/Object;)Z") 66 || getNameConstantOperand().equals("hashCode") 67 && getSigConstantOperand().equals("()I")) { 68 bugReporter.reportBug(new BugInstance(this, "DMI_BLOCKING_METHODS_ON_URL", 69 HIGH_PRIORITY).addClassAndMethod(this) 70 .addCalledMethod(this).addSourceLine(this)); 71 } 72 } 73 } 74 } | Popular Tags |