class javax.cache.Caching$CachingProviderRegistry
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: javax.cache.Caching$CachingProviderRegistry
  super_class: java.lang.Object
{
  private java.util.WeakHashMap<java.lang.ClassLoader, java.util.LinkedHashMap<java.lang.String, javax.cache.spi.CachingProvider>> cachingProviders;
    descriptor: Ljava/util/WeakHashMap;
    flags: (0x0002) ACC_PRIVATE
    Signature: Ljava/util/WeakHashMap<Ljava/lang/ClassLoader;Ljava/util/LinkedHashMap<Ljava/lang/String;Ljavax/cache/spi/CachingProvider;>;>;

  private volatile java.lang.ClassLoader classLoader;
    descriptor: Ljava/lang/ClassLoader;
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // javax.cache.Caching$CachingProviderRegistry this
         0: .line 315
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 316
            aload 0 /* this */
            new java.util.WeakHashMap
            dup
            invokespecial java.util.WeakHashMap.<init>:()V
            putfield javax.cache.Caching$CachingProviderRegistry.cachingProviders:Ljava/util/WeakHashMap;
         2: .line 318
            aload 0 /* this */
            aconst_null
            putfield javax.cache.Caching$CachingProviderRegistry.classLoader:Ljava/lang/ClassLoader;
         3: .line 319
            return
        end local 0 // javax.cache.Caching$CachingProviderRegistry this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Ljavax/cache/Caching$CachingProviderRegistry;

  public java.lang.ClassLoader getDefaultClassLoader();
    descriptor: ()Ljava/lang/ClassLoader;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=2, args_size=1
        start local 0 // javax.cache.Caching$CachingProviderRegistry this
         0: .line 330
            aload 0 /* this */
            getfield javax.cache.Caching$CachingProviderRegistry.classLoader:Ljava/lang/ClassLoader;
            astore 1 /* loader */
        start local 1 // java.lang.ClassLoader loader
         1: .line 331
            aload 1 /* loader */
            ifnonnull 2
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getContextClassLoader:()Ljava/lang/ClassLoader;
            goto 3
      StackMap locals: java.lang.ClassLoader
      StackMap stack:
         2: aload 1 /* loader */
      StackMap locals:
      StackMap stack: java.lang.ClassLoader
         3: areturn
        end local 1 // java.lang.ClassLoader loader
        end local 0 // javax.cache.Caching$CachingProviderRegistry this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    4     0    this  Ljavax/cache/Caching$CachingProviderRegistry;
            1    4     1  loader  Ljava/lang/ClassLoader;

  public void setDefaultClassLoader(java.lang.ClassLoader);
    descriptor: (Ljava/lang/ClassLoader;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // javax.cache.Caching$CachingProviderRegistry this
        start local 1 // java.lang.ClassLoader classLoader
         0: .line 343
            aload 0 /* this */
            aload 1 /* classLoader */
            putfield javax.cache.Caching$CachingProviderRegistry.classLoader:Ljava/lang/ClassLoader;
         1: .line 344
            return
        end local 1 // java.lang.ClassLoader classLoader
        end local 0 // javax.cache.Caching$CachingProviderRegistry this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Ljavax/cache/Caching$CachingProviderRegistry;
            0    2     1  classLoader  Ljava/lang/ClassLoader;
    MethodParameters:
             Name  Flags
      classLoader  

  public javax.cache.spi.CachingProvider getCachingProvider();
    descriptor: ()Ljavax/cache/spi/CachingProvider;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // javax.cache.Caching$CachingProviderRegistry this
         0: .line 361
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual javax.cache.Caching$CachingProviderRegistry.getDefaultClassLoader:()Ljava/lang/ClassLoader;
            invokevirtual javax.cache.Caching$CachingProviderRegistry.getCachingProvider:(Ljava/lang/ClassLoader;)Ljavax/cache/spi/CachingProvider;
            areturn
        end local 0 // javax.cache.Caching$CachingProviderRegistry this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljavax/cache/Caching$CachingProviderRegistry;

  public javax.cache.spi.CachingProvider getCachingProvider(java.lang.ClassLoader);
    descriptor: (Ljava/lang/ClassLoader;)Ljavax/cache/spi/CachingProvider;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // javax.cache.Caching$CachingProviderRegistry this
        start local 1 // java.lang.ClassLoader classLoader
         0: .line 380
            aload 0 /* this */
            aload 1 /* classLoader */
            invokevirtual javax.cache.Caching$CachingProviderRegistry.getCachingProviders:(Ljava/lang/ClassLoader;)Ljava/lang/Iterable;
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 2 /* iterator */
        start local 2 // java.util.Iterator iterator
         1: .line 382
            aload 2 /* iterator */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifeq 6
         2: .line 383
            aload 2 /* iterator */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast javax.cache.spi.CachingProvider
            astore 3 /* provider */
        start local 3 // javax.cache.spi.CachingProvider provider
         3: .line 385
            aload 2 /* iterator */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifeq 5
         4: .line 386
            new javax.cache.CacheException
            dup
            ldc "Multiple CachingProviders have been configured when only a single CachingProvider is expected"
            invokespecial javax.cache.CacheException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 388
      StackMap locals: java.util.Iterator javax.cache.spi.CachingProvider
      StackMap stack:
            aload 3 /* provider */
            areturn
        end local 3 // javax.cache.spi.CachingProvider provider
         6: .line 391
      StackMap locals:
      StackMap stack:
            new javax.cache.CacheException
            dup
            ldc "No CachingProviders have been configured"
            invokespecial javax.cache.CacheException.<init>:(Ljava/lang/String;)V
            athrow
        end local 2 // java.util.Iterator iterator
        end local 1 // java.lang.ClassLoader classLoader
        end local 0 // javax.cache.Caching$CachingProviderRegistry this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    7     0         this  Ljavax/cache/Caching$CachingProviderRegistry;
            0    7     1  classLoader  Ljava/lang/ClassLoader;
            1    7     2     iterator  Ljava/util/Iterator<Ljavax/cache/spi/CachingProvider;>;
            3    6     3     provider  Ljavax/cache/spi/CachingProvider;
    MethodParameters:
             Name  Flags
      classLoader  

  public java.lang.Iterable<javax.cache.spi.CachingProvider> getCachingProviders();
    descriptor: ()Ljava/lang/Iterable;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // javax.cache.Caching$CachingProviderRegistry this
         0: .line 410
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual javax.cache.Caching$CachingProviderRegistry.getDefaultClassLoader:()Ljava/lang/ClassLoader;
            invokevirtual javax.cache.Caching$CachingProviderRegistry.getCachingProviders:(Ljava/lang/ClassLoader;)Ljava/lang/Iterable;
            areturn
        end local 0 // javax.cache.Caching$CachingProviderRegistry this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljavax/cache/Caching$CachingProviderRegistry;
    Signature: ()Ljava/lang/Iterable<Ljavax/cache/spi/CachingProvider;>;

  public synchronized java.lang.Iterable<javax.cache.spi.CachingProvider> getCachingProviders(java.lang.ClassLoader);
    descriptor: (Ljava/lang/ClassLoader;)Ljava/lang/Iterable;
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // javax.cache.Caching$CachingProviderRegistry this
        start local 1 // java.lang.ClassLoader classLoader
         0: .line 431
            aload 1 /* classLoader */
            ifnonnull 1
            aload 0 /* this */
            invokevirtual javax.cache.Caching$CachingProviderRegistry.getDefaultClassLoader:()Ljava/lang/ClassLoader;
            goto 2
      StackMap locals:
      StackMap stack:
         1: aload 1 /* classLoader */
      StackMap locals:
      StackMap stack: java.lang.ClassLoader
         2: astore 2 /* serviceClassLoader */
        start local 2 // java.lang.ClassLoader serviceClassLoader
         3: .line 432
            aload 0 /* this */
            getfield javax.cache.Caching$CachingProviderRegistry.cachingProviders:Ljava/util/WeakHashMap;
            aload 2 /* serviceClassLoader */
            invokevirtual java.util.WeakHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.LinkedHashMap
            astore 3 /* providers */
        start local 3 // java.util.LinkedHashMap providers
         4: .line 434
            aload 3 /* providers */
            ifnonnull 12
         5: .line 436
            ldc "javax.cache.spi.CachingProvider"
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            astore 4 /* className */
        start local 4 // java.lang.String className
         6: .line 437
            aload 4 /* className */
            ifnull 10
         7: .line 438
            new java.util.LinkedHashMap
            dup
            invokespecial java.util.LinkedHashMap.<init>:()V
            astore 3 /* providers */
         8: .line 439
            aload 3 /* providers */
            aload 4 /* className */
            aload 0 /* this */
            aload 4 /* className */
            aload 2 /* serviceClassLoader */
            invokevirtual javax.cache.Caching$CachingProviderRegistry.loadCachingProvider:(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/cache/spi/CachingProvider;
            invokevirtual java.util.LinkedHashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         9: .line 441
            goto 11
        10: .line 442
      StackMap locals: java.lang.ClassLoader java.util.LinkedHashMap java.lang.String
      StackMap stack:
            new javax.cache.Caching$CachingProviderRegistry$1
            dup
            aload 0 /* this */
            aload 2 /* serviceClassLoader */
            invokespecial javax.cache.Caching$CachingProviderRegistry$1.<init>:(Ljavax/cache/Caching$CachingProviderRegistry;Ljava/lang/ClassLoader;)V
            invokestatic java.security.AccessController.doPrivileged:(Ljava/security/PrivilegedAction;)Ljava/lang/Object;
            checkcast java.util.LinkedHashMap
            astore 3 /* providers */
        11: .line 457
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield javax.cache.Caching$CachingProviderRegistry.cachingProviders:Ljava/util/WeakHashMap;
            aload 2 /* serviceClassLoader */
            aload 3 /* providers */
            invokevirtual java.util.WeakHashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 4 // java.lang.String className
        12: .line 460
      StackMap locals:
      StackMap stack:
            aload 3 /* providers */
            invokevirtual java.util.LinkedHashMap.values:()Ljava/util/Collection;
            areturn
        end local 3 // java.util.LinkedHashMap providers
        end local 2 // java.lang.ClassLoader serviceClassLoader
        end local 1 // java.lang.ClassLoader classLoader
        end local 0 // javax.cache.Caching$CachingProviderRegistry this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   13     0                this  Ljavax/cache/Caching$CachingProviderRegistry;
            0   13     1         classLoader  Ljava/lang/ClassLoader;
            3   13     2  serviceClassLoader  Ljava/lang/ClassLoader;
            4   13     3           providers  Ljava/util/LinkedHashMap<Ljava/lang/String;Ljavax/cache/spi/CachingProvider;>;
            6   12     4           className  Ljava/lang/String;
    Signature: (Ljava/lang/ClassLoader;)Ljava/lang/Iterable<Ljavax/cache/spi/CachingProvider;>;
    MethodParameters:
             Name  Flags
      classLoader  

  public javax.cache.spi.CachingProvider getCachingProvider(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljavax/cache/spi/CachingProvider;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // javax.cache.Caching$CachingProviderRegistry this
        start local 1 // java.lang.String fullyQualifiedClassName
         0: .line 476
            aload 0 /* this */
            aload 1 /* fullyQualifiedClassName */
            aload 0 /* this */
            invokevirtual javax.cache.Caching$CachingProviderRegistry.getDefaultClassLoader:()Ljava/lang/ClassLoader;
            invokevirtual javax.cache.Caching$CachingProviderRegistry.getCachingProvider:(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/cache/spi/CachingProvider;
            areturn
        end local 1 // java.lang.String fullyQualifiedClassName
        end local 0 // javax.cache.Caching$CachingProviderRegistry this
      LocalVariableTable:
        Start  End  Slot                     Name  Signature
            0    1     0                     this  Ljavax/cache/Caching$CachingProviderRegistry;
            0    1     1  fullyQualifiedClassName  Ljava/lang/String;
    MethodParameters:
                         Name  Flags
      fullyQualifiedClassName  

  protected javax.cache.spi.CachingProvider loadCachingProvider(java.lang.String, java.lang.ClassLoader);
    descriptor: (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/cache/spi/CachingProvider;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=5, args_size=3
        start local 0 // javax.cache.Caching$CachingProviderRegistry this
        start local 1 // java.lang.String fullyQualifiedClassName
        start local 2 // java.lang.ClassLoader classLoader
         0: .line 493
            aload 2 /* classLoader */
            dup
            astore 3
            monitorenter
         1: .line 495
            aload 2 /* classLoader */
            aload 1 /* fullyQualifiedClassName */
            invokevirtual java.lang.ClassLoader.loadClass:(Ljava/lang/String;)Ljava/lang/Class;
            astore 4 /* clazz */
        start local 4 // java.lang.Class clazz
         2: .line 496
            ldc Ljavax/cache/spi/CachingProvider;
            aload 4 /* clazz */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 6
         3: .line 497
            aload 4 /* clazz */
            invokevirtual java.lang.Class.newInstance:()Ljava/lang/Object;
            checkcast javax.cache.spi.CachingProvider
         4: aload 3
            monitorexit
         5: areturn
         6: .line 499
      StackMap locals: java.lang.ClassLoader java.lang.Class
      StackMap stack:
            new javax.cache.CacheException
            dup
            new java.lang.StringBuilder
            dup
            ldc "The specified class ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* fullyQualifiedClassName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "] is not a CachingProvider"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial javax.cache.CacheException.<init>:(Ljava/lang/String;)V
            athrow
        end local 4 // java.lang.Class clazz
         7: .line 501
      StackMap locals: javax.cache.Caching$CachingProviderRegistry java.lang.String java.lang.ClassLoader java.lang.ClassLoader
      StackMap stack: java.lang.Exception
            astore 4 /* e */
        start local 4 // java.lang.Exception e
         8: .line 502
            new javax.cache.CacheException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Failed to load the CachingProvider ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* fullyQualifiedClassName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 4 /* e */
            invokespecial javax.cache.CacheException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.lang.Exception e
         9: .line 493
      StackMap locals:
      StackMap stack: java.lang.Throwable
            aload 3
            monitorexit
        10: athrow
        end local 2 // java.lang.ClassLoader classLoader
        end local 1 // java.lang.String fullyQualifiedClassName
        end local 0 // javax.cache.Caching$CachingProviderRegistry this
      LocalVariableTable:
        Start  End  Slot                     Name  Signature
            0   11     0                     this  Ljavax/cache/Caching$CachingProviderRegistry;
            0   11     1  fullyQualifiedClassName  Ljava/lang/String;
            0   11     2              classLoader  Ljava/lang/ClassLoader;
            2    7     4                    clazz  Ljava/lang/Class<*>;
            8    9     4                        e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           1     4       7  Class java.lang.Exception
           6     7       7  Class java.lang.Exception
           1     5       9  any
           6    10       9  any
    Exceptions:
      throws javax.cache.CacheException
    MethodParameters:
                         Name  Flags
      fullyQualifiedClassName  
      classLoader              

  public synchronized javax.cache.spi.CachingProvider getCachingProvider(java.lang.String, java.lang.ClassLoader);
    descriptor: (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/cache/spi/CachingProvider;
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=6, args_size=3
        start local 0 // javax.cache.Caching$CachingProviderRegistry this
        start local 1 // java.lang.String fullyQualifiedClassName
        start local 2 // java.lang.ClassLoader classLoader
         0: .line 522
            aload 2 /* classLoader */
            ifnonnull 1
            aload 0 /* this */
            invokevirtual javax.cache.Caching$CachingProviderRegistry.getDefaultClassLoader:()Ljava/lang/ClassLoader;
            goto 2
      StackMap locals:
      StackMap stack:
         1: aload 2 /* classLoader */
      StackMap locals:
      StackMap stack: java.lang.ClassLoader
         2: astore 3 /* serviceClassLoader */
        start local 3 // java.lang.ClassLoader serviceClassLoader
         3: .line 524
            aload 0 /* this */
            getfield javax.cache.Caching$CachingProviderRegistry.cachingProviders:Ljava/util/WeakHashMap;
            aload 3 /* serviceClassLoader */
            invokevirtual java.util.WeakHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.LinkedHashMap
            astore 4 /* providers */
        start local 4 // java.util.LinkedHashMap providers
         4: .line 526
            aload 4 /* providers */
            ifnonnull 7
         5: .line 529
            aload 0 /* this */
            aload 3 /* serviceClassLoader */
            invokevirtual javax.cache.Caching$CachingProviderRegistry.getCachingProviders:(Ljava/lang/ClassLoader;)Ljava/lang/Iterable;
            pop
         6: .line 530
            aload 0 /* this */
            getfield javax.cache.Caching$CachingProviderRegistry.cachingProviders:Ljava/util/WeakHashMap;
            aload 3 /* serviceClassLoader */
            invokevirtual java.util.WeakHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.LinkedHashMap
            astore 4 /* providers */
         7: .line 533
      StackMap locals: java.lang.ClassLoader java.util.LinkedHashMap
      StackMap stack:
            aload 4 /* providers */
            aload 1 /* fullyQualifiedClassName */
            invokevirtual java.util.LinkedHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast javax.cache.spi.CachingProvider
            astore 5 /* provider */
        start local 5 // javax.cache.spi.CachingProvider provider
         8: .line 535
            aload 5 /* provider */
            ifnonnull 11
         9: .line 536
            aload 0 /* this */
            aload 1 /* fullyQualifiedClassName */
            aload 3 /* serviceClassLoader */
            invokevirtual javax.cache.Caching$CachingProviderRegistry.loadCachingProvider:(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/cache/spi/CachingProvider;
            astore 5 /* provider */
        10: .line 537
            aload 4 /* providers */
            aload 1 /* fullyQualifiedClassName */
            aload 5 /* provider */
            invokevirtual java.util.LinkedHashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        11: .line 540
      StackMap locals: javax.cache.spi.CachingProvider
      StackMap stack:
            aload 5 /* provider */
            areturn
        end local 5 // javax.cache.spi.CachingProvider provider
        end local 4 // java.util.LinkedHashMap providers
        end local 3 // java.lang.ClassLoader serviceClassLoader
        end local 2 // java.lang.ClassLoader classLoader
        end local 1 // java.lang.String fullyQualifiedClassName
        end local 0 // javax.cache.Caching$CachingProviderRegistry this
      LocalVariableTable:
        Start  End  Slot                     Name  Signature
            0   12     0                     this  Ljavax/cache/Caching$CachingProviderRegistry;
            0   12     1  fullyQualifiedClassName  Ljava/lang/String;
            0   12     2              classLoader  Ljava/lang/ClassLoader;
            3   12     3       serviceClassLoader  Ljava/lang/ClassLoader;
            4   12     4                providers  Ljava/util/LinkedHashMap<Ljava/lang/String;Ljavax/cache/spi/CachingProvider;>;
            8   12     5                 provider  Ljavax/cache/spi/CachingProvider;
    MethodParameters:
                         Name  Flags
      fullyQualifiedClassName  
      classLoader              
}
SourceFile: "Caching.java"
NestHost: javax.cache.Caching
InnerClasses:
  private CachingProviderRegistry = javax.cache.Caching$CachingProviderRegistry of javax.cache.Caching
  javax.cache.Caching$CachingProviderRegistry$1