public abstract class edu.umd.cs.findbugs.ByteCodePatternDetector implements edu.umd.cs.findbugs.Detector
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: edu.umd.cs.findbugs.ByteCodePatternDetector
  super_class: java.lang.Object
{
  private static final boolean DEBUG;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.String METHOD;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 44
            ldc "bcpd.debug"
            invokestatic edu.umd.cs.findbugs.SystemProperties.getBoolean:(Ljava/lang/String;)Z
            putstatic edu.umd.cs.findbugs.ByteCodePatternDetector.DEBUG:Z
         1: .line 46
            ldc "bcpd.method"
            invokestatic edu.umd.cs.findbugs.SystemProperties.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            putstatic edu.umd.cs.findbugs.ByteCodePatternDetector.METHOD:Ljava/lang/String;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // edu.umd.cs.findbugs.ByteCodePatternDetector this
         0: .line 43
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // edu.umd.cs.findbugs.ByteCodePatternDetector this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ledu/umd/cs/findbugs/ByteCodePatternDetector;

  protected abstract edu.umd.cs.findbugs.BugReporter getBugReporter();
    descriptor: ()Ledu/umd/cs/findbugs/BugReporter;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT

  public void visitClassContext(edu.umd.cs.findbugs.ba.ClassContext);
    descriptor: (Ledu/umd/cs/findbugs/ba/ClassContext;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=15, args_size=2
        start local 0 // edu.umd.cs.findbugs.ByteCodePatternDetector this
        start local 1 // edu.umd.cs.findbugs.ba.ClassContext classContext
         0: .line 53
            aload 0 /* this */
            invokevirtual edu.umd.cs.findbugs.ByteCodePatternDetector.getPattern:()Ledu/umd/cs/findbugs/ba/bcp/ByteCodePattern;
            astore 2 /* pattern */
        start local 2 // edu.umd.cs.findbugs.ba.bcp.ByteCodePattern pattern
         1: .line 54
            aload 1 /* classContext */
            invokevirtual edu.umd.cs.findbugs.ba.ClassContext.getJavaClass:()Lorg/apache/bcel/classfile/JavaClass;
            astore 3 /* jclass */
        start local 3 // org.apache.bcel.classfile.JavaClass jclass
         2: .line 55
            aload 3 /* jclass */
            invokevirtual org.apache.bcel.classfile.JavaClass.getMethods:()[Lorg/apache/bcel/classfile/Method;
            astore 4 /* methodList */
        start local 4 // org.apache.bcel.classfile.Method[] methodList
         3: .line 57
            aload 4 /* methodList */
            dup
            astore 8
            arraylength
            istore 7
            iconst_0
            istore 6
            goto 34
      StackMap locals: edu.umd.cs.findbugs.ByteCodePatternDetector edu.umd.cs.findbugs.ba.ClassContext edu.umd.cs.findbugs.ba.bcp.ByteCodePattern org.apache.bcel.classfile.JavaClass org.apache.bcel.classfile.Method[] top int int org.apache.bcel.classfile.Method[]
      StackMap stack:
         4: aload 8
            iload 6
            aaload
            astore 5 /* method */
        start local 5 // org.apache.bcel.classfile.Method method
         5: .line 58
            aload 5 /* method */
            invokevirtual org.apache.bcel.classfile.Method.isAbstract:()Z
            ifne 33
            aload 5 /* method */
            invokevirtual org.apache.bcel.classfile.Method.isNative:()Z
            ifeq 7
         6: .line 59
            goto 33
         7: .line 62
      StackMap locals: edu.umd.cs.findbugs.ByteCodePatternDetector edu.umd.cs.findbugs.ba.ClassContext edu.umd.cs.findbugs.ba.bcp.ByteCodePattern org.apache.bcel.classfile.JavaClass org.apache.bcel.classfile.Method[] org.apache.bcel.classfile.Method int int org.apache.bcel.classfile.Method[]
      StackMap stack:
            getstatic edu.umd.cs.findbugs.ByteCodePatternDetector.METHOD:Ljava/lang/String;
            ifnull 9
            aload 5 /* method */
            invokevirtual org.apache.bcel.classfile.Method.getName:()Ljava/lang/String;
            getstatic edu.umd.cs.findbugs.ByteCodePatternDetector.METHOD:Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 9
         8: .line 63
            goto 33
         9: .line 66
      StackMap locals:
      StackMap stack:
            getstatic edu.umd.cs.findbugs.ByteCodePatternDetector.DEBUG:Z
            ifeq 14
        10: .line 67
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            new java.lang.StringBuilder
            dup
            ldc "=====================================================================\nMethod "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        11: .line 68
            aload 3 /* jclass */
            invokevirtual org.apache.bcel.classfile.JavaClass.getClassName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 5 /* method */
            invokevirtual org.apache.bcel.classfile.Method.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\n"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        12: .line 69
            ldc "=====================================================================\n"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        13: .line 67
            invokevirtual java.io.PrintStream.print:(Ljava/lang/String;)V
        14: .line 72
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 5 /* method */
            aload 1 /* classContext */
            invokevirtual edu.umd.cs.findbugs.ByteCodePatternDetector.prescreen:(Lorg/apache/bcel/classfile/Method;Ledu/umd/cs/findbugs/ba/ClassContext;)Z
            ifne 16
        15: .line 73
            goto 33
        16: .line 76
      StackMap locals:
      StackMap stack:
            aload 1 /* classContext */
            aload 5 /* method */
            invokevirtual edu.umd.cs.findbugs.ba.ClassContext.getMethodGen:(Lorg/apache/bcel/classfile/Method;)Lorg/apache/bcel/generic/MethodGen;
            astore 9 /* methodGen */
        start local 9 // org.apache.bcel.generic.MethodGen methodGen
        17: .line 77
            aload 9 /* methodGen */
            ifnonnull 19
        18: .line 78
            goto 33
        19: .line 81
      StackMap locals: org.apache.bcel.generic.MethodGen
      StackMap stack:
            new edu.umd.cs.findbugs.ba.bcp.PatternMatcher
            dup
            aload 2 /* pattern */
            aload 1 /* classContext */
            aload 5 /* method */
            invokespecial edu.umd.cs.findbugs.ba.bcp.PatternMatcher.<init>:(Ledu/umd/cs/findbugs/ba/bcp/ByteCodePattern;Ledu/umd/cs/findbugs/ba/ClassContext;Lorg/apache/bcel/classfile/Method;)V
            astore 10 /* matcher */
        start local 10 // edu.umd.cs.findbugs.ba.bcp.PatternMatcher matcher
        20: .line 82
            aload 10 /* matcher */
            invokevirtual edu.umd.cs.findbugs.ba.bcp.PatternMatcher.execute:()Ledu/umd/cs/findbugs/ba/bcp/PatternMatcher;
            pop
        21: .line 84
            aload 10 /* matcher */
            invokevirtual edu.umd.cs.findbugs.ba.bcp.PatternMatcher.byteCodePatternMatchIterator:()Ljava/util/Iterator;
            astore 11 /* j */
        start local 11 // java.util.Iterator j
        22: .line 85
            goto 32
        23: .line 86
      StackMap locals: edu.umd.cs.findbugs.ba.bcp.PatternMatcher java.util.Iterator
      StackMap stack:
            aload 11 /* j */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast edu.umd.cs.findbugs.ba.bcp.ByteCodePatternMatch
            astore 12 /* match */
        start local 12 // edu.umd.cs.findbugs.ba.bcp.ByteCodePatternMatch match
        24: .line 88
            getstatic edu.umd.cs.findbugs.ByteCodePatternDetector.DEBUG:Z
            ifeq 31
        25: .line 89
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "Pattern match:"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        26: .line 90
            aload 12 /* match */
            invokevirtual edu.umd.cs.findbugs.ba.bcp.ByteCodePatternMatch.patternElementMatchIterator:()Ljava/util/Iterator;
            astore 13 /* pemIter */
        start local 13 // java.util.Iterator pemIter
        27: .line 91
            goto 30
        28: .line 92
      StackMap locals: edu.umd.cs.findbugs.ba.bcp.ByteCodePatternMatch java.util.Iterator
      StackMap stack:
            aload 13 /* pemIter */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast edu.umd.cs.findbugs.ba.bcp.PatternElementMatch
            astore 14 /* pem */
        start local 14 // edu.umd.cs.findbugs.ba.bcp.PatternElementMatch pem
        29: .line 93
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            new java.lang.StringBuilder
            dup
            ldc "\t"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 14 /* pem */
            invokevirtual edu.umd.cs.findbugs.ba.bcp.PatternElementMatch.toString:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        end local 14 // edu.umd.cs.findbugs.ba.bcp.PatternElementMatch pem
        30: .line 91
      StackMap locals:
      StackMap stack:
            aload 13 /* pemIter */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 28
        end local 13 // java.util.Iterator pemIter
        31: .line 97
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* classContext */
            aload 5 /* method */
            aload 12 /* match */
            invokevirtual edu.umd.cs.findbugs.ByteCodePatternDetector.reportMatch:(Ledu/umd/cs/findbugs/ba/ClassContext;Lorg/apache/bcel/classfile/Method;Ledu/umd/cs/findbugs/ba/bcp/ByteCodePatternMatch;)V
        end local 12 // edu.umd.cs.findbugs.ba.bcp.ByteCodePatternMatch match
        32: .line 85
      StackMap locals:
      StackMap stack:
            aload 11 /* j */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 23
        end local 11 // java.util.Iterator j
        end local 10 // edu.umd.cs.findbugs.ba.bcp.PatternMatcher matcher
        end local 9 // org.apache.bcel.generic.MethodGen methodGen
        end local 5 // org.apache.bcel.classfile.Method method
        33: .line 57
      StackMap locals: edu.umd.cs.findbugs.ByteCodePatternDetector edu.umd.cs.findbugs.ba.ClassContext edu.umd.cs.findbugs.ba.bcp.ByteCodePattern org.apache.bcel.classfile.JavaClass org.apache.bcel.classfile.Method[] top int int org.apache.bcel.classfile.Method[]
      StackMap stack:
            iinc 6 1
      StackMap locals:
      StackMap stack:
        34: iload 6
            iload 7
            if_icmplt 4
        end local 4 // org.apache.bcel.classfile.Method[] methodList
        end local 3 // org.apache.bcel.classfile.JavaClass jclass
        end local 2 // edu.umd.cs.findbugs.ba.bcp.ByteCodePattern pattern
        35: .line 100
            goto 41
      StackMap locals: edu.umd.cs.findbugs.ByteCodePatternDetector edu.umd.cs.findbugs.ba.ClassContext
      StackMap stack: edu.umd.cs.findbugs.ba.DataflowAnalysisException
        36: astore 2 /* e */
        start local 2 // edu.umd.cs.findbugs.ba.DataflowAnalysisException e
        37: .line 101
            aload 0 /* this */
            invokevirtual edu.umd.cs.findbugs.ByteCodePatternDetector.getBugReporter:()Ledu/umd/cs/findbugs/BugReporter;
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            invokevirtual edu.umd.cs.findbugs.ByteCodePatternDetector.getDetectorName:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " caught exception"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 2 /* e */
            invokeinterface edu.umd.cs.findbugs.BugReporter.logError:(Ljava/lang/String;Ljava/lang/Throwable;)V
        end local 2 // edu.umd.cs.findbugs.ba.DataflowAnalysisException e
        38: goto 41
        39: .line 102
      StackMap locals:
      StackMap stack: edu.umd.cs.findbugs.ba.CFGBuilderException
            astore 2 /* e */
        start local 2 // edu.umd.cs.findbugs.ba.CFGBuilderException e
        40: .line 103
            aload 0 /* this */
            invokevirtual edu.umd.cs.findbugs.ByteCodePatternDetector.getBugReporter:()Ledu/umd/cs/findbugs/BugReporter;
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            invokevirtual edu.umd.cs.findbugs.ByteCodePatternDetector.getDetectorName:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " caught exception"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 2 /* e */
            invokeinterface edu.umd.cs.findbugs.BugReporter.logError:(Ljava/lang/String;Ljava/lang/Throwable;)V
        end local 2 // edu.umd.cs.findbugs.ba.CFGBuilderException e
        41: .line 105
      StackMap locals:
      StackMap stack:
            return
        end local 1 // edu.umd.cs.findbugs.ba.ClassContext classContext
        end local 0 // edu.umd.cs.findbugs.ByteCodePatternDetector this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   42     0          this  Ledu/umd/cs/findbugs/ByteCodePatternDetector;
            0   42     1  classContext  Ledu/umd/cs/findbugs/ba/ClassContext;
            1   35     2       pattern  Ledu/umd/cs/findbugs/ba/bcp/ByteCodePattern;
            2   35     3        jclass  Lorg/apache/bcel/classfile/JavaClass;
            3   35     4    methodList  [Lorg/apache/bcel/classfile/Method;
            5   33     5        method  Lorg/apache/bcel/classfile/Method;
           17   33     9     methodGen  Lorg/apache/bcel/generic/MethodGen;
           20   33    10       matcher  Ledu/umd/cs/findbugs/ba/bcp/PatternMatcher;
           22   33    11             j  Ljava/util/Iterator<Ledu/umd/cs/findbugs/ba/bcp/ByteCodePatternMatch;>;
           24   32    12         match  Ledu/umd/cs/findbugs/ba/bcp/ByteCodePatternMatch;
           27   31    13       pemIter  Ljava/util/Iterator<Ledu/umd/cs/findbugs/ba/bcp/PatternElementMatch;>;
           29   30    14           pem  Ledu/umd/cs/findbugs/ba/bcp/PatternElementMatch;
           37   38     2             e  Ledu/umd/cs/findbugs/ba/DataflowAnalysisException;
           40   41     2             e  Ledu/umd/cs/findbugs/ba/CFGBuilderException;
      Exception table:
        from    to  target  type
           0    35      36  Class edu.umd.cs.findbugs.ba.DataflowAnalysisException
           0    35      39  Class edu.umd.cs.findbugs.ba.CFGBuilderException
    MethodParameters:
              Name  Flags
      classContext  

  private java.lang.String getDetectorName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // edu.umd.cs.findbugs.ByteCodePatternDetector this
         0: .line 108
            aload 0 /* this */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            astore 1 /* className */
        start local 1 // java.lang.String className
         1: .line 109
            aload 1 /* className */
            bipush 46
            invokevirtual java.lang.String.lastIndexOf:(I)I
            istore 2 /* lastDot */
        start local 2 // int lastDot
         2: .line 110
            iload 2 /* lastDot */
            iflt 4
         3: .line 111
            aload 1 /* className */
            iload 2 /* lastDot */
            iconst_1
            iadd
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
            astore 1 /* className */
         4: .line 113
      StackMap locals: java.lang.String int
      StackMap stack:
            aload 1 /* className */
            areturn
        end local 2 // int lastDot
        end local 1 // java.lang.String className
        end local 0 // edu.umd.cs.findbugs.ByteCodePatternDetector this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    5     0       this  Ledu/umd/cs/findbugs/ByteCodePatternDetector;
            1    5     1  className  Ljava/lang/String;
            2    5     2    lastDot  I

  public void report();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=0, locals=1, args_size=1
        start local 0 // edu.umd.cs.findbugs.ByteCodePatternDetector this
         0: .line 118
            return
        end local 0 // edu.umd.cs.findbugs.ByteCodePatternDetector this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ledu/umd/cs/findbugs/ByteCodePatternDetector;

  public abstract edu.umd.cs.findbugs.ba.bcp.ByteCodePattern getPattern();
    descriptor: ()Ledu/umd/cs/findbugs/ba/bcp/ByteCodePattern;
    flags: (0x0401) ACC_PUBLIC, ACC_ABSTRACT

  public abstract boolean prescreen(org.apache.bcel.classfile.Method, edu.umd.cs.findbugs.ba.ClassContext);
    descriptor: (Lorg/apache/bcel/classfile/Method;Ledu/umd/cs/findbugs/ba/ClassContext;)Z
    flags: (0x0401) ACC_PUBLIC, ACC_ABSTRACT
    MethodParameters:
              Name  Flags
      method        
      classContext  

  public abstract void reportMatch(edu.umd.cs.findbugs.ba.ClassContext, org.apache.bcel.classfile.Method, edu.umd.cs.findbugs.ba.bcp.ByteCodePatternMatch);
    descriptor: (Ledu/umd/cs/findbugs/ba/ClassContext;Lorg/apache/bcel/classfile/Method;Ledu/umd/cs/findbugs/ba/bcp/ByteCodePatternMatch;)V
    flags: (0x0401) ACC_PUBLIC, ACC_ABSTRACT
    Exceptions:
      throws edu.umd.cs.findbugs.ba.CFGBuilderException, edu.umd.cs.findbugs.ba.DataflowAnalysisException
    MethodParameters:
              Name  Flags
      classContext  
      method        
      match         
}
SourceFile: "ByteCodePatternDetector.java"