FindBugs™ 1.3.9

edu.umd.cs.findbugs
Class ByteCodePatternDetector

java.lang.Object
  extended by edu.umd.cs.findbugs.ByteCodePatternDetector
All Implemented Interfaces:
Detector, Priorities
Direct Known Subclasses:
BCPMethodReturnCheck, LazyInit

public abstract class ByteCodePatternDetector
extends java.lang.Object
implements Detector

A base class for bug detectors that are based on a ByteCodePattern. ByteCodePatterns provide an easy way to detect patterns of bytecode instructions, taking into account control flow and uses of fields and values.

See Also:
ByteCodePattern

Field Summary
 
Fields inherited from interface edu.umd.cs.findbugs.Priorities
EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY
 
Constructor Summary
ByteCodePatternDetector()
           
 
Method Summary
protected abstract  BugReporter getBugReporter()
           
abstract  ByteCodePattern getPattern()
          Get the ByteCodePattern for this detector.
abstract  boolean prescreen(org.apache.bcel.classfile.Method method, ClassContext classContext)
          Prescreen a method.
 void report()
          This method is called after all classes to be visited.
abstract  void reportMatch(ClassContext classContext, org.apache.bcel.classfile.Method method, ByteCodePatternMatch match)
          Called to report an instance of the ByteCodePattern.
 void visitClassContext(ClassContext classContext)
          Visit the ClassContext for a class which should be analyzed for instances of bug patterns.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ByteCodePatternDetector

public ByteCodePatternDetector()
Method Detail

getBugReporter

protected abstract BugReporter getBugReporter()

visitClassContext

public void visitClassContext(ClassContext classContext)
Description copied from interface: Detector
Visit the ClassContext for a class which should be analyzed for instances of bug patterns.

Specified by:
visitClassContext in interface Detector
Parameters:
classContext - the ClassContext

report

public void report()
Description copied from interface: Detector
This method is called after all classes to be visited. It should be used by any detectors which accumulate information over all visited classes to generate results.

Specified by:
report in interface Detector

getPattern

public abstract ByteCodePattern getPattern()
Get the ByteCodePattern for this detector.


prescreen

public abstract boolean prescreen(org.apache.bcel.classfile.Method method,
                                  ClassContext classContext)
Prescreen a method. It is a valid, but dumb, implementation simply to return true unconditionally. A better implementation is to call ClassContext.getBytecodeSet() to check whether the method actually contains the bytecode instructions that the pattern will look for. The theory is that checking the bytecode set is very fast, while building the MethodGen, CFG, ValueNumberAnalysis, etc. objects required to match ByteCodePatterns is slow, and the bytecode pattern matching algorithm is also not particularly fast.

As a datapoint, prescreening speeds up the BCPDoubleCheck detector by a factor of 5 with no loss of generality and only a dozen or so extra lines of code.

Parameters:
method - the method
classContext - the ClassContext for the method
Returns:
true if the method should be analyzed for instances of the ByteCodePattern

reportMatch

public abstract void reportMatch(ClassContext classContext,
                                 org.apache.bcel.classfile.Method method,
                                 ByteCodePatternMatch match)
                          throws CFGBuilderException,
                                 DataflowAnalysisException
Called to report an instance of the ByteCodePattern.

Parameters:
classContext - the ClassContext for the analyzed class
method - the method to instance appears in
match - the ByteCodePatternMatch object representing the match of the ByteCodePattern against actual instructions in the method
Throws:
CFGBuilderException
DataflowAnalysisException

FindBugs™ 1.3.9

FindBugs™ is licenced under the LGPL. Copyright © 2006 University of Maryland.