public class com.google.common.util.concurrent.CycleDetectingLockFactory
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.google.common.util.concurrent.CycleDetectingLockFactory
  super_class: java.lang.Object
{
  private static final java.util.concurrent.ConcurrentMap<java.lang.Class<? extends java.lang.Enum>, java.util.Map<? extends java.lang.Enum, com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode>> lockGraphNodesPerType;
    descriptor: Ljava/util/concurrent/ConcurrentMap;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/concurrent/ConcurrentMap<Ljava/lang/Class<+Ljava/lang/Enum;>;Ljava/util/Map<+Ljava/lang/Enum;Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;>;>;

  private static final java.util.logging.Logger logger;
    descriptor: Ljava/util/logging/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  final com.google.common.util.concurrent.CycleDetectingLockFactory$Policy policy;
    descriptor: Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;
    flags: (0x0010) ACC_FINAL

  private static final java.lang.ThreadLocal<java.util.ArrayList<com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode>> acquiredLocks;
    descriptor: Ljava/lang/ThreadLocal;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/lang/ThreadLocal<Ljava/util/ArrayList<Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;>;>;

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 272
            new com.google.common.collect.MapMaker
            dup
            invokespecial com.google.common.collect.MapMaker.<init>:()V
            invokevirtual com.google.common.collect.MapMaker.weakKeys:()Lcom/google/common/collect/MapMaker;
            invokevirtual com.google.common.collect.MapMaker.makeMap:()Ljava/util/concurrent/ConcurrentMap;
            putstatic com.google.common.util.concurrent.CycleDetectingLockFactory.lockGraphNodesPerType:Ljava/util/concurrent/ConcurrentMap;
         1: .line 445
            ldc Lcom/google/common/util/concurrent/CycleDetectingLockFactory;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokestatic java.util.logging.Logger.getLogger:(Ljava/lang/String;)Ljava/util/logging/Logger;
            putstatic com.google.common.util.concurrent.CycleDetectingLockFactory.logger:Ljava/util/logging/Logger;
         2: .line 460
            new com.google.common.util.concurrent.CycleDetectingLockFactory$1
            dup
            invokespecial com.google.common.util.concurrent.CycleDetectingLockFactory$1.<init>:()V
         3: .line 459
            putstatic com.google.common.util.concurrent.CycleDetectingLockFactory.acquiredLocks:Ljava/lang/ThreadLocal;
         4: .line 465
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public static com.google.common.util.concurrent.CycleDetectingLockFactory newInstance(com.google.common.util.concurrent.CycleDetectingLockFactory$Policy);
    descriptor: (Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;)Lcom/google/common/util/concurrent/CycleDetectingLockFactory;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.google.common.util.concurrent.CycleDetectingLockFactory$Policy policy
         0: .line 236
            new com.google.common.util.concurrent.CycleDetectingLockFactory
            dup
            aload 0 /* policy */
            invokespecial com.google.common.util.concurrent.CycleDetectingLockFactory.<init>:(Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;)V
            areturn
        end local 0 // com.google.common.util.concurrent.CycleDetectingLockFactory$Policy policy
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0  policy  Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;
    MethodParameters:
        Name  Flags
      policy  

  public java.util.concurrent.locks.ReentrantLock newReentrantLock(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/util/concurrent/locks/ReentrantLock;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.google.common.util.concurrent.CycleDetectingLockFactory this
        start local 1 // java.lang.String lockName
         0: .line 241
            aload 0 /* this */
            aload 1 /* lockName */
            iconst_0
            invokevirtual com.google.common.util.concurrent.CycleDetectingLockFactory.newReentrantLock:(Ljava/lang/String;Z)Ljava/util/concurrent/locks/ReentrantLock;
            areturn
        end local 1 // java.lang.String lockName
        end local 0 // com.google.common.util.concurrent.CycleDetectingLockFactory this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lcom/google/common/util/concurrent/CycleDetectingLockFactory;
            0    1     1  lockName  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      lockName  

  public java.util.concurrent.locks.ReentrantLock newReentrantLock(java.lang.String, boolean);
    descriptor: (Ljava/lang/String;Z)Ljava/util/concurrent/locks/ReentrantLock;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=3, args_size=3
        start local 0 // com.google.common.util.concurrent.CycleDetectingLockFactory this
        start local 1 // java.lang.String lockName
        start local 2 // boolean fair
         0: .line 249
            aload 0 /* this */
            getfield com.google.common.util.concurrent.CycleDetectingLockFactory.policy:Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;
            getstatic com.google.common.util.concurrent.CycleDetectingLockFactory$Policies.DISABLED:Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policies;
            if_acmpne 2
         1: .line 250
            new java.util.concurrent.locks.ReentrantLock
            dup
            iload 2 /* fair */
            invokespecial java.util.concurrent.locks.ReentrantLock.<init>:(Z)V
            goto 3
         2: .line 251
      StackMap locals:
      StackMap stack:
            new com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingReentrantLock
            dup
            aload 0 /* this */
            new com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode
            dup
            aload 1 /* lockName */
            invokespecial com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode.<init>:(Ljava/lang/String;)V
            iload 2 /* fair */
            invokespecial com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingReentrantLock.<init>:(Lcom/google/common/util/concurrent/CycleDetectingLockFactory;Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;Z)V
         3: .line 249
      StackMap locals:
      StackMap stack: java.util.concurrent.locks.ReentrantLock
            areturn
        end local 2 // boolean fair
        end local 1 // java.lang.String lockName
        end local 0 // com.google.common.util.concurrent.CycleDetectingLockFactory this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    4     0      this  Lcom/google/common/util/concurrent/CycleDetectingLockFactory;
            0    4     1  lockName  Ljava/lang/String;
            0    4     2      fair  Z
    MethodParameters:
          Name  Flags
      lockName  
      fair      

  public java.util.concurrent.locks.ReentrantReadWriteLock newReentrantReadWriteLock(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/util/concurrent/locks/ReentrantReadWriteLock;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.google.common.util.concurrent.CycleDetectingLockFactory this
        start local 1 // java.lang.String lockName
         0: .line 256
            aload 0 /* this */
            aload 1 /* lockName */
            iconst_0
            invokevirtual com.google.common.util.concurrent.CycleDetectingLockFactory.newReentrantReadWriteLock:(Ljava/lang/String;Z)Ljava/util/concurrent/locks/ReentrantReadWriteLock;
            areturn
        end local 1 // java.lang.String lockName
        end local 0 // com.google.common.util.concurrent.CycleDetectingLockFactory this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lcom/google/common/util/concurrent/CycleDetectingLockFactory;
            0    1     1  lockName  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      lockName  

  public java.util.concurrent.locks.ReentrantReadWriteLock newReentrantReadWriteLock(java.lang.String, boolean);
    descriptor: (Ljava/lang/String;Z)Ljava/util/concurrent/locks/ReentrantReadWriteLock;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=3, args_size=3
        start local 0 // com.google.common.util.concurrent.CycleDetectingLockFactory this
        start local 1 // java.lang.String lockName
        start local 2 // boolean fair
         0: .line 265
            aload 0 /* this */
            getfield com.google.common.util.concurrent.CycleDetectingLockFactory.policy:Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;
            getstatic com.google.common.util.concurrent.CycleDetectingLockFactory$Policies.DISABLED:Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policies;
            if_acmpne 2
         1: .line 266
            new java.util.concurrent.locks.ReentrantReadWriteLock
            dup
            iload 2 /* fair */
            invokespecial java.util.concurrent.locks.ReentrantReadWriteLock.<init>:(Z)V
            goto 3
         2: .line 267
      StackMap locals:
      StackMap stack:
            new com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingReentrantReadWriteLock
            dup
            aload 0 /* this */
            new com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode
            dup
            aload 1 /* lockName */
            invokespecial com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode.<init>:(Ljava/lang/String;)V
            iload 2 /* fair */
            invokespecial com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingReentrantReadWriteLock.<init>:(Lcom/google/common/util/concurrent/CycleDetectingLockFactory;Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;Z)V
         3: .line 265
      StackMap locals:
      StackMap stack: java.util.concurrent.locks.ReentrantReadWriteLock
            areturn
        end local 2 // boolean fair
        end local 1 // java.lang.String lockName
        end local 0 // com.google.common.util.concurrent.CycleDetectingLockFactory this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    4     0      this  Lcom/google/common/util/concurrent/CycleDetectingLockFactory;
            0    4     1  lockName  Ljava/lang/String;
            0    4     2      fair  Z
    MethodParameters:
          Name  Flags
      lockName  
      fair      

  public static <E extends java.lang.Enum<E>> com.google.common.util.concurrent.CycleDetectingLockFactory$WithExplicitOrdering<E> newInstanceWithExplicitOrdering(java.lang.Class<E>, com.google.common.util.concurrent.CycleDetectingLockFactory$Policy);
    descriptor: (Ljava/lang/Class;Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;)Lcom/google/common/util/concurrent/CycleDetectingLockFactory$WithExplicitOrdering;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // java.lang.Class enumClass
        start local 1 // com.google.common.util.concurrent.CycleDetectingLockFactory$Policy policy
         0: .line 279
            aload 0 /* enumClass */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 280
            aload 1 /* policy */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         2: .line 282
            aload 0 /* enumClass */
            invokestatic com.google.common.util.concurrent.CycleDetectingLockFactory.getOrCreateNodes:(Ljava/lang/Class;)Ljava/util/Map;
            astore 2 /* lockGraphNodes */
        start local 2 // java.util.Map lockGraphNodes
         3: .line 283
            new com.google.common.util.concurrent.CycleDetectingLockFactory$WithExplicitOrdering
            dup
            aload 1 /* policy */
            aload 2 /* lockGraphNodes */
            invokespecial com.google.common.util.concurrent.CycleDetectingLockFactory$WithExplicitOrdering.<init>:(Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;Ljava/util/Map;)V
            areturn
        end local 2 // java.util.Map lockGraphNodes
        end local 1 // com.google.common.util.concurrent.CycleDetectingLockFactory$Policy policy
        end local 0 // java.lang.Class enumClass
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    4     0       enumClass  Ljava/lang/Class<TE;>;
            0    4     1          policy  Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;
            3    4     2  lockGraphNodes  Ljava/util/Map<TE;Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;>;
    Signature: <E:Ljava/lang/Enum<TE;>;>(Ljava/lang/Class<TE;>;Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;)Lcom/google/common/util/concurrent/CycleDetectingLockFactory$WithExplicitOrdering<TE;>;
    MethodParameters:
           Name  Flags
      enumClass  
      policy     

  private static java.util.Map<? extends java.lang.Enum, com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode> getOrCreateNodes(java.lang.Class<? extends java.lang.Enum>);
    descriptor: (Ljava/lang/Class;)Ljava/util/Map;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // java.lang.Class clazz
         0: .line 287
            getstatic com.google.common.util.concurrent.CycleDetectingLockFactory.lockGraphNodesPerType:Ljava/util/concurrent/ConcurrentMap;
            aload 0 /* clazz */
            invokeinterface java.util.concurrent.ConcurrentMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 1 /* existing */
        start local 1 // java.util.Map existing
         1: .line 288
            aload 1 /* existing */
            ifnull 3
         2: .line 289
            aload 1 /* existing */
            areturn
         3: .line 291
      StackMap locals: java.util.Map
      StackMap stack:
            aload 0 /* clazz */
            invokestatic com.google.common.util.concurrent.CycleDetectingLockFactory.createNodes:(Ljava/lang/Class;)Ljava/util/Map;
            astore 2 /* created */
        start local 2 // java.util.Map created
         4: .line 292
            getstatic com.google.common.util.concurrent.CycleDetectingLockFactory.lockGraphNodesPerType:Ljava/util/concurrent/ConcurrentMap;
            aload 0 /* clazz */
            aload 2 /* created */
            invokeinterface java.util.concurrent.ConcurrentMap.putIfAbsent:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 1 /* existing */
         5: .line 293
            aload 1 /* existing */
            aload 2 /* created */
            invokestatic com.google.common.base.MoreObjects.firstNonNull:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            areturn
        end local 2 // java.util.Map created
        end local 1 // java.util.Map existing
        end local 0 // java.lang.Class clazz
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    6     0     clazz  Ljava/lang/Class<+Ljava/lang/Enum;>;
            1    6     1  existing  Ljava/util/Map<+Ljava/lang/Enum;Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;>;
            4    6     2   created  Ljava/util/Map<+Ljava/lang/Enum;Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;>;
    Signature: (Ljava/lang/Class<+Ljava/lang/Enum;>;)Ljava/util/Map<+Ljava/lang/Enum;Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;>;
    MethodParameters:
       Name  Flags
      clazz  

  static <E extends java.lang.Enum<E>> java.util.Map<E, com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode> createNodes(java.lang.Class<E>);
    descriptor: (Ljava/lang/Class;)Ljava/util/Map;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=5, locals=10, args_size=1
        start local 0 // java.lang.Class clazz
         0: .line 304
            aload 0 /* clazz */
            invokestatic com.google.common.collect.Maps.newEnumMap:(Ljava/lang/Class;)Ljava/util/EnumMap;
            astore 1 /* map */
        start local 1 // java.util.EnumMap map
         1: .line 305
            aload 0 /* clazz */
            invokevirtual java.lang.Class.getEnumConstants:()[Ljava/lang/Object;
            checkcast java.lang.Enum[]
            astore 2 /* keys */
        start local 2 // java.lang.Enum[] keys
         2: .line 306
            aload 2 /* keys */
            arraylength
            istore 3 /* numKeys */
        start local 3 // int numKeys
         3: .line 307
            iload 3 /* numKeys */
            invokestatic com.google.common.collect.Lists.newArrayListWithCapacity:(I)Ljava/util/ArrayList;
            astore 4 /* nodes */
        start local 4 // java.util.ArrayList nodes
         4: .line 309
            aload 2 /* keys */
            dup
            astore 8
            arraylength
            istore 7
            iconst_0
            istore 6
            goto 10
      StackMap locals: java.lang.Class java.util.EnumMap java.lang.Enum[] int java.util.ArrayList top int int java.lang.Enum[]
      StackMap stack:
         5: aload 8
            iload 6
            aaload
            astore 5 /* key */
        start local 5 // java.lang.Enum key
         6: .line 310
            new com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode
            dup
            aload 5 /* key */
            invokestatic com.google.common.util.concurrent.CycleDetectingLockFactory.getLockName:(Ljava/lang/Enum;)Ljava/lang/String;
            invokespecial com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode.<init>:(Ljava/lang/String;)V
            astore 9 /* node */
        start local 9 // com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode node
         7: .line 311
            aload 4 /* nodes */
            aload 9 /* node */
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
         8: .line 312
            aload 1 /* map */
            aload 5 /* key */
            aload 9 /* node */
            invokevirtual java.util.EnumMap.put:(Ljava/lang/Enum;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 9 // com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode node
        end local 5 // java.lang.Enum key
         9: .line 309
            iinc 6 1
      StackMap locals:
      StackMap stack:
        10: iload 6
            iload 7
            if_icmplt 5
        11: .line 315
            iconst_1
            istore 5 /* i */
        start local 5 // int i
        12: goto 15
        13: .line 316
      StackMap locals: java.lang.Class java.util.EnumMap java.lang.Enum[] int java.util.ArrayList int
      StackMap stack:
            aload 4 /* nodes */
            iload 5 /* i */
            invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
            checkcast com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode
            getstatic com.google.common.util.concurrent.CycleDetectingLockFactory$Policies.THROW:Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policies;
            aload 4 /* nodes */
            iconst_0
            iload 5 /* i */
            invokevirtual java.util.ArrayList.subList:(II)Ljava/util/List;
            invokevirtual com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode.checkAcquiredLocks:(Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;Ljava/util/List;)V
        14: .line 315
            iinc 5 /* i */ 1
      StackMap locals:
      StackMap stack:
        15: iload 5 /* i */
            iload 3 /* numKeys */
            if_icmplt 13
        end local 5 // int i
        16: .line 319
            iconst_0
            istore 5 /* i */
        start local 5 // int i
        17: goto 20
        18: .line 320
      StackMap locals:
      StackMap stack:
            aload 4 /* nodes */
            iload 5 /* i */
            invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
            checkcast com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode
            getstatic com.google.common.util.concurrent.CycleDetectingLockFactory$Policies.DISABLED:Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policies;
            aload 4 /* nodes */
            iload 5 /* i */
            iconst_1
            iadd
            iload 3 /* numKeys */
            invokevirtual java.util.ArrayList.subList:(II)Ljava/util/List;
            invokevirtual com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode.checkAcquiredLocks:(Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;Ljava/util/List;)V
        19: .line 319
            iinc 5 /* i */ 1
      StackMap locals:
      StackMap stack:
        20: iload 5 /* i */
            iload 3 /* numKeys */
            iconst_1
            isub
            if_icmplt 18
        end local 5 // int i
        21: .line 322
            aload 1 /* map */
            invokestatic java.util.Collections.unmodifiableMap:(Ljava/util/Map;)Ljava/util/Map;
            areturn
        end local 4 // java.util.ArrayList nodes
        end local 3 // int numKeys
        end local 2 // java.lang.Enum[] keys
        end local 1 // java.util.EnumMap map
        end local 0 // java.lang.Class clazz
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   22     0    clazz  Ljava/lang/Class<TE;>;
            1   22     1      map  Ljava/util/EnumMap<TE;Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;>;
            2   22     2     keys  [Ljava/lang/Enum;
            3   22     3  numKeys  I
            4   22     4    nodes  Ljava/util/ArrayList<Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;>;
            6    9     5      key  TE;
            7    9     9     node  Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;
           12   16     5        i  I
           17   21     5        i  I
    Signature: <E:Ljava/lang/Enum<TE;>;>(Ljava/lang/Class<TE;>;)Ljava/util/Map<TE;Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;>;
    RuntimeInvisibleAnnotations: 
      com.google.common.annotations.VisibleForTesting()
    RuntimeInvisibleTypeAnnotations: 
      METHOD_RETURN
        com.google.common.annotations.VisibleForTesting()
    MethodParameters:
       Name  Flags
      clazz  

  private static java.lang.String getLockName(java.lang.Enum<?>);
    descriptor: (Ljava/lang/Enum;)Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // java.lang.Enum rank
         0: .line 330
            new java.lang.StringBuilder
            dup
            aload 0 /* rank */
            invokevirtual java.lang.Enum.getDeclaringClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getSimpleName:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc "."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* rank */
            invokevirtual java.lang.Enum.name:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 0 // java.lang.Enum rank
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  rank  Ljava/lang/Enum<*>;
    Signature: (Ljava/lang/Enum<*>;)Ljava/lang/String;
    MethodParameters:
      Name  Flags
      rank  

  private void <init>(com.google.common.util.concurrent.CycleDetectingLockFactory$Policy);
    descriptor: (Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.google.common.util.concurrent.CycleDetectingLockFactory this
        start local 1 // com.google.common.util.concurrent.CycleDetectingLockFactory$Policy policy
         0: .line 449
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 450
            aload 0 /* this */
            aload 1 /* policy */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.google.common.util.concurrent.CycleDetectingLockFactory$Policy
            putfield com.google.common.util.concurrent.CycleDetectingLockFactory.policy:Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;
         2: .line 451
            return
        end local 1 // com.google.common.util.concurrent.CycleDetectingLockFactory$Policy policy
        end local 0 // com.google.common.util.concurrent.CycleDetectingLockFactory this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    3     0    this  Lcom/google/common/util/concurrent/CycleDetectingLockFactory;
            0    3     1  policy  Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;
    MethodParameters:
        Name  Flags
      policy  

  private void aboutToAcquire(com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingLock);
    descriptor: (Lcom/google/common/util/concurrent/CycleDetectingLockFactory$CycleDetectingLock;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // com.google.common.util.concurrent.CycleDetectingLockFactory this
        start local 1 // com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingLock lock
         0: .line 707
            aload 1 /* lock */
            invokeinterface com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingLock.isAcquiredByCurrentThread:()Z
            ifne 5
         1: .line 708
            getstatic com.google.common.util.concurrent.CycleDetectingLockFactory.acquiredLocks:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast java.util.ArrayList
            astore 2 /* acquiredLockList */
        start local 2 // java.util.ArrayList acquiredLockList
         2: .line 709
            aload 1 /* lock */
            invokeinterface com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingLock.getLockGraphNode:()Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;
            astore 3 /* node */
        start local 3 // com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode node
         3: .line 710
            aload 3 /* node */
            aload 0 /* this */
            getfield com.google.common.util.concurrent.CycleDetectingLockFactory.policy:Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;
            aload 2 /* acquiredLockList */
            invokevirtual com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode.checkAcquiredLocks:(Lcom/google/common/util/concurrent/CycleDetectingLockFactory$Policy;Ljava/util/List;)V
         4: .line 711
            aload 2 /* acquiredLockList */
            aload 3 /* node */
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
        end local 3 // com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode node
        end local 2 // java.util.ArrayList acquiredLockList
         5: .line 713
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingLock lock
        end local 0 // com.google.common.util.concurrent.CycleDetectingLockFactory this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    6     0              this  Lcom/google/common/util/concurrent/CycleDetectingLockFactory;
            0    6     1              lock  Lcom/google/common/util/concurrent/CycleDetectingLockFactory$CycleDetectingLock;
            2    5     2  acquiredLockList  Ljava/util/ArrayList<Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;>;
            3    5     3              node  Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;
    MethodParameters:
      Name  Flags
      lock  

  private static void lockStateChanged(com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingLock);
    descriptor: (Lcom/google/common/util/concurrent/CycleDetectingLockFactory$CycleDetectingLock;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingLock lock
         0: .line 721
            aload 0 /* lock */
            invokeinterface com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingLock.isAcquiredByCurrentThread:()Z
            ifne 10
         1: .line 722
            getstatic com.google.common.util.concurrent.CycleDetectingLockFactory.acquiredLocks:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast java.util.ArrayList
            astore 1 /* acquiredLockList */
        start local 1 // java.util.ArrayList acquiredLockList
         2: .line 723
            aload 0 /* lock */
            invokeinterface com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingLock.getLockGraphNode:()Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;
            astore 2 /* node */
        start local 2 // com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode node
         3: .line 726
            aload 1 /* acquiredLockList */
            invokevirtual java.util.ArrayList.size:()I
            iconst_1
            isub
            istore 3 /* i */
        start local 3 // int i
         4: goto 9
         5: .line 727
      StackMap locals: java.util.ArrayList com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode int
      StackMap stack:
            aload 1 /* acquiredLockList */
            iload 3 /* i */
            invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
            aload 2 /* node */
            if_acmpne 8
         6: .line 728
            aload 1 /* acquiredLockList */
            iload 3 /* i */
            invokevirtual java.util.ArrayList.remove:(I)Ljava/lang/Object;
            pop
         7: .line 729
            goto 10
         8: .line 726
      StackMap locals:
      StackMap stack:
            iinc 3 /* i */ -1
      StackMap locals:
      StackMap stack:
         9: iload 3 /* i */
            ifge 5
        end local 3 // int i
        end local 2 // com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode node
        end local 1 // java.util.ArrayList acquiredLockList
        10: .line 733
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingLock lock
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   11     0              lock  Lcom/google/common/util/concurrent/CycleDetectingLockFactory$CycleDetectingLock;
            2   10     1  acquiredLockList  Ljava/util/ArrayList<Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;>;
            3   10     2              node  Lcom/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode;
            4   10     3                 i  I
    MethodParameters:
      Name  Flags
      lock  
}
SourceFile: "CycleDetectingLockFactory.java"
NestMembers:
  com.google.common.util.concurrent.CycleDetectingLockFactory$1  com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingLock  com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingReentrantLock  com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingReentrantReadLock  com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingReentrantReadWriteLock  com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingReentrantWriteLock  com.google.common.util.concurrent.CycleDetectingLockFactory$ExampleStackTrace  com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode  com.google.common.util.concurrent.CycleDetectingLockFactory$Policies  com.google.common.util.concurrent.CycleDetectingLockFactory$Policies$1  com.google.common.util.concurrent.CycleDetectingLockFactory$Policies$2  com.google.common.util.concurrent.CycleDetectingLockFactory$Policies$3  com.google.common.util.concurrent.CycleDetectingLockFactory$Policy  com.google.common.util.concurrent.CycleDetectingLockFactory$PotentialDeadlockException  com.google.common.util.concurrent.CycleDetectingLockFactory$WithExplicitOrdering
InnerClasses:
  com.google.common.util.concurrent.CycleDetectingLockFactory$1
  private abstract CycleDetectingLock = com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingLock of com.google.common.util.concurrent.CycleDetectingLockFactory
  final CycleDetectingReentrantLock = com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingReentrantLock of com.google.common.util.concurrent.CycleDetectingLockFactory
  private CycleDetectingReentrantReadLock = com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingReentrantReadLock of com.google.common.util.concurrent.CycleDetectingLockFactory
  final CycleDetectingReentrantReadWriteLock = com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingReentrantReadWriteLock of com.google.common.util.concurrent.CycleDetectingLockFactory
  private CycleDetectingReentrantWriteLock = com.google.common.util.concurrent.CycleDetectingLockFactory$CycleDetectingReentrantWriteLock of com.google.common.util.concurrent.CycleDetectingLockFactory
  private ExampleStackTrace = com.google.common.util.concurrent.CycleDetectingLockFactory$ExampleStackTrace of com.google.common.util.concurrent.CycleDetectingLockFactory
  private LockGraphNode = com.google.common.util.concurrent.CycleDetectingLockFactory$LockGraphNode of com.google.common.util.concurrent.CycleDetectingLockFactory
  public abstract Policies = com.google.common.util.concurrent.CycleDetectingLockFactory$Policies of com.google.common.util.concurrent.CycleDetectingLockFactory
  public abstract Policy = com.google.common.util.concurrent.CycleDetectingLockFactory$Policy of com.google.common.util.concurrent.CycleDetectingLockFactory
  public final PotentialDeadlockException = com.google.common.util.concurrent.CycleDetectingLockFactory$PotentialDeadlockException of com.google.common.util.concurrent.CycleDetectingLockFactory
  public final WithExplicitOrdering = com.google.common.util.concurrent.CycleDetectingLockFactory$WithExplicitOrdering of com.google.common.util.concurrent.CycleDetectingLockFactory
    RuntimeInvisibleAnnotations: 
      com.google.common.annotations.Beta()
      com.google.errorprone.annotations.CanIgnoreReturnValue()
      com.google.common.annotations.GwtIncompatible()