Class LazyInit

All Implemented Interfaces:
Detector, Priorities, StatelessDetector, Cloneable

public final class LazyInit extends ByteCodePatternDetector implements StatelessDetector
  • Constructor Details

  • Method Details

    • clone

      public Object clone()
      Specified by:
      clone in interface StatelessDetector
      Overrides:
      clone in class Object
    • getBugReporter

      public BugReporter getBugReporter()
      Specified by:
      getBugReporter in class ByteCodePatternDetector
    • getPattern

      public ByteCodePattern getPattern()
      Description copied from class: ByteCodePatternDetector
      Get the ByteCodePattern for this detector.
      Specified by:
      getPattern in class ByteCodePatternDetector
    • prescreen

      public boolean prescreen(org.apache.bcel.classfile.Method method, ClassContext classContext)
      Description copied from class: ByteCodePatternDetector

      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.

      Specified by:
      prescreen in class ByteCodePatternDetector
      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 void reportMatch(ClassContext classContext, org.apache.bcel.classfile.Method method, ByteCodePatternMatch match) throws CFGBuilderException, DataflowAnalysisException
      Description copied from class: ByteCodePatternDetector
      Called to report an instance of the ByteCodePattern.
      Specified by:
      reportMatch in class ByteCodePatternDetector
      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