public class org.eclipse.jgit.lib.RepositoryCache
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.eclipse.jgit.lib.RepositoryCache
  super_class: java.lang.Object
{
  private static final org.slf4j.Logger LOG;
    descriptor: Lorg/slf4j/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final org.eclipse.jgit.lib.RepositoryCache cache;
    descriptor: Lorg/eclipse/jgit/lib/RepositoryCache;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final java.util.concurrent.ConcurrentHashMap<org.eclipse.jgit.lib.RepositoryCache$Key, org.eclipse.jgit.lib.Repository> cacheMap;
    descriptor: Ljava/util/concurrent/ConcurrentHashMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/concurrent/ConcurrentHashMap<Lorg/eclipse/jgit/lib/RepositoryCache$Key;Lorg/eclipse/jgit/lib/Repository;>;

  private final org.eclipse.jgit.lib.RepositoryCache$Lock[] openLocks;
    descriptor: [Lorg/eclipse/jgit/lib/RepositoryCache$Lock;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private java.util.concurrent.ScheduledFuture<?> cleanupTask;
    descriptor: Ljava/util/concurrent/ScheduledFuture;
    flags: (0x0002) ACC_PRIVATE
    Signature: Ljava/util/concurrent/ScheduledFuture<*>;

  private volatile long expireAfter;
    descriptor: J
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 70
            ldc Lorg/eclipse/jgit/lib/RepositoryCache;
            invokestatic org.slf4j.LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
         1: .line 69
            putstatic org.eclipse.jgit.lib.RepositoryCache.LOG:Lorg/slf4j/Logger;
         2: .line 72
            new org.eclipse.jgit.lib.RepositoryCache
            dup
            invokespecial org.eclipse.jgit.lib.RepositoryCache.<init>:()V
            putstatic org.eclipse.jgit.lib.RepositoryCache.cache:Lorg/eclipse/jgit/lib/RepositoryCache;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public static org.eclipse.jgit.lib.Repository open(org.eclipse.jgit.lib.RepositoryCache$Key);
    descriptor: (Lorg/eclipse/jgit/lib/RepositoryCache$Key;)Lorg/eclipse/jgit/lib/Repository;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.eclipse.jgit.lib.RepositoryCache$Key location
         0: .line 93
            aload 0 /* location */
            iconst_1
            invokestatic org.eclipse.jgit.lib.RepositoryCache.open:(Lorg/eclipse/jgit/lib/RepositoryCache$Key;Z)Lorg/eclipse/jgit/lib/Repository;
            areturn
        end local 0 // org.eclipse.jgit.lib.RepositoryCache$Key location
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0  location  Lorg/eclipse/jgit/lib/RepositoryCache$Key;
    Exceptions:
      throws java.io.IOException, org.eclipse.jgit.errors.RepositoryNotFoundException
    MethodParameters:
          Name  Flags
      location  

  public static org.eclipse.jgit.lib.Repository open(org.eclipse.jgit.lib.RepositoryCache$Key, boolean);
    descriptor: (Lorg/eclipse/jgit/lib/RepositoryCache$Key;Z)Lorg/eclipse/jgit/lib/Repository;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.eclipse.jgit.lib.RepositoryCache$Key location
        start local 1 // boolean mustExist
         0: .line 120
            getstatic org.eclipse.jgit.lib.RepositoryCache.cache:Lorg/eclipse/jgit/lib/RepositoryCache;
            aload 0 /* location */
            iload 1 /* mustExist */
            invokevirtual org.eclipse.jgit.lib.RepositoryCache.openRepository:(Lorg/eclipse/jgit/lib/RepositoryCache$Key;Z)Lorg/eclipse/jgit/lib/Repository;
            areturn
        end local 1 // boolean mustExist
        end local 0 // org.eclipse.jgit.lib.RepositoryCache$Key location
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    1     0   location  Lorg/eclipse/jgit/lib/RepositoryCache$Key;
            0    1     1  mustExist  Z
    Exceptions:
      throws java.io.IOException
    MethodParameters:
           Name  Flags
      location   
      mustExist  

  public static void register(org.eclipse.jgit.lib.Repository);
    descriptor: (Lorg/eclipse/jgit/lib/Repository;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // org.eclipse.jgit.lib.Repository db
         0: .line 139
            aload 0 /* db */
            invokevirtual org.eclipse.jgit.lib.Repository.getDirectory:()Ljava/io/File;
            ifnull 3
         1: .line 140
            aload 0 /* db */
            invokevirtual org.eclipse.jgit.lib.Repository.getDirectory:()Ljava/io/File;
            aload 0 /* db */
            invokevirtual org.eclipse.jgit.lib.Repository.getFS:()Lorg/eclipse/jgit/util/FS;
            invokestatic org.eclipse.jgit.lib.RepositoryCache$FileKey.exact:(Ljava/io/File;Lorg/eclipse/jgit/util/FS;)Lorg/eclipse/jgit/lib/RepositoryCache$FileKey;
            astore 1 /* key */
        start local 1 // org.eclipse.jgit.lib.RepositoryCache$FileKey key
         2: .line 141
            getstatic org.eclipse.jgit.lib.RepositoryCache.cache:Lorg/eclipse/jgit/lib/RepositoryCache;
            aload 1 /* key */
            aload 0 /* db */
            invokevirtual org.eclipse.jgit.lib.RepositoryCache.registerRepository:(Lorg/eclipse/jgit/lib/RepositoryCache$Key;Lorg/eclipse/jgit/lib/Repository;)V
        end local 1 // org.eclipse.jgit.lib.RepositoryCache$FileKey key
         3: .line 143
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.eclipse.jgit.lib.Repository db
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0    db  Lorg/eclipse/jgit/lib/Repository;
            2    3     1   key  Lorg/eclipse/jgit/lib/RepositoryCache$FileKey;
    MethodParameters:
      Name  Flags
      db    

  public static void close(org.eclipse.jgit.lib.Repository);
    descriptor: (Lorg/eclipse/jgit/lib/Repository;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // org.eclipse.jgit.lib.Repository db
         0: .line 155
            aload 0 /* db */
            invokevirtual org.eclipse.jgit.lib.Repository.getDirectory:()Ljava/io/File;
            ifnull 3
         1: .line 156
            aload 0 /* db */
            invokevirtual org.eclipse.jgit.lib.Repository.getDirectory:()Ljava/io/File;
            aload 0 /* db */
            invokevirtual org.eclipse.jgit.lib.Repository.getFS:()Lorg/eclipse/jgit/util/FS;
            invokestatic org.eclipse.jgit.lib.RepositoryCache$FileKey.exact:(Ljava/io/File;Lorg/eclipse/jgit/util/FS;)Lorg/eclipse/jgit/lib/RepositoryCache$FileKey;
            astore 1 /* key */
        start local 1 // org.eclipse.jgit.lib.RepositoryCache$FileKey key
         2: .line 157
            getstatic org.eclipse.jgit.lib.RepositoryCache.cache:Lorg/eclipse/jgit/lib/RepositoryCache;
            aload 1 /* key */
            invokevirtual org.eclipse.jgit.lib.RepositoryCache.unregisterAndCloseRepository:(Lorg/eclipse/jgit/lib/RepositoryCache$Key;)V
        end local 1 // org.eclipse.jgit.lib.RepositoryCache$FileKey key
         3: .line 159
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.eclipse.jgit.lib.Repository db
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0    db  Lorg/eclipse/jgit/lib/Repository;
            2    3     1   key  Lorg/eclipse/jgit/lib/RepositoryCache$FileKey;
    RuntimeInvisibleParameterAnnotations: 
      0:
        org.eclipse.jgit.annotations.NonNull()
    MethodParameters:
      Name  Flags
      db    

  public static void unregister(org.eclipse.jgit.lib.Repository);
    descriptor: (Lorg/eclipse/jgit/lib/Repository;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.eclipse.jgit.lib.Repository db
         0: .line 174
            aload 0 /* db */
            invokevirtual org.eclipse.jgit.lib.Repository.getDirectory:()Ljava/io/File;
            ifnull 2
         1: .line 175
            aload 0 /* db */
            invokevirtual org.eclipse.jgit.lib.Repository.getDirectory:()Ljava/io/File;
            aload 0 /* db */
            invokevirtual org.eclipse.jgit.lib.Repository.getFS:()Lorg/eclipse/jgit/util/FS;
            invokestatic org.eclipse.jgit.lib.RepositoryCache$FileKey.exact:(Ljava/io/File;Lorg/eclipse/jgit/util/FS;)Lorg/eclipse/jgit/lib/RepositoryCache$FileKey;
            invokestatic org.eclipse.jgit.lib.RepositoryCache.unregister:(Lorg/eclipse/jgit/lib/RepositoryCache$Key;)V
         2: .line 177
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.eclipse.jgit.lib.Repository db
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0    db  Lorg/eclipse/jgit/lib/Repository;
    MethodParameters:
      Name  Flags
      db    

  public static void unregister(org.eclipse.jgit.lib.RepositoryCache$Key);
    descriptor: (Lorg/eclipse/jgit/lib/RepositoryCache$Key;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.eclipse.jgit.lib.RepositoryCache$Key location
         0: .line 192
            getstatic org.eclipse.jgit.lib.RepositoryCache.cache:Lorg/eclipse/jgit/lib/RepositoryCache;
            aload 0 /* location */
            invokevirtual org.eclipse.jgit.lib.RepositoryCache.unregisterRepository:(Lorg/eclipse/jgit/lib/RepositoryCache$Key;)Lorg/eclipse/jgit/lib/Repository;
            pop
         1: .line 193
            return
        end local 0 // org.eclipse.jgit.lib.RepositoryCache$Key location
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0  location  Lorg/eclipse/jgit/lib/RepositoryCache$Key;
    MethodParameters:
          Name  Flags
      location  

  public static java.util.Collection<org.eclipse.jgit.lib.RepositoryCache$Key> getRegisteredKeys();
    descriptor: ()Ljava/util/Collection;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 202
            getstatic org.eclipse.jgit.lib.RepositoryCache.cache:Lorg/eclipse/jgit/lib/RepositoryCache;
            invokevirtual org.eclipse.jgit.lib.RepositoryCache.getKeys:()Ljava/util/Collection;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    Signature: ()Ljava/util/Collection<Lorg/eclipse/jgit/lib/RepositoryCache$Key;>;

  static boolean isCached(org.eclipse.jgit.lib.Repository);
    descriptor: (Lorg/eclipse/jgit/lib/Repository;)Z
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // org.eclipse.jgit.lib.Repository repo
         0: .line 206
            aload 0 /* repo */
            invokevirtual org.eclipse.jgit.lib.Repository.getDirectory:()Ljava/io/File;
            astore 1 /* gitDir */
        start local 1 // java.io.File gitDir
         1: .line 207
            aload 1 /* gitDir */
            ifnonnull 3
         2: .line 208
            iconst_0
            ireturn
         3: .line 210
      StackMap locals: java.io.File
      StackMap stack:
            new org.eclipse.jgit.lib.RepositoryCache$FileKey
            dup
            aload 1 /* gitDir */
            aload 0 /* repo */
            invokevirtual org.eclipse.jgit.lib.Repository.getFS:()Lorg/eclipse/jgit/util/FS;
            invokespecial org.eclipse.jgit.lib.RepositoryCache$FileKey.<init>:(Ljava/io/File;Lorg/eclipse/jgit/util/FS;)V
            astore 2 /* key */
        start local 2 // org.eclipse.jgit.lib.RepositoryCache$FileKey key
         4: .line 211
            getstatic org.eclipse.jgit.lib.RepositoryCache.cache:Lorg/eclipse/jgit/lib/RepositoryCache;
            getfield org.eclipse.jgit.lib.RepositoryCache.cacheMap:Ljava/util/concurrent/ConcurrentHashMap;
            aload 2 /* key */
            invokevirtual java.util.concurrent.ConcurrentHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            aload 0 /* repo */
            if_acmpne 5
            iconst_1
            ireturn
      StackMap locals: org.eclipse.jgit.lib.RepositoryCache$FileKey
      StackMap stack:
         5: iconst_0
            ireturn
        end local 2 // org.eclipse.jgit.lib.RepositoryCache$FileKey key
        end local 1 // java.io.File gitDir
        end local 0 // org.eclipse.jgit.lib.Repository repo
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    6     0    repo  Lorg/eclipse/jgit/lib/Repository;
            1    6     1  gitDir  Ljava/io/File;
            4    6     2     key  Lorg/eclipse/jgit/lib/RepositoryCache$FileKey;
    RuntimeInvisibleParameterAnnotations: 
      0:
        org.eclipse.jgit.annotations.NonNull()
    MethodParameters:
      Name  Flags
      repo  

  public static void clear();
    descriptor: ()V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 218
            getstatic org.eclipse.jgit.lib.RepositoryCache.cache:Lorg/eclipse/jgit/lib/RepositoryCache;
            invokevirtual org.eclipse.jgit.lib.RepositoryCache.clearAll:()V
         1: .line 219
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  static void clearExpired();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 222
            getstatic org.eclipse.jgit.lib.RepositoryCache.cache:Lorg/eclipse/jgit/lib/RepositoryCache;
            invokevirtual org.eclipse.jgit.lib.RepositoryCache.clearAllExpired:()V
         1: .line 223
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  static void reconfigure(org.eclipse.jgit.lib.RepositoryCacheConfig);
    descriptor: (Lorg/eclipse/jgit/lib/RepositoryCacheConfig;)V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.eclipse.jgit.lib.RepositoryCacheConfig repositoryCacheConfig
         0: .line 226
            getstatic org.eclipse.jgit.lib.RepositoryCache.cache:Lorg/eclipse/jgit/lib/RepositoryCache;
            aload 0 /* repositoryCacheConfig */
            invokevirtual org.eclipse.jgit.lib.RepositoryCache.configureEviction:(Lorg/eclipse/jgit/lib/RepositoryCacheConfig;)V
         1: .line 227
            return
        end local 0 // org.eclipse.jgit.lib.RepositoryCacheConfig repositoryCacheConfig
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0    2     0  repositoryCacheConfig  Lorg/eclipse/jgit/lib/RepositoryCacheConfig;
    MethodParameters:
                       Name  Flags
      repositoryCacheConfig  

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // org.eclipse.jgit.lib.RepositoryCache this
         0: .line 237
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 238
            aload 0 /* this */
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
            putfield org.eclipse.jgit.lib.RepositoryCache.cacheMap:Ljava/util/concurrent/ConcurrentHashMap;
         2: .line 239
            aload 0 /* this */
            iconst_4
            anewarray org.eclipse.jgit.lib.RepositoryCache$Lock
            putfield org.eclipse.jgit.lib.RepositoryCache.openLocks:[Lorg/eclipse/jgit/lib/RepositoryCache$Lock;
         3: .line 240
            iconst_0
            istore 1 /* i */
        start local 1 // int i
         4: goto 7
         5: .line 241
      StackMap locals: org.eclipse.jgit.lib.RepositoryCache int
      StackMap stack:
            aload 0 /* this */
            getfield org.eclipse.jgit.lib.RepositoryCache.openLocks:[Lorg/eclipse/jgit/lib/RepositoryCache$Lock;
            iload 1 /* i */
            new org.eclipse.jgit.lib.RepositoryCache$Lock
            dup
            invokespecial org.eclipse.jgit.lib.RepositoryCache$Lock.<init>:()V
            aastore
         6: .line 240
            iinc 1 /* i */ 1
      StackMap locals:
      StackMap stack:
         7: iload 1 /* i */
            aload 0 /* this */
            getfield org.eclipse.jgit.lib.RepositoryCache.openLocks:[Lorg/eclipse/jgit/lib/RepositoryCache$Lock;
            arraylength
            if_icmplt 5
        end local 1 // int i
         8: .line 243
            aload 0 /* this */
            new org.eclipse.jgit.lib.RepositoryCacheConfig
            dup
            invokespecial org.eclipse.jgit.lib.RepositoryCacheConfig.<init>:()V
            invokevirtual org.eclipse.jgit.lib.RepositoryCache.configureEviction:(Lorg/eclipse/jgit/lib/RepositoryCacheConfig;)V
         9: .line 244
            return
        end local 0 // org.eclipse.jgit.lib.RepositoryCache this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0  this  Lorg/eclipse/jgit/lib/RepositoryCache;
            4    8     1     i  I

  private void configureEviction(org.eclipse.jgit.lib.RepositoryCacheConfig);
    descriptor: (Lorg/eclipse/jgit/lib/RepositoryCacheConfig;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=8, locals=6, args_size=2
        start local 0 // org.eclipse.jgit.lib.RepositoryCache this
        start local 1 // org.eclipse.jgit.lib.RepositoryCacheConfig repositoryCacheConfig
         0: .line 248
            aload 0 /* this */
            aload 1 /* repositoryCacheConfig */
            invokevirtual org.eclipse.jgit.lib.RepositoryCacheConfig.getExpireAfter:()J
            putfield org.eclipse.jgit.lib.RepositoryCache.expireAfter:J
         1: .line 249
            invokestatic org.eclipse.jgit.lib.internal.WorkQueue.getExecutor:()Ljava/util/concurrent/ScheduledThreadPoolExecutor;
            astore 2 /* scheduler */
        start local 2 // java.util.concurrent.ScheduledThreadPoolExecutor scheduler
         2: .line 250
            aload 2 /* scheduler */
            dup
            astore 3
            monitorenter
         3: .line 251
            aload 0 /* this */
            getfield org.eclipse.jgit.lib.RepositoryCache.cleanupTask:Ljava/util/concurrent/ScheduledFuture;
            ifnull 5
         4: .line 252
            aload 0 /* this */
            getfield org.eclipse.jgit.lib.RepositoryCache.cleanupTask:Ljava/util/concurrent/ScheduledFuture;
            iconst_0
            invokeinterface java.util.concurrent.ScheduledFuture.cancel:(Z)Z
            pop
         5: .line 254
      StackMap locals: java.util.concurrent.ScheduledThreadPoolExecutor java.util.concurrent.ScheduledThreadPoolExecutor
      StackMap stack:
            aload 1 /* repositoryCacheConfig */
            invokevirtual org.eclipse.jgit.lib.RepositoryCacheConfig.getCleanupDelay:()J
            lstore 4 /* delay */
        start local 4 // long delay
         6: .line 255
            lload 4 /* delay */
            lconst_0
            lcmp
            ifne 9
         7: .line 256
            aload 3
            monitorexit
         8: return
         9: .line 258
      StackMap locals: long
      StackMap stack:
            aload 0 /* this */
            aload 2 /* scheduler */
            invokedynamic run()Ljava/lang/Runnable;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ()V
                  org/eclipse/jgit/lib/RepositoryCache.lambda$0()V (6)
                  ()V
        10: .line 264
            lload 4 /* delay */
            lload 4 /* delay */
            getstatic java.util.concurrent.TimeUnit.MILLISECONDS:Ljava/util/concurrent/TimeUnit;
        11: .line 258
            invokevirtual java.util.concurrent.ScheduledThreadPoolExecutor.scheduleWithFixedDelay:(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
            putfield org.eclipse.jgit.lib.RepositoryCache.cleanupTask:Ljava/util/concurrent/ScheduledFuture;
        end local 4 // long delay
        12: .line 250
            aload 3
            monitorexit
        13: goto 16
      StackMap locals: org.eclipse.jgit.lib.RepositoryCache org.eclipse.jgit.lib.RepositoryCacheConfig java.util.concurrent.ScheduledThreadPoolExecutor java.util.concurrent.ScheduledThreadPoolExecutor
      StackMap stack: java.lang.Throwable
        14: aload 3
            monitorexit
        15: athrow
        16: .line 266
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.util.concurrent.ScheduledThreadPoolExecutor scheduler
        end local 1 // org.eclipse.jgit.lib.RepositoryCacheConfig repositoryCacheConfig
        end local 0 // org.eclipse.jgit.lib.RepositoryCache this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   17     0                   this  Lorg/eclipse/jgit/lib/RepositoryCache;
            0   17     1  repositoryCacheConfig  Lorg/eclipse/jgit/lib/RepositoryCacheConfig;
            2   17     2              scheduler  Ljava/util/concurrent/ScheduledThreadPoolExecutor;
            6   12     4                  delay  J
      Exception table:
        from    to  target  type
           3     8      14  any
           9    13      14  any
          14    15      14  any
    MethodParameters:
                       Name  Flags
      repositoryCacheConfig  

  private org.eclipse.jgit.lib.Repository openRepository(org.eclipse.jgit.lib.RepositoryCache$Key, boolean);
    descriptor: (Lorg/eclipse/jgit/lib/RepositoryCache$Key;Z)Lorg/eclipse/jgit/lib/Repository;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=5, args_size=3
        start local 0 // org.eclipse.jgit.lib.RepositoryCache this
        start local 1 // org.eclipse.jgit.lib.RepositoryCache$Key location
        start local 2 // boolean mustExist
         0: .line 270
            aload 0 /* this */
            getfield org.eclipse.jgit.lib.RepositoryCache.cacheMap:Ljava/util/concurrent/ConcurrentHashMap;
            aload 1 /* location */
            invokevirtual java.util.concurrent.ConcurrentHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.eclipse.jgit.lib.Repository
            astore 3 /* db */
        start local 3 // org.eclipse.jgit.lib.Repository db
         1: .line 271
            aload 3 /* db */
            ifnonnull 13
         2: .line 272
            aload 0 /* this */
            aload 1 /* location */
            invokevirtual org.eclipse.jgit.lib.RepositoryCache.lockFor:(Lorg/eclipse/jgit/lib/RepositoryCache$Key;)Lorg/eclipse/jgit/lib/RepositoryCache$Lock;
            dup
            astore 4
            monitorenter
         3: .line 273
            aload 0 /* this */
            getfield org.eclipse.jgit.lib.RepositoryCache.cacheMap:Ljava/util/concurrent/ConcurrentHashMap;
            aload 1 /* location */
            invokevirtual java.util.concurrent.ConcurrentHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.eclipse.jgit.lib.Repository
            astore 3 /* db */
         4: .line 274
            aload 3 /* db */
            ifnonnull 8
         5: .line 275
            aload 1 /* location */
            iload 2 /* mustExist */
            invokeinterface org.eclipse.jgit.lib.RepositoryCache$Key.open:(Z)Lorg/eclipse/jgit/lib/Repository;
            astore 3 /* db */
         6: .line 276
            aload 0 /* this */
            getfield org.eclipse.jgit.lib.RepositoryCache.cacheMap:Ljava/util/concurrent/ConcurrentHashMap;
            aload 1 /* location */
            aload 3 /* db */
            invokevirtual java.util.concurrent.ConcurrentHashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         7: .line 277
            goto 9
         8: .line 278
      StackMap locals: org.eclipse.jgit.lib.Repository org.eclipse.jgit.lib.RepositoryCache$Lock
      StackMap stack:
            aload 3 /* db */
            invokevirtual org.eclipse.jgit.lib.Repository.incrementOpen:()V
         9: .line 272
      StackMap locals:
      StackMap stack:
            aload 4
            monitorexit
        10: goto 14
      StackMap locals:
      StackMap stack: java.lang.Throwable
        11: aload 4
            monitorexit
        12: athrow
        13: .line 282
      StackMap locals:
      StackMap stack:
            aload 3 /* db */
            invokevirtual org.eclipse.jgit.lib.Repository.incrementOpen:()V
        14: .line 284
      StackMap locals:
      StackMap stack:
            aload 3 /* db */
            areturn
        end local 3 // org.eclipse.jgit.lib.Repository db
        end local 2 // boolean mustExist
        end local 1 // org.eclipse.jgit.lib.RepositoryCache$Key location
        end local 0 // org.eclipse.jgit.lib.RepositoryCache this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   15     0       this  Lorg/eclipse/jgit/lib/RepositoryCache;
            0   15     1   location  Lorg/eclipse/jgit/lib/RepositoryCache$Key;
            0   15     2  mustExist  Z
            1   15     3         db  Lorg/eclipse/jgit/lib/Repository;
      Exception table:
        from    to  target  type
           3    10      11  any
          11    12      11  any
    Exceptions:
      throws java.io.IOException
    MethodParameters:
           Name  Flags
      location   final
      mustExist  final

  private void registerRepository(org.eclipse.jgit.lib.RepositoryCache$Key, org.eclipse.jgit.lib.Repository);
    descriptor: (Lorg/eclipse/jgit/lib/RepositoryCache$Key;Lorg/eclipse/jgit/lib/Repository;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=6, args_size=3
        start local 0 // org.eclipse.jgit.lib.RepositoryCache this
        start local 1 // org.eclipse.jgit.lib.RepositoryCache$Key location
        start local 2 // org.eclipse.jgit.lib.Repository db
         0: .line 288
            aconst_null
            astore 3
            aconst_null
            astore 4
         1: aload 0 /* this */
            getfield org.eclipse.jgit.lib.RepositoryCache.cacheMap:Ljava/util/concurrent/ConcurrentHashMap;
            aload 1 /* location */
            aload 2 /* db */
            invokevirtual java.util.concurrent.ConcurrentHashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.eclipse.jgit.lib.Repository
            astore 5 /* oldDb */
        start local 5 // org.eclipse.jgit.lib.Repository oldDb
         2: .line 290
            aload 5 /* oldDb */
            ifnull 8
            aload 5 /* oldDb */
            invokevirtual org.eclipse.jgit.lib.Repository.close:()V
            goto 8
      StackMap locals: org.eclipse.jgit.lib.RepositoryCache org.eclipse.jgit.lib.RepositoryCache$Key org.eclipse.jgit.lib.Repository java.lang.Throwable java.lang.Throwable org.eclipse.jgit.lib.Repository
      StackMap stack: java.lang.Throwable
         3: astore 3
            aload 5 /* oldDb */
            ifnull 4
            aload 5 /* oldDb */
            invokevirtual org.eclipse.jgit.lib.Repository.close:()V
        end local 5 // org.eclipse.jgit.lib.Repository oldDb
      StackMap locals:
      StackMap stack:
         4: aload 3
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
         5: astore 4
            aload 3
            ifnonnull 6
            aload 4
            astore 3
            goto 7
      StackMap locals:
      StackMap stack:
         6: aload 3
            aload 4
            if_acmpeq 7
            aload 3
            aload 4
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
         7: aload 3
            athrow
         8: .line 291
      StackMap locals:
      StackMap stack:
            return
        end local 2 // org.eclipse.jgit.lib.Repository db
        end local 1 // org.eclipse.jgit.lib.RepositoryCache$Key location
        end local 0 // org.eclipse.jgit.lib.RepositoryCache this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    9     0      this  Lorg/eclipse/jgit/lib/RepositoryCache;
            0    9     1  location  Lorg/eclipse/jgit/lib/RepositoryCache$Key;
            0    9     2        db  Lorg/eclipse/jgit/lib/Repository;
            2    4     5     oldDb  Lorg/eclipse/jgit/lib/Repository;
      Exception table:
        from    to  target  type
           1     5       5  any
    MethodParameters:
          Name  Flags
      location  
      db        

  private org.eclipse.jgit.lib.Repository unregisterRepository(org.eclipse.jgit.lib.RepositoryCache$Key);
    descriptor: (Lorg/eclipse/jgit/lib/RepositoryCache$Key;)Lorg/eclipse/jgit/lib/Repository;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.eclipse.jgit.lib.RepositoryCache this
        start local 1 // org.eclipse.jgit.lib.RepositoryCache$Key location
         0: .line 294
            aload 0 /* this */
            getfield org.eclipse.jgit.lib.RepositoryCache.cacheMap:Ljava/util/concurrent/ConcurrentHashMap;
            aload 1 /* location */
            invokevirtual java.util.concurrent.ConcurrentHashMap.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.eclipse.jgit.lib.Repository
            areturn
        end local 1 // org.eclipse.jgit.lib.RepositoryCache$Key location
        end local 0 // org.eclipse.jgit.lib.RepositoryCache this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lorg/eclipse/jgit/lib/RepositoryCache;
            0    1     1  location  Lorg/eclipse/jgit/lib/RepositoryCache$Key;
    MethodParameters:
          Name  Flags
      location  

  private boolean isExpired(org.eclipse.jgit.lib.Repository);
    descriptor: (Lorg/eclipse/jgit/lib/Repository;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.eclipse.jgit.lib.RepositoryCache this
        start local 1 // org.eclipse.jgit.lib.Repository db
         0: .line 298
            aload 1 /* db */
            ifnull 3
            aload 1 /* db */
            getfield org.eclipse.jgit.lib.Repository.useCnt:Ljava/util/concurrent/atomic/AtomicInteger;
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            ifgt 3
         1: .line 299
            invokestatic java.lang.System.currentTimeMillis:()J
            aload 1 /* db */
            getfield org.eclipse.jgit.lib.Repository.closedAt:Ljava/util/concurrent/atomic/AtomicLong;
            invokevirtual java.util.concurrent.atomic.AtomicLong.get:()J
            lsub
            aload 0 /* this */
            getfield org.eclipse.jgit.lib.RepositoryCache.expireAfter:J
         2: .line 298
            lcmp
            ifle 3
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         3: iconst_0
            ireturn
        end local 1 // org.eclipse.jgit.lib.Repository db
        end local 0 // org.eclipse.jgit.lib.RepositoryCache this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lorg/eclipse/jgit/lib/RepositoryCache;
            0    4     1    db  Lorg/eclipse/jgit/lib/Repository;
    MethodParameters:
      Name  Flags
      db    

  private void unregisterAndCloseRepository(org.eclipse.jgit.lib.RepositoryCache$Key);
    descriptor: (Lorg/eclipse/jgit/lib/RepositoryCache$Key;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // org.eclipse.jgit.lib.RepositoryCache this
        start local 1 // org.eclipse.jgit.lib.RepositoryCache$Key location
         0: .line 303
            aload 0 /* this */
            aload 1 /* location */
            invokevirtual org.eclipse.jgit.lib.RepositoryCache.lockFor:(Lorg/eclipse/jgit/lib/RepositoryCache$Key;)Lorg/eclipse/jgit/lib/RepositoryCache$Lock;
            dup
            astore 2
            monitorenter
         1: .line 304
            aload 0 /* this */
            aload 1 /* location */
            invokevirtual org.eclipse.jgit.lib.RepositoryCache.unregisterRepository:(Lorg/eclipse/jgit/lib/RepositoryCache$Key;)Lorg/eclipse/jgit/lib/Repository;
            astore 3 /* oldDb */
        start local 3 // org.eclipse.jgit.lib.Repository oldDb
         2: .line 305
            aload 3 /* oldDb */
            ifnull 4
         3: .line 306
            aload 3 /* oldDb */
            invokevirtual org.eclipse.jgit.lib.Repository.doClose:()V
        end local 3 // org.eclipse.jgit.lib.Repository oldDb
         4: .line 303
      StackMap locals: org.eclipse.jgit.lib.RepositoryCache$Lock
      StackMap stack:
            aload 2
            monitorexit
         5: goto 8
      StackMap locals:
      StackMap stack: java.lang.Throwable
         6: aload 2
            monitorexit
         7: athrow
         8: .line 309
      StackMap locals:
      StackMap stack:
            return
        end local 1 // org.eclipse.jgit.lib.RepositoryCache$Key location
        end local 0 // org.eclipse.jgit.lib.RepositoryCache this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    9     0      this  Lorg/eclipse/jgit/lib/RepositoryCache;
            0    9     1  location  Lorg/eclipse/jgit/lib/RepositoryCache$Key;
            2    4     3     oldDb  Lorg/eclipse/jgit/lib/Repository;
      Exception table:
        from    to  target  type
           1     5       6  any
           6     7       6  any
    MethodParameters:
          Name  Flags
      location  

  private java.util.Collection<org.eclipse.jgit.lib.RepositoryCache$Key> getKeys();
    descriptor: ()Ljava/util/Collection;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.eclipse.jgit.lib.RepositoryCache this
         0: .line 312
            new java.util.ArrayList
            dup
            aload 0 /* this */
            getfield org.eclipse.jgit.lib.RepositoryCache.cacheMap:Ljava/util/concurrent/ConcurrentHashMap;
            invokevirtual java.util.concurrent.ConcurrentHashMap.keySet:()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;
            invokespecial java.util.ArrayList.<init>:(Ljava/util/Collection;)V
            areturn
        end local 0 // org.eclipse.jgit.lib.RepositoryCache this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/eclipse/jgit/lib/RepositoryCache;
    Signature: ()Ljava/util/Collection<Lorg/eclipse/jgit/lib/RepositoryCache$Key;>;

  private void clearAllExpired();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // org.eclipse.jgit.lib.RepositoryCache this
         0: .line 316
            aload 0 /* this */
            getfield org.eclipse.jgit.lib.RepositoryCache.cacheMap:Ljava/util/concurrent/ConcurrentHashMap;
            invokevirtual java.util.concurrent.ConcurrentHashMap.values:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 2
            goto 4
      StackMap locals: org.eclipse.jgit.lib.RepositoryCache top java.util.Iterator
      StackMap stack:
         1: aload 2
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.eclipse.jgit.lib.Repository
            astore 1 /* db */
        start local 1 // org.eclipse.jgit.lib.Repository db
         2: .line 317
            aload 0 /* this */
            aload 1 /* db */
            invokevirtual org.eclipse.jgit.lib.RepositoryCache.isExpired:(Lorg/eclipse/jgit/lib/Repository;)Z
            ifeq 4
         3: .line 318
            aload 1 /* db */
            invokestatic org.eclipse.jgit.lib.RepositoryCache.close:(Lorg/eclipse/jgit/lib/Repository;)V
        end local 1 // org.eclipse.jgit.lib.Repository db
         4: .line 316
      StackMap locals:
      StackMap stack:
            aload 2
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         5: .line 321
            return
        end local 0 // org.eclipse.jgit.lib.RepositoryCache this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Lorg/eclipse/jgit/lib/RepositoryCache;
            2    4     1    db  Lorg/eclipse/jgit/lib/Repository;

  private void clearAll();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // org.eclipse.jgit.lib.RepositoryCache this
         0: .line 324
            aload 0 /* this */
            getfield org.eclipse.jgit.lib.RepositoryCache.cacheMap:Ljava/util/concurrent/ConcurrentHashMap;
            invokevirtual java.util.concurrent.ConcurrentHashMap.keySet:()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;
            invokevirtual java.util.concurrent.ConcurrentHashMap$KeySetView.iterator:()Ljava/util/Iterator;
            astore 2
            goto 3
      StackMap locals: org.eclipse.jgit.lib.RepositoryCache top java.util.Iterator
      StackMap stack:
         1: aload 2
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.eclipse.jgit.lib.RepositoryCache$Key
            astore 1 /* k */
        start local 1 // org.eclipse.jgit.lib.RepositoryCache$Key k
         2: .line 325
            aload 0 /* this */
            aload 1 /* k */
            invokevirtual org.eclipse.jgit.lib.RepositoryCache.unregisterAndCloseRepository:(Lorg/eclipse/jgit/lib/RepositoryCache$Key;)V
        end local 1 // org.eclipse.jgit.lib.RepositoryCache$Key k
         3: .line 324
      StackMap locals:
      StackMap stack:
            aload 2
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         4: .line 327
            return
        end local 0 // org.eclipse.jgit.lib.RepositoryCache this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lorg/eclipse/jgit/lib/RepositoryCache;
            2    3     1     k  Lorg/eclipse/jgit/lib/RepositoryCache$Key;

  private org.eclipse.jgit.lib.RepositoryCache$Lock lockFor(org.eclipse.jgit.lib.RepositoryCache$Key);
    descriptor: (Lorg/eclipse/jgit/lib/RepositoryCache$Key;)Lorg/eclipse/jgit/lib/RepositoryCache$Lock;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.eclipse.jgit.lib.RepositoryCache this
        start local 1 // org.eclipse.jgit.lib.RepositoryCache$Key location
         0: .line 330
            aload 0 /* this */
            getfield org.eclipse.jgit.lib.RepositoryCache.openLocks:[Lorg/eclipse/jgit/lib/RepositoryCache$Lock;
            aload 1 /* location */
            invokevirtual java.lang.Object.hashCode:()I
            iconst_1
            iushr
            aload 0 /* this */
            getfield org.eclipse.jgit.lib.RepositoryCache.openLocks:[Lorg/eclipse/jgit/lib/RepositoryCache$Lock;
            arraylength
            irem
            aaload
            areturn
        end local 1 // org.eclipse.jgit.lib.RepositoryCache$Key location
        end local 0 // org.eclipse.jgit.lib.RepositoryCache this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lorg/eclipse/jgit/lib/RepositoryCache;
            0    1     1  location  Lorg/eclipse/jgit/lib/RepositoryCache$Key;
    MethodParameters:
          Name  Flags
      location  

  private static void lambda$0();
    descriptor: ()V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=3, locals=1, args_size=0
         0: .line 260
            getstatic org.eclipse.jgit.lib.RepositoryCache.cache:Lorg/eclipse/jgit/lib/RepositoryCache;
            invokevirtual org.eclipse.jgit.lib.RepositoryCache.clearAllExpired:()V
         1: .line 261
            goto 4
      StackMap locals:
      StackMap stack: java.lang.Throwable
         2: astore 0 /* e */
        start local 0 // java.lang.Throwable e
         3: .line 262
            getstatic org.eclipse.jgit.lib.RepositoryCache.LOG:Lorg/slf4j/Logger;
            aload 0 /* e */
            invokevirtual java.lang.Throwable.getMessage:()Ljava/lang/String;
            aload 0 /* e */
            invokeinterface org.slf4j.Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
        end local 0 // java.lang.Throwable e
         4: .line 264
      StackMap locals:
      StackMap stack:
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            3    4     0     e  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           0     1       2  Class java.lang.Throwable
}
SourceFile: "RepositoryCache.java"
NestMembers:
  org.eclipse.jgit.lib.RepositoryCache$FileKey  org.eclipse.jgit.lib.RepositoryCache$Key  org.eclipse.jgit.lib.RepositoryCache$Lock
InnerClasses:
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
  public KeySetView = java.util.concurrent.ConcurrentHashMap$KeySetView of java.util.concurrent.ConcurrentHashMap
  public FileKey = org.eclipse.jgit.lib.RepositoryCache$FileKey of org.eclipse.jgit.lib.RepositoryCache
  public abstract Key = org.eclipse.jgit.lib.RepositoryCache$Key of org.eclipse.jgit.lib.RepositoryCache
  private Lock = org.eclipse.jgit.lib.RepositoryCache$Lock of org.eclipse.jgit.lib.RepositoryCache