public class org.apache.tomcat.util.scan.StandardJarScanner implements org.apache.tomcat.JarScanner
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.tomcat.util.scan.StandardJarScanner
  super_class: java.lang.Object
{
  private final org.apache.juli.logging.Log log;
    descriptor: Lorg/apache/juli/logging/Log;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private static final org.apache.tomcat.util.res.StringManager sm;
    descriptor: Lorg/apache/tomcat/util/res/StringManager;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.util.Set<java.lang.ClassLoader> CLASSLOADER_HIERARCHY;
    descriptor: Ljava/util/Set;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/Set<Ljava/lang/ClassLoader;>;

  private boolean scanClassPath;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private boolean scanManifest;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private boolean scanAllFiles;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private boolean scanAllDirectories;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private boolean scanBootstrapClassPath;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private org.apache.tomcat.JarScanFilter jarScanFilter;
    descriptor: Lorg/apache/tomcat/JarScanFilter;
    flags: (0x0002) ACC_PRIVATE

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=2, args_size=0
         0: .line 69
            ldc "org.apache.tomcat.util.scan"
            invokestatic org.apache.tomcat.util.res.StringManager.getManager:(Ljava/lang/String;)Lorg/apache/tomcat/util/res/StringManager;
            putstatic org.apache.tomcat.util.scan.StandardJarScanner.sm:Lorg/apache/tomcat/util/res/StringManager;
         1: .line 74
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            astore 0 /* cls */
        start local 0 // java.util.Set cls
         2: .line 76
            ldc Lorg/apache/tomcat/util/scan/StandardJarScanner;
            invokevirtual java.lang.Class.getClassLoader:()Ljava/lang/ClassLoader;
            astore 1 /* cl */
        start local 1 // java.lang.ClassLoader cl
         3: .line 77
            goto 6
         4: .line 78
      StackMap locals: java.util.Set java.lang.ClassLoader
      StackMap stack:
            aload 0 /* cls */
            aload 1 /* cl */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
         5: .line 79
            aload 1 /* cl */
            invokevirtual java.lang.ClassLoader.getParent:()Ljava/lang/ClassLoader;
            astore 1 /* cl */
         6: .line 77
      StackMap locals:
      StackMap stack:
            aload 1 /* cl */
            ifnonnull 4
         7: .line 82
            aload 0 /* cls */
            invokestatic java.util.Collections.unmodifiableSet:(Ljava/util/Set;)Ljava/util/Set;
            putstatic org.apache.tomcat.util.scan.StandardJarScanner.CLASSLOADER_HIERARCHY:Ljava/util/Set;
        end local 1 // java.lang.ClassLoader cl
        end local 0 // java.util.Set cls
         8: .line 83
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            2    8     0   cls  Ljava/util/Set<Ljava/lang/ClassLoader;>;
            3    8     1    cl  Ljava/lang/ClassLoader;

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
         0: .line 62
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 64
            aload 0 /* this */
            ldc Lorg/apache/tomcat/util/scan/StandardJarScanner;
            invokestatic org.apache.juli.logging.LogFactory.getLog:(Ljava/lang/Class;)Lorg/apache/juli/logging/Log;
            putfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
         2: .line 88
            aload 0 /* this */
            iconst_1
            putfield org.apache.tomcat.util.scan.StandardJarScanner.scanClassPath:Z
         3: .line 99
            aload 0 /* this */
            iconst_1
            putfield org.apache.tomcat.util.scan.StandardJarScanner.scanManifest:Z
         4: .line 110
            aload 0 /* this */
            iconst_0
            putfield org.apache.tomcat.util.scan.StandardJarScanner.scanAllFiles:Z
         5: .line 122
            aload 0 /* this */
            iconst_1
            putfield org.apache.tomcat.util.scan.StandardJarScanner.scanAllDirectories:Z
         6: .line 134
            aload 0 /* this */
            iconst_0
            putfield org.apache.tomcat.util.scan.StandardJarScanner.scanBootstrapClassPath:Z
         7: .line 145
            aload 0 /* this */
            new org.apache.tomcat.util.scan.StandardJarScanFilter
            dup
            invokespecial org.apache.tomcat.util.scan.StandardJarScanFilter.<init>:()V
            putfield org.apache.tomcat.util.scan.StandardJarScanner.jarScanFilter:Lorg/apache/tomcat/JarScanFilter;
         8: .line 62
            return
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0  this  Lorg/apache/tomcat/util/scan/StandardJarScanner;

  public boolean isScanClassPath();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
         0: .line 90
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.scanClassPath:Z
            ireturn
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/tomcat/util/scan/StandardJarScanner;

  public void setScanClassPath(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
        start local 1 // boolean scanClassPath
         0: .line 93
            aload 0 /* this */
            iload 1 /* scanClassPath */
            putfield org.apache.tomcat.util.scan.StandardJarScanner.scanClassPath:Z
         1: .line 94
            return
        end local 1 // boolean scanClassPath
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    2     0           this  Lorg/apache/tomcat/util/scan/StandardJarScanner;
            0    2     1  scanClassPath  Z
    MethodParameters:
               Name  Flags
      scanClassPath  

  public boolean isScanManifest();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
         0: .line 101
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.scanManifest:Z
            ireturn
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/tomcat/util/scan/StandardJarScanner;

  public void setScanManifest(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
        start local 1 // boolean scanManifest
         0: .line 104
            aload 0 /* this */
            iload 1 /* scanManifest */
            putfield org.apache.tomcat.util.scan.StandardJarScanner.scanManifest:Z
         1: .line 105
            return
        end local 1 // boolean scanManifest
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    2     0          this  Lorg/apache/tomcat/util/scan/StandardJarScanner;
            0    2     1  scanManifest  Z
    MethodParameters:
              Name  Flags
      scanManifest  

  public boolean isScanAllFiles();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
         0: .line 112
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.scanAllFiles:Z
            ireturn
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/tomcat/util/scan/StandardJarScanner;

  public void setScanAllFiles(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
        start local 1 // boolean scanAllFiles
         0: .line 115
            aload 0 /* this */
            iload 1 /* scanAllFiles */
            putfield org.apache.tomcat.util.scan.StandardJarScanner.scanAllFiles:Z
         1: .line 116
            return
        end local 1 // boolean scanAllFiles
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    2     0          this  Lorg/apache/tomcat/util/scan/StandardJarScanner;
            0    2     1  scanAllFiles  Z
    MethodParameters:
              Name  Flags
      scanAllFiles  

  public boolean isScanAllDirectories();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
         0: .line 124
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.scanAllDirectories:Z
            ireturn
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/tomcat/util/scan/StandardJarScanner;

  public void setScanAllDirectories(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
        start local 1 // boolean scanAllDirectories
         0: .line 127
            aload 0 /* this */
            iload 1 /* scanAllDirectories */
            putfield org.apache.tomcat.util.scan.StandardJarScanner.scanAllDirectories:Z
         1: .line 128
            return
        end local 1 // boolean scanAllDirectories
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    2     0                this  Lorg/apache/tomcat/util/scan/StandardJarScanner;
            0    2     1  scanAllDirectories  Z
    MethodParameters:
                    Name  Flags
      scanAllDirectories  

  public boolean isScanBootstrapClassPath();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
         0: .line 136
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.scanBootstrapClassPath:Z
            ireturn
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/tomcat/util/scan/StandardJarScanner;

  public void setScanBootstrapClassPath(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
        start local 1 // boolean scanBootstrapClassPath
         0: .line 139
            aload 0 /* this */
            iload 1 /* scanBootstrapClassPath */
            putfield org.apache.tomcat.util.scan.StandardJarScanner.scanBootstrapClassPath:Z
         1: .line 140
            return
        end local 1 // boolean scanBootstrapClassPath
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0    2     0                    this  Lorg/apache/tomcat/util/scan/StandardJarScanner;
            0    2     1  scanBootstrapClassPath  Z
    MethodParameters:
                        Name  Flags
      scanBootstrapClassPath  

  public org.apache.tomcat.JarScanFilter getJarScanFilter();
    descriptor: ()Lorg/apache/tomcat/JarScanFilter;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
         0: .line 148
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.jarScanFilter:Lorg/apache/tomcat/JarScanFilter;
            areturn
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/tomcat/util/scan/StandardJarScanner;

  public void setJarScanFilter(org.apache.tomcat.JarScanFilter);
    descriptor: (Lorg/apache/tomcat/JarScanFilter;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
        start local 1 // org.apache.tomcat.JarScanFilter jarScanFilter
         0: .line 152
            aload 0 /* this */
            aload 1 /* jarScanFilter */
            putfield org.apache.tomcat.util.scan.StandardJarScanner.jarScanFilter:Lorg/apache/tomcat/JarScanFilter;
         1: .line 153
            return
        end local 1 // org.apache.tomcat.JarScanFilter jarScanFilter
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    2     0           this  Lorg/apache/tomcat/util/scan/StandardJarScanner;
            0    2     1  jarScanFilter  Lorg/apache/tomcat/JarScanFilter;
    MethodParameters:
               Name  Flags
      jarScanFilter  

  public void scan(org.apache.tomcat.JarScanType, javax.servlet.ServletContext, org.apache.tomcat.JarScannerCallback);
    descriptor: (Lorg/apache/tomcat/JarScanType;Ljavax/servlet/ServletContext;Lorg/apache/tomcat/JarScannerCallback;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=10, args_size=4
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
        start local 1 // org.apache.tomcat.JarScanType scanType
        start local 2 // javax.servlet.ServletContext context
        start local 3 // org.apache.tomcat.JarScannerCallback callback
         0: .line 170
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 2
         1: .line 171
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.tomcat.util.scan.StandardJarScanner.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jarScan.webinflibStart"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
         2: .line 174
      StackMap locals:
      StackMap stack:
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            astore 4 /* processedURLs */
        start local 4 // java.util.Set processedURLs
         3: .line 177
            aload 2 /* context */
            ldc "/WEB-INF/lib/"
            invokeinterface javax.servlet.ServletContext.getResourcePaths:(Ljava/lang/String;)Ljava/util/Set;
            astore 5 /* dirList */
        start local 5 // java.util.Set dirList
         4: .line 178
            aload 5 /* dirList */
            ifnull 25
         5: .line 179
            aload 5 /* dirList */
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 7
            goto 24
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner org.apache.tomcat.JarScanType javax.servlet.ServletContext org.apache.tomcat.JarScannerCallback java.util.Set java.util.Set top java.util.Iterator
      StackMap stack:
         6: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 6 /* path */
        start local 6 // java.lang.String path
         7: .line 180
            aload 6 /* path */
            ldc ".jar"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 22
         8: .line 181
            aload 0 /* this */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.getJarScanFilter:()Lorg/apache/tomcat/JarScanFilter;
            aload 1 /* scanType */
         9: .line 182
            aload 6 /* path */
            aload 6 /* path */
            bipush 47
            invokevirtual java.lang.String.lastIndexOf:(I)I
            iconst_1
            iadd
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
        10: .line 181
            invokeinterface org.apache.tomcat.JarScanFilter.check:(Lorg/apache/tomcat/JarScanType;Ljava/lang/String;)Z
        11: .line 182
            ifeq 22
        12: .line 184
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 14
        13: .line 185
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.tomcat.util.scan.StandardJarScanner.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jarScan.webinflibJarScan"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 6 /* path */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        14: .line 187
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner org.apache.tomcat.JarScanType javax.servlet.ServletContext org.apache.tomcat.JarScannerCallback java.util.Set java.util.Set java.lang.String java.util.Iterator
      StackMap stack:
            aconst_null
            astore 8 /* url */
        start local 8 // java.net.URL url
        15: .line 189
            aload 2 /* context */
            aload 6 /* path */
            invokeinterface javax.servlet.ServletContext.getResource:(Ljava/lang/String;)Ljava/net/URL;
            astore 8 /* url */
        16: .line 190
            aload 4 /* processedURLs */
            aload 8 /* url */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        17: .line 191
            aload 0 /* this */
            aload 1 /* scanType */
            aload 3 /* callback */
            aload 8 /* url */
            aload 6 /* path */
            iconst_1
            aconst_null
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.process:(Lorg/apache/tomcat/JarScanType;Lorg/apache/tomcat/JarScannerCallback;Ljava/net/URL;Ljava/lang/String;ZLjava/util/Deque;)V
        18: .line 192
            goto 24
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner org.apache.tomcat.JarScanType javax.servlet.ServletContext org.apache.tomcat.JarScannerCallback java.util.Set java.util.Set java.lang.String java.util.Iterator java.net.URL
      StackMap stack: java.io.IOException
        19: astore 9 /* e */
        start local 9 // java.io.IOException e
        20: .line 193
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.tomcat.util.scan.StandardJarScanner.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jarScan.webinflibFail"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 8 /* url */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            aload 9 /* e */
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 9 // java.io.IOException e
        end local 8 // java.net.URL url
        21: .line 195
            goto 24
        22: .line 196
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 24
        23: .line 197
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.tomcat.util.scan.StandardJarScanner.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jarScan.webinflibJarNoScan"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 6 /* path */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        end local 6 // java.lang.String path
        24: .line 179
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner org.apache.tomcat.JarScanType javax.servlet.ServletContext org.apache.tomcat.JarScannerCallback java.util.Set java.util.Set top java.util.Iterator
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 6
        25: .line 205
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner org.apache.tomcat.JarScanType javax.servlet.ServletContext org.apache.tomcat.JarScannerCallback java.util.Set java.util.Set
      StackMap stack:
            aload 2 /* context */
            ldc "/WEB-INF/classes"
            invokeinterface javax.servlet.ServletContext.getResource:(Ljava/lang/String;)Ljava/net/URL;
            astore 6 /* webInfURL */
        start local 6 // java.net.URL webInfURL
        26: .line 206
            aload 6 /* webInfURL */
            ifnull 37
        27: .line 210
            aload 4 /* processedURLs */
            aload 6 /* webInfURL */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        28: .line 212
            aload 0 /* this */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.isScanAllDirectories:()Z
            ifeq 37
        29: .line 213
            aload 2 /* context */
            ldc "/WEB-INF/classes/META-INF"
            invokeinterface javax.servlet.ServletContext.getResource:(Ljava/lang/String;)Ljava/net/URL;
            astore 7 /* url */
        start local 7 // java.net.URL url
        30: .line 214
            aload 7 /* url */
            ifnull 37
        31: .line 216
            aload 3 /* callback */
            invokeinterface org.apache.tomcat.JarScannerCallback.scanWebInfClasses:()V
        32: .line 217
            goto 37
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner org.apache.tomcat.JarScanType javax.servlet.ServletContext org.apache.tomcat.JarScannerCallback java.util.Set java.util.Set java.net.URL java.net.URL
      StackMap stack: java.io.IOException
        33: astore 8 /* e */
        start local 8 // java.io.IOException e
        34: .line 218
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.tomcat.util.scan.StandardJarScanner.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jarScan.webinfclassesFail"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 8 /* e */
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 8 // java.io.IOException e
        end local 7 // java.net.URL url
        end local 6 // java.net.URL webInfURL
        35: .line 223
            goto 37
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner org.apache.tomcat.JarScanType javax.servlet.ServletContext org.apache.tomcat.JarScannerCallback java.util.Set java.util.Set
      StackMap stack: java.net.MalformedURLException
        36: pop
        37: .line 228
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.isScanClassPath:()Z
            ifeq 39
        38: .line 229
            aload 0 /* this */
            aload 1 /* scanType */
            aload 2 /* context */
            aload 3 /* callback */
            aload 4 /* processedURLs */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.doScanClassPath:(Lorg/apache/tomcat/JarScanType;Ljavax/servlet/ServletContext;Lorg/apache/tomcat/JarScannerCallback;Ljava/util/Set;)V
        39: .line 231
      StackMap locals:
      StackMap stack:
            return
        end local 5 // java.util.Set dirList
        end local 4 // java.util.Set processedURLs
        end local 3 // org.apache.tomcat.JarScannerCallback callback
        end local 2 // javax.servlet.ServletContext context
        end local 1 // org.apache.tomcat.JarScanType scanType
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   40     0           this  Lorg/apache/tomcat/util/scan/StandardJarScanner;
            0   40     1       scanType  Lorg/apache/tomcat/JarScanType;
            0   40     2        context  Ljavax/servlet/ServletContext;
            0   40     3       callback  Lorg/apache/tomcat/JarScannerCallback;
            3   40     4  processedURLs  Ljava/util/Set<Ljava/net/URL;>;
            4   40     5        dirList  Ljava/util/Set<Ljava/lang/String;>;
            7   24     6           path  Ljava/lang/String;
           15   21     8            url  Ljava/net/URL;
           20   21     9              e  Ljava/io/IOException;
           26   35     6      webInfURL  Ljava/net/URL;
           30   35     7            url  Ljava/net/URL;
           34   35     8              e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
          15    18      19  Class java.io.IOException
          31    32      33  Class java.io.IOException
          25    35      36  Class java.net.MalformedURLException
    MethodParameters:
          Name  Flags
      scanType  
      context   
      callback  

  protected void doScanClassPath(org.apache.tomcat.JarScanType, javax.servlet.ServletContext, org.apache.tomcat.JarScannerCallback, java.util.Set<java.net.URL>);
    descriptor: (Lorg/apache/tomcat/JarScanType;Ljavax/servlet/ServletContext;Lorg/apache/tomcat/JarScannerCallback;Ljava/util/Set;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=9, args_size=5
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
        start local 1 // org.apache.tomcat.JarScanType scanType
        start local 2 // javax.servlet.ServletContext context
        start local 3 // org.apache.tomcat.JarScannerCallback callback
        start local 4 // java.util.Set processedURLs
         0: .line 236
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 2
         1: .line 237
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.tomcat.util.scan.StandardJarScanner.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jarScan.classloaderStart"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
         2: .line 240
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 5 /* stopLoader */
        start local 5 // java.lang.ClassLoader stopLoader
         3: .line 241
            aload 0 /* this */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.isScanBootstrapClassPath:()Z
            ifne 5
         4: .line 243
            invokestatic java.lang.ClassLoader.getSystemClassLoader:()Ljava/lang/ClassLoader;
            invokevirtual java.lang.ClassLoader.getParent:()Ljava/lang/ClassLoader;
            astore 5 /* stopLoader */
         5: .line 246
      StackMap locals: java.lang.ClassLoader
      StackMap stack:
            aload 2 /* context */
            invokeinterface javax.servlet.ServletContext.getClassLoader:()Ljava/lang/ClassLoader;
            astore 6 /* classLoader */
        start local 6 // java.lang.ClassLoader classLoader
         6: .line 250
            iconst_1
            istore 7 /* isWebapp */
        start local 7 // boolean isWebapp
         7: .line 255
            new java.util.LinkedList
            dup
            invokespecial java.util.LinkedList.<init>:()V
            astore 8 /* classPathUrlsToProcess */
        start local 8 // java.util.Deque classPathUrlsToProcess
         8: .line 257
            goto 17
         9: .line 258
      StackMap locals: java.lang.ClassLoader int java.util.Deque
      StackMap stack:
            aload 6 /* classLoader */
            instanceof java.net.URLClassLoader
            ifeq 16
        10: .line 259
            iload 7 /* isWebapp */
            ifeq 12
        11: .line 260
            aload 6 /* classLoader */
            invokestatic org.apache.tomcat.util.scan.StandardJarScanner.isWebappClassLoader:(Ljava/lang/ClassLoader;)Z
            istore 7 /* isWebapp */
        12: .line 263
      StackMap locals:
      StackMap stack:
            aload 8 /* classPathUrlsToProcess */
        13: .line 264
            aload 6 /* classLoader */
            checkcast java.net.URLClassLoader
            invokevirtual java.net.URLClassLoader.getURLs:()[Ljava/net/URL;
            invokestatic java.util.Arrays.asList:([Ljava/lang/Object;)Ljava/util/List;
        14: .line 263
            invokeinterface java.util.Deque.addAll:(Ljava/util/Collection;)Z
            pop
        15: .line 266
            aload 0 /* this */
            aload 1 /* scanType */
            aload 3 /* callback */
            aload 4 /* processedURLs */
            iload 7 /* isWebapp */
            aload 8 /* classPathUrlsToProcess */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.processURLs:(Lorg/apache/tomcat/JarScanType;Lorg/apache/tomcat/JarScannerCallback;Ljava/util/Set;ZLjava/util/Deque;)V
        16: .line 268
      StackMap locals:
      StackMap stack:
            aload 6 /* classLoader */
            invokevirtual java.lang.ClassLoader.getParent:()Ljava/lang/ClassLoader;
            astore 6 /* classLoader */
        17: .line 257
      StackMap locals:
      StackMap stack:
            aload 6 /* classLoader */
            ifnull 18
            aload 6 /* classLoader */
            aload 5 /* stopLoader */
            if_acmpne 9
        18: .line 271
      StackMap locals:
      StackMap stack:
            invokestatic org.apache.tomcat.util.compat.JreCompat.isJre9Available:()Z
            ifeq 22
        19: .line 275
            aload 0 /* this */
            aload 8 /* classPathUrlsToProcess */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.addClassPath:(Ljava/util/Deque;)V
        20: .line 277
            invokestatic org.apache.tomcat.util.compat.JreCompat.getInstance:()Lorg/apache/tomcat/util/compat/JreCompat;
            aload 8 /* classPathUrlsToProcess */
            invokevirtual org.apache.tomcat.util.compat.JreCompat.addBootModulePath:(Ljava/util/Deque;)V
        21: .line 278
            aload 0 /* this */
            aload 1 /* scanType */
            aload 3 /* callback */
            aload 4 /* processedURLs */
            iconst_0
            aload 8 /* classPathUrlsToProcess */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.processURLs:(Lorg/apache/tomcat/JarScanType;Lorg/apache/tomcat/JarScannerCallback;Ljava/util/Set;ZLjava/util/Deque;)V
        22: .line 280
      StackMap locals:
      StackMap stack:
            return
        end local 8 // java.util.Deque classPathUrlsToProcess
        end local 7 // boolean isWebapp
        end local 6 // java.lang.ClassLoader classLoader
        end local 5 // java.lang.ClassLoader stopLoader
        end local 4 // java.util.Set processedURLs
        end local 3 // org.apache.tomcat.JarScannerCallback callback
        end local 2 // javax.servlet.ServletContext context
        end local 1 // org.apache.tomcat.JarScanType scanType
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   23     0                    this  Lorg/apache/tomcat/util/scan/StandardJarScanner;
            0   23     1                scanType  Lorg/apache/tomcat/JarScanType;
            0   23     2                 context  Ljavax/servlet/ServletContext;
            0   23     3                callback  Lorg/apache/tomcat/JarScannerCallback;
            0   23     4           processedURLs  Ljava/util/Set<Ljava/net/URL;>;
            3   23     5              stopLoader  Ljava/lang/ClassLoader;
            6   23     6             classLoader  Ljava/lang/ClassLoader;
            7   23     7                isWebapp  Z
            8   23     8  classPathUrlsToProcess  Ljava/util/Deque<Ljava/net/URL;>;
    Signature: (Lorg/apache/tomcat/JarScanType;Ljavax/servlet/ServletContext;Lorg/apache/tomcat/JarScannerCallback;Ljava/util/Set<Ljava/net/URL;>;)V
    MethodParameters:
               Name  Flags
      scanType       
      context        
      callback       
      processedURLs  

  protected void processURLs(org.apache.tomcat.JarScanType, org.apache.tomcat.JarScannerCallback, java.util.Set<java.net.URL>, boolean, java.util.Deque<java.net.URL>);
    descriptor: (Lorg/apache/tomcat/JarScanType;Lorg/apache/tomcat/JarScannerCallback;Ljava/util/Set;ZLjava/util/Deque;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=9, args_size=6
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
        start local 1 // org.apache.tomcat.JarScanType scanType
        start local 2 // org.apache.tomcat.JarScannerCallback callback
        start local 3 // java.util.Set processedURLs
        start local 4 // boolean isWebapp
        start local 5 // java.util.Deque classPathUrlsToProcess
         0: .line 285
            goto 22
         1: .line 286
      StackMap locals:
      StackMap stack:
            aload 5 /* classPathUrlsToProcess */
            invokeinterface java.util.Deque.pop:()Ljava/lang/Object;
            checkcast java.net.URL
            astore 6 /* url */
        start local 6 // java.net.URL url
         2: .line 288
            aload 3 /* processedURLs */
            aload 6 /* url */
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ifeq 4
         3: .line 290
            goto 22
         4: .line 293
      StackMap locals: java.net.URL
      StackMap stack:
            new org.apache.tomcat.util.scan.StandardJarScanner$ClassPathEntry
            dup
            aload 6 /* url */
            invokespecial org.apache.tomcat.util.scan.StandardJarScanner$ClassPathEntry.<init>:(Ljava/net/URL;)V
            astore 7 /* cpe */
        start local 7 // org.apache.tomcat.util.scan.StandardJarScanner$ClassPathEntry cpe
         5: .line 299
            aload 7 /* cpe */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner$ClassPathEntry.isJar:()Z
            ifne 8
         6: .line 300
            aload 1 /* scanType */
            getstatic org.apache.tomcat.JarScanType.PLUGGABILITY:Lorg/apache/tomcat/JarScanType;
            if_acmpeq 8
         7: .line 301
            aload 0 /* this */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.isScanAllDirectories:()Z
            ifeq 20
         8: .line 302
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner$ClassPathEntry
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.getJarScanFilter:()Lorg/apache/tomcat/JarScanFilter;
            aload 1 /* scanType */
         9: .line 303
            aload 7 /* cpe */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner$ClassPathEntry.getName:()Ljava/lang/String;
        10: .line 302
            invokeinterface org.apache.tomcat.JarScanFilter.check:(Lorg/apache/tomcat/JarScanType;Ljava/lang/String;)Z
        11: .line 303
            ifeq 20
        12: .line 304
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 14
        13: .line 305
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.tomcat.util.scan.StandardJarScanner.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jarScan.classloaderJarScan"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 6 /* url */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        14: .line 308
      StackMap locals:
      StackMap stack:
            aload 3 /* processedURLs */
            aload 6 /* url */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        15: .line 309
            aload 0 /* this */
            aload 1 /* scanType */
            aload 2 /* callback */
            aload 6 /* url */
            aconst_null
            iload 4 /* isWebapp */
            aload 5 /* classPathUrlsToProcess */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.process:(Lorg/apache/tomcat/JarScanType;Lorg/apache/tomcat/JarScannerCallback;Ljava/net/URL;Ljava/lang/String;ZLjava/util/Deque;)V
        16: .line 310
            goto 22
      StackMap locals:
      StackMap stack: java.io.IOException
        17: astore 8 /* ioe */
        start local 8 // java.io.IOException ioe
        18: .line 311
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.tomcat.util.scan.StandardJarScanner.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jarScan.classloaderFail"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 6 /* url */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            aload 8 /* ioe */
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 8 // java.io.IOException ioe
        19: .line 313
            goto 22
        20: .line 315
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 22
        21: .line 316
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.tomcat.util.scan.StandardJarScanner.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jarScan.classloaderJarNoScan"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 6 /* url */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        end local 7 // org.apache.tomcat.util.scan.StandardJarScanner$ClassPathEntry cpe
        end local 6 // java.net.URL url
        22: .line 285
      StackMap locals:
      StackMap stack:
            aload 5 /* classPathUrlsToProcess */
            invokeinterface java.util.Deque.isEmpty:()Z
            ifeq 1
        23: .line 320
            return
        end local 5 // java.util.Deque classPathUrlsToProcess
        end local 4 // boolean isWebapp
        end local 3 // java.util.Set processedURLs
        end local 2 // org.apache.tomcat.JarScannerCallback callback
        end local 1 // org.apache.tomcat.JarScanType scanType
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   24     0                    this  Lorg/apache/tomcat/util/scan/StandardJarScanner;
            0   24     1                scanType  Lorg/apache/tomcat/JarScanType;
            0   24     2                callback  Lorg/apache/tomcat/JarScannerCallback;
            0   24     3           processedURLs  Ljava/util/Set<Ljava/net/URL;>;
            0   24     4                isWebapp  Z
            0   24     5  classPathUrlsToProcess  Ljava/util/Deque<Ljava/net/URL;>;
            2   22     6                     url  Ljava/net/URL;
            5   22     7                     cpe  Lorg/apache/tomcat/util/scan/StandardJarScanner$ClassPathEntry;
           18   19     8                     ioe  Ljava/io/IOException;
      Exception table:
        from    to  target  type
          14    16      17  Class java.io.IOException
    Signature: (Lorg/apache/tomcat/JarScanType;Lorg/apache/tomcat/JarScannerCallback;Ljava/util/Set<Ljava/net/URL;>;ZLjava/util/Deque<Ljava/net/URL;>;)V
    MethodParameters:
                        Name  Flags
      scanType                
      callback                
      processedURLs           
      isWebapp                
      classPathUrlsToProcess  

  protected void addClassPath(java.util.Deque<java.net.URL>);
    descriptor: (Ljava/util/Deque;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=10, args_size=2
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
        start local 1 // java.util.Deque classPathUrlsToProcess
         0: .line 324
            ldc "java.class.path"
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            astore 2 /* classPath */
        start local 2 // java.lang.String classPath
         1: .line 326
            aload 2 /* classPath */
            ifnull 2
            aload 2 /* classPath */
            invokevirtual java.lang.String.length:()I
            ifne 3
         2: .line 327
      StackMap locals: java.lang.String
      StackMap stack:
            return
         3: .line 330
      StackMap locals:
      StackMap stack:
            aload 2 /* classPath */
            getstatic java.io.File.pathSeparator:Ljava/lang/String;
            invokevirtual java.lang.String.split:(Ljava/lang/String;)[Ljava/lang/String;
            astore 3 /* classPathEntries */
        start local 3 // java.lang.String[] classPathEntries
         4: .line 331
            aload 3 /* classPathEntries */
            dup
            astore 7
            arraylength
            istore 6
            iconst_0
            istore 5
            goto 12
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner java.util.Deque java.lang.String java.lang.String[] top int int java.lang.String[]
      StackMap stack:
         5: aload 7
            iload 5
            aaload
            astore 4 /* classPathEntry */
        start local 4 // java.lang.String classPathEntry
         6: .line 332
            new java.io.File
            dup
            aload 4 /* classPathEntry */
            invokespecial java.io.File.<init>:(Ljava/lang/String;)V
            astore 8 /* f */
        start local 8 // java.io.File f
         7: .line 334
            aload 1 /* classPathUrlsToProcess */
            aload 8 /* f */
            invokevirtual java.io.File.toURI:()Ljava/net/URI;
            invokevirtual java.net.URI.toURL:()Ljava/net/URL;
            invokeinterface java.util.Deque.add:(Ljava/lang/Object;)Z
            pop
         8: .line 335
            goto 11
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner java.util.Deque java.lang.String java.lang.String[] java.lang.String int int java.lang.String[] java.io.File
      StackMap stack: java.net.MalformedURLException
         9: astore 9 /* e */
        start local 9 // java.net.MalformedURLException e
        10: .line 336
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.tomcat.util.scan.StandardJarScanner.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jarScan.classPath.badEntry"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* classPathEntry */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            aload 9 /* e */
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 9 // java.net.MalformedURLException e
        end local 8 // java.io.File f
        end local 4 // java.lang.String classPathEntry
        11: .line 331
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner java.util.Deque java.lang.String java.lang.String[] top int int java.lang.String[]
      StackMap stack:
            iinc 5 1
      StackMap locals:
      StackMap stack:
        12: iload 5
            iload 6
            if_icmplt 5
        13: .line 339
            return
        end local 3 // java.lang.String[] classPathEntries
        end local 2 // java.lang.String classPath
        end local 1 // java.util.Deque classPathUrlsToProcess
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   14     0                    this  Lorg/apache/tomcat/util/scan/StandardJarScanner;
            0   14     1  classPathUrlsToProcess  Ljava/util/Deque<Ljava/net/URL;>;
            1   14     2               classPath  Ljava/lang/String;
            4   14     3        classPathEntries  [Ljava/lang/String;
            6   11     4          classPathEntry  Ljava/lang/String;
            7   11     8                       f  Ljava/io/File;
           10   11     9                       e  Ljava/net/MalformedURLException;
      Exception table:
        from    to  target  type
           7     8       9  Class java.net.MalformedURLException
    Signature: (Ljava/util/Deque<Ljava/net/URL;>;)V
    MethodParameters:
                        Name  Flags
      classPathUrlsToProcess  

  private static boolean isWebappClassLoader(java.lang.ClassLoader);
    descriptor: (Ljava/lang/ClassLoader;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.ClassLoader classLoader
         0: .line 357
            getstatic org.apache.tomcat.util.scan.StandardJarScanner.CLASSLOADER_HIERARCHY:Ljava/util/Set;
            aload 0 /* classLoader */
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ifeq 1
            iconst_0
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_1
      StackMap locals:
      StackMap stack: int
         2: ireturn
        end local 0 // java.lang.ClassLoader classLoader
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    3     0  classLoader  Ljava/lang/ClassLoader;
    MethodParameters:
             Name  Flags
      classLoader  

  protected void process(org.apache.tomcat.JarScanType, org.apache.tomcat.JarScannerCallback, java.net.URL, java.lang.String, boolean, java.util.Deque<java.net.URL>);
    descriptor: (Lorg/apache/tomcat/JarScanType;Lorg/apache/tomcat/JarScannerCallback;Ljava/net/URL;Ljava/lang/String;ZLjava/util/Deque;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=12, args_size=7
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
        start local 1 // org.apache.tomcat.JarScanType scanType
        start local 2 // org.apache.tomcat.JarScannerCallback callback
        start local 3 // java.net.URL url
        start local 4 // java.lang.String webappPath
        start local 5 // boolean isWebapp
        start local 6 // java.util.Deque classPathUrlsToProcess
         0: .line 369
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 2
         1: .line 370
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.tomcat.util.scan.StandardJarScanner.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jarScan.jarUrlStart"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 3 /* url */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
         2: .line 373
      StackMap locals:
      StackMap stack:
            ldc "jar"
            aload 3 /* url */
            invokevirtual java.net.URL.getProtocol:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 3
            aload 3 /* url */
            invokevirtual java.net.URL.getPath:()Ljava/lang/String;
            ldc ".jar"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 14
         3: .line 374
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 7
            aconst_null
            astore 8
         4: aload 3 /* url */
            invokestatic org.apache.tomcat.util.scan.JarFactory.newInstance:(Ljava/net/URL;)Lorg/apache/tomcat/Jar;
            astore 9 /* jar */
        start local 9 // org.apache.tomcat.Jar jar
         5: .line 375
            aload 0 /* this */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.isScanManifest:()Z
            ifeq 7
         6: .line 376
            aload 0 /* this */
            aload 9 /* jar */
            iload 5 /* isWebapp */
            aload 6 /* classPathUrlsToProcess */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.processManifest:(Lorg/apache/tomcat/Jar;ZLjava/util/Deque;)V
         7: .line 378
      StackMap locals: java.lang.Throwable java.lang.Throwable org.apache.tomcat.Jar
      StackMap stack:
            aload 2 /* callback */
            aload 9 /* jar */
            aload 4 /* webappPath */
            iload 5 /* isWebapp */
            invokeinterface org.apache.tomcat.JarScannerCallback.scan:(Lorg/apache/tomcat/Jar;Ljava/lang/String;Z)V
         8: .line 379
            aload 9 /* jar */
            ifnull 42
            aload 9 /* jar */
            invokeinterface org.apache.tomcat.Jar.close:()V
            goto 42
      StackMap locals:
      StackMap stack: java.lang.Throwable
         9: astore 7
            aload 9 /* jar */
            ifnull 10
            aload 9 /* jar */
            invokeinterface org.apache.tomcat.Jar.close:()V
        end local 9 // org.apache.tomcat.Jar jar
      StackMap locals:
      StackMap stack:
        10: aload 7
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        11: astore 8
            aload 7
            ifnonnull 12
            aload 8
            astore 7
            goto 13
      StackMap locals:
      StackMap stack:
        12: aload 7
            aload 8
            if_acmpeq 13
            aload 7
            aload 8
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        13: aload 7
            athrow
        14: .line 380
      StackMap locals:
      StackMap stack:
            ldc "file"
            aload 3 /* url */
            invokevirtual java.net.URL.getProtocol:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 42
        15: .line 383
            new java.io.File
            dup
            aload 3 /* url */
            invokevirtual java.net.URL.toURI:()Ljava/net/URI;
            invokespecial java.io.File.<init>:(Ljava/net/URI;)V
            astore 7 /* f */
        start local 7 // java.io.File f
        16: .line 384
            aload 7 /* f */
            invokevirtual java.io.File.isFile:()Z
            ifeq 29
            aload 0 /* this */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.isScanAllFiles:()Z
            ifeq 29
        17: .line 386
            aload 7 /* f */
            invokestatic org.apache.tomcat.util.buf.UriUtil.buildJarUrl:(Ljava/io/File;)Ljava/net/URL;
            astore 8 /* jarURL */
        start local 8 // java.net.URL jarURL
        18: .line 387
            aconst_null
            astore 9
            aconst_null
            astore 10
        19: aload 8 /* jarURL */
            invokestatic org.apache.tomcat.util.scan.JarFactory.newInstance:(Ljava/net/URL;)Lorg/apache/tomcat/Jar;
            astore 11 /* jar */
        start local 11 // org.apache.tomcat.Jar jar
        20: .line 388
            aload 0 /* this */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.isScanManifest:()Z
            ifeq 22
        21: .line 389
            aload 0 /* this */
            aload 11 /* jar */
            iload 5 /* isWebapp */
            aload 6 /* classPathUrlsToProcess */
            invokevirtual org.apache.tomcat.util.scan.StandardJarScanner.processManifest:(Lorg/apache/tomcat/Jar;ZLjava/util/Deque;)V
        22: .line 391
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner org.apache.tomcat.JarScanType org.apache.tomcat.JarScannerCallback java.net.URL java.lang.String int java.util.Deque java.io.File java.net.URL java.lang.Throwable java.lang.Throwable org.apache.tomcat.Jar
      StackMap stack:
            aload 2 /* callback */
            aload 11 /* jar */
            aload 4 /* webappPath */
            iload 5 /* isWebapp */
            invokeinterface org.apache.tomcat.JarScannerCallback.scan:(Lorg/apache/tomcat/Jar;Ljava/lang/String;Z)V
        23: .line 392
            aload 11 /* jar */
            ifnull 42
            aload 11 /* jar */
            invokeinterface org.apache.tomcat.Jar.close:()V
            goto 42
      StackMap locals:
      StackMap stack: java.lang.Throwable
        24: astore 9
            aload 11 /* jar */
            ifnull 25
            aload 11 /* jar */
            invokeinterface org.apache.tomcat.Jar.close:()V
        end local 11 // org.apache.tomcat.Jar jar
      StackMap locals:
      StackMap stack:
        25: aload 9
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        26: astore 10
            aload 9
            ifnonnull 27
            aload 10
            astore 9
            goto 28
      StackMap locals:
      StackMap stack:
        27: aload 9
            aload 10
            if_acmpeq 28
            aload 9
            aload 10
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        28: aload 9
            athrow
        end local 8 // java.net.URL jarURL
        29: .line 393
      StackMap locals:
      StackMap stack:
            aload 7 /* f */
            invokevirtual java.io.File.isDirectory:()Z
            ifeq 42
        30: .line 394
            aload 1 /* scanType */
            getstatic org.apache.tomcat.JarScanType.PLUGGABILITY:Lorg/apache/tomcat/JarScanType;
            if_acmpne 33
        31: .line 395
            aload 2 /* callback */
            aload 7 /* f */
            aload 4 /* webappPath */
            iload 5 /* isWebapp */
            invokeinterface org.apache.tomcat.JarScannerCallback.scan:(Ljava/io/File;Ljava/lang/String;Z)V
        32: .line 396
            goto 42
        33: .line 397
      StackMap locals:
      StackMap stack:
            new java.io.File
            dup
            new java.lang.StringBuilder
            dup
            invokespecial java.lang.StringBuilder.<init>:()V
            aload 7 /* f */
            invokevirtual java.io.File.getAbsoluteFile:()Ljava/io/File;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            getstatic java.io.File.separator:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "META-INF"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.io.File.<init>:(Ljava/lang/String;)V
            astore 8 /* metainf */
        start local 8 // java.io.File metainf
        34: .line 398
            aload 8 /* metainf */
            invokevirtual java.io.File.isDirectory:()Z
            ifeq 42
        35: .line 399
            aload 2 /* callback */
            aload 7 /* f */
            aload 4 /* webappPath */
            iload 5 /* isWebapp */
            invokeinterface org.apache.tomcat.JarScannerCallback.scan:(Ljava/io/File;Ljava/lang/String;Z)V
        end local 8 // java.io.File metainf
        36: .line 403
            goto 42
        end local 7 // java.io.File f
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner org.apache.tomcat.JarScanType org.apache.tomcat.JarScannerCallback java.net.URL java.lang.String int java.util.Deque
      StackMap stack: java.lang.Throwable
        37: astore 8 /* t */
        start local 8 // java.lang.Throwable t
        38: .line 404
            aload 8 /* t */
            invokestatic org.apache.tomcat.util.ExceptionUtils.handleThrowable:(Ljava/lang/Throwable;)V
        39: .line 406
            new java.io.IOException
            dup
            invokespecial java.io.IOException.<init>:()V
            astore 9 /* ioe */
        start local 9 // java.io.IOException ioe
        40: .line 407
            aload 9 /* ioe */
            aload 8 /* t */
            invokevirtual java.io.IOException.initCause:(Ljava/lang/Throwable;)Ljava/lang/Throwable;
            pop
        41: .line 408
            aload 9 /* ioe */
            athrow
        end local 9 // java.io.IOException ioe
        end local 8 // java.lang.Throwable t
        42: .line 411
      StackMap locals:
      StackMap stack:
            return
        end local 6 // java.util.Deque classPathUrlsToProcess
        end local 5 // boolean isWebapp
        end local 4 // java.lang.String webappPath
        end local 3 // java.net.URL url
        end local 2 // org.apache.tomcat.JarScannerCallback callback
        end local 1 // org.apache.tomcat.JarScanType scanType
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   43     0                    this  Lorg/apache/tomcat/util/scan/StandardJarScanner;
            0   43     1                scanType  Lorg/apache/tomcat/JarScanType;
            0   43     2                callback  Lorg/apache/tomcat/JarScannerCallback;
            0   43     3                     url  Ljava/net/URL;
            0   43     4              webappPath  Ljava/lang/String;
            0   43     5                isWebapp  Z
            0   43     6  classPathUrlsToProcess  Ljava/util/Deque<Ljava/net/URL;>;
            5   10     9                     jar  Lorg/apache/tomcat/Jar;
           16   37     7                       f  Ljava/io/File;
           18   29     8                  jarURL  Ljava/net/URL;
           20   25    11                     jar  Lorg/apache/tomcat/Jar;
           34   36     8                 metainf  Ljava/io/File;
           38   42     8                       t  Ljava/lang/Throwable;
           40   42     9                     ioe  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           5     8       9  any
           4    11      11  any
          20    23      24  any
          19    26      26  any
          15    36      37  Class java.lang.Throwable
    Exceptions:
      throws java.io.IOException
    Signature: (Lorg/apache/tomcat/JarScanType;Lorg/apache/tomcat/JarScannerCallback;Ljava/net/URL;Ljava/lang/String;ZLjava/util/Deque<Ljava/net/URL;>;)V
    MethodParameters:
                        Name  Flags
      scanType                
      callback                
      url                     
      webappPath              
      isWebapp                
      classPathUrlsToProcess  

  private void processManifest(org.apache.tomcat.Jar, boolean, java.util.Deque<java.net.URL>);
    descriptor: (Lorg/apache/tomcat/Jar;ZLjava/util/Deque;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=16, args_size=4
        start local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
        start local 1 // org.apache.tomcat.Jar jar
        start local 2 // boolean isWebapp
        start local 3 // java.util.Deque classPathUrlsToProcess
         0: .line 419
            iload 2 /* isWebapp */
            ifne 1
            aload 3 /* classPathUrlsToProcess */
            ifnonnull 2
         1: .line 420
      StackMap locals:
      StackMap stack:
            return
         2: .line 423
      StackMap locals:
      StackMap stack:
            aload 1 /* jar */
            invokeinterface org.apache.tomcat.Jar.getManifest:()Ljava/util/jar/Manifest;
            astore 4 /* manifest */
        start local 4 // java.util.jar.Manifest manifest
         3: .line 424
            aload 4 /* manifest */
            ifnull 26
         4: .line 425
            aload 4 /* manifest */
            invokevirtual java.util.jar.Manifest.getMainAttributes:()Ljava/util/jar/Attributes;
            astore 5 /* attributes */
        start local 5 // java.util.jar.Attributes attributes
         5: .line 426
            aload 5 /* attributes */
            ldc "Class-Path"
            invokevirtual java.util.jar.Attributes.getValue:(Ljava/lang/String;)Ljava/lang/String;
            astore 6 /* classPathAttribute */
        start local 6 // java.lang.String classPathAttribute
         6: .line 427
            aload 6 /* classPathAttribute */
            ifnonnull 8
         7: .line 428
            return
         8: .line 430
      StackMap locals: java.util.jar.Manifest java.util.jar.Attributes java.lang.String
      StackMap stack:
            aload 6 /* classPathAttribute */
            ldc " "
            invokevirtual java.lang.String.split:(Ljava/lang/String;)[Ljava/lang/String;
            astore 7 /* classPathEntries */
        start local 7 // java.lang.String[] classPathEntries
         9: .line 431
            aload 7 /* classPathEntries */
            dup
            astore 11
            arraylength
            istore 10
            iconst_0
            istore 9
            goto 25
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner org.apache.tomcat.Jar int java.util.Deque java.util.jar.Manifest java.util.jar.Attributes java.lang.String java.lang.String[] top int int java.lang.String[]
      StackMap stack:
        10: aload 11
            iload 9
            aaload
            astore 8 /* classPathEntry */
        start local 8 // java.lang.String classPathEntry
        11: .line 432
            aload 8 /* classPathEntry */
            invokevirtual java.lang.String.trim:()Ljava/lang/String;
            astore 8 /* classPathEntry */
        12: .line 433
            aload 8 /* classPathEntry */
            invokevirtual java.lang.String.length:()I
            ifne 14
        13: .line 434
            goto 24
        14: .line 436
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner org.apache.tomcat.Jar int java.util.Deque java.util.jar.Manifest java.util.jar.Attributes java.lang.String java.lang.String[] java.lang.String int int java.lang.String[]
      StackMap stack:
            aload 1 /* jar */
            invokeinterface org.apache.tomcat.Jar.getJarFileURL:()Ljava/net/URL;
            astore 12 /* jarURL */
        start local 12 // java.net.URL jarURL
        15: .line 439
            aload 12 /* jarURL */
            invokevirtual java.net.URL.toURI:()Ljava/net/URI;
            astore 14 /* jarURI */
        start local 14 // java.net.URI jarURI
        16: .line 450
            aload 14 /* jarURI */
            aload 8 /* classPathEntry */
            invokevirtual java.net.URI.resolve:(Ljava/lang/String;)Ljava/net/URI;
            astore 15 /* classPathEntryURI */
        start local 15 // java.net.URI classPathEntryURI
        17: .line 451
            aload 15 /* classPathEntryURI */
            invokevirtual java.net.URI.toURL:()Ljava/net/URL;
            astore 13 /* classPathEntryURL */
        end local 15 // java.net.URI classPathEntryURI
        end local 14 // java.net.URI jarURI
        start local 13 // java.net.URL classPathEntryURL
        18: .line 452
            goto 23
        end local 13 // java.net.URL classPathEntryURL
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner org.apache.tomcat.Jar int java.util.Deque java.util.jar.Manifest java.util.jar.Attributes java.lang.String java.lang.String[] java.lang.String int int java.lang.String[] java.net.URL
      StackMap stack: java.lang.Exception
        19: astore 14 /* e */
        start local 14 // java.lang.Exception e
        20: .line 453
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 24
        21: .line 454
            aload 0 /* this */
            getfield org.apache.tomcat.util.scan.StandardJarScanner.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.tomcat.util.scan.StandardJarScanner.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jarScan.invalidUri"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 12 /* jarURL */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            aload 14 /* e */
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        22: .line 456
            goto 24
        end local 14 // java.lang.Exception e
        start local 13 // java.net.URL classPathEntryURL
        23: .line 458
      StackMap locals: java.net.URL
      StackMap stack:
            aload 3 /* classPathUrlsToProcess */
            aload 13 /* classPathEntryURL */
            invokeinterface java.util.Deque.add:(Ljava/lang/Object;)Z
            pop
        end local 13 // java.net.URL classPathEntryURL
        end local 12 // java.net.URL jarURL
        end local 8 // java.lang.String classPathEntry
        24: .line 431
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner org.apache.tomcat.Jar int java.util.Deque java.util.jar.Manifest java.util.jar.Attributes java.lang.String java.lang.String[] top int int java.lang.String[]
      StackMap stack:
            iinc 9 1
      StackMap locals:
      StackMap stack:
        25: iload 9
            iload 10
            if_icmplt 10
        end local 7 // java.lang.String[] classPathEntries
        end local 6 // java.lang.String classPathAttribute
        end local 5 // java.util.jar.Attributes attributes
        26: .line 461
      StackMap locals: org.apache.tomcat.util.scan.StandardJarScanner org.apache.tomcat.Jar int java.util.Deque java.util.jar.Manifest
      StackMap stack:
            return
        end local 4 // java.util.jar.Manifest manifest
        end local 3 // java.util.Deque classPathUrlsToProcess
        end local 2 // boolean isWebapp
        end local 1 // org.apache.tomcat.Jar jar
        end local 0 // org.apache.tomcat.util.scan.StandardJarScanner this
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   27     0                    this  Lorg/apache/tomcat/util/scan/StandardJarScanner;
            0   27     1                     jar  Lorg/apache/tomcat/Jar;
            0   27     2                isWebapp  Z
            0   27     3  classPathUrlsToProcess  Ljava/util/Deque<Ljava/net/URL;>;
            3   27     4                manifest  Ljava/util/jar/Manifest;
            5   26     5              attributes  Ljava/util/jar/Attributes;
            6   26     6      classPathAttribute  Ljava/lang/String;
            9   26     7        classPathEntries  [Ljava/lang/String;
           11   24     8          classPathEntry  Ljava/lang/String;
           15   24    12                  jarURL  Ljava/net/URL;
           18   19    13       classPathEntryURL  Ljava/net/URL;
           23   24    13       classPathEntryURL  Ljava/net/URL;
           16   18    14                  jarURI  Ljava/net/URI;
           17   18    15       classPathEntryURI  Ljava/net/URI;
           20   23    14                       e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
          15    18      19  Class java.lang.Exception
    Exceptions:
      throws java.io.IOException
    Signature: (Lorg/apache/tomcat/Jar;ZLjava/util/Deque<Ljava/net/URL;>;)V
    MethodParameters:
                        Name  Flags
      jar                     
      isWebapp                
      classPathUrlsToProcess  
}
SourceFile: "StandardJarScanner.java"
NestMembers:
  org.apache.tomcat.util.scan.StandardJarScanner$ClassPathEntry
InnerClasses:
  private ClassPathEntry = org.apache.tomcat.util.scan.StandardJarScanner$ClassPathEntry of org.apache.tomcat.util.scan.StandardJarScanner