final class com.google.common.reflect.Types$TypeVariableImpl<D extends java.lang.reflect.GenericDeclaration>
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.google.common.reflect.Types$TypeVariableImpl
  super_class: java.lang.Object
{
  private final D genericDeclaration;
    descriptor: Ljava/lang/reflect/GenericDeclaration;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: TD;

  private final java.lang.String name;
    descriptor: Ljava/lang/String;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.google.common.collect.ImmutableList<java.lang.reflect.Type> bounds;
    descriptor: Lcom/google/common/collect/ImmutableList;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lcom/google/common/collect/ImmutableList<Ljava/lang/reflect/Type;>;

  void <init>(D, java.lang.String, java.lang.reflect.Type[]);
    descriptor: (Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;[Ljava/lang/reflect/Type;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=4, args_size=4
        start local 0 // com.google.common.reflect.Types$TypeVariableImpl this
        start local 1 // java.lang.reflect.GenericDeclaration genericDeclaration
        start local 2 // java.lang.String name
        start local 3 // java.lang.reflect.Type[] bounds
         0: .line 401
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 402
            aload 3 /* bounds */
            ldc "bound for type variable"
            invokestatic com.google.common.reflect.Types.disallowPrimitiveType:([Ljava/lang/reflect/Type;Ljava/lang/String;)V
         2: .line 403
            aload 0 /* this */
            aload 1 /* genericDeclaration */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.reflect.GenericDeclaration
            putfield com.google.common.reflect.Types$TypeVariableImpl.genericDeclaration:Ljava/lang/reflect/GenericDeclaration;
         3: .line 404
            aload 0 /* this */
            aload 2 /* name */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            putfield com.google.common.reflect.Types$TypeVariableImpl.name:Ljava/lang/String;
         4: .line 405
            aload 0 /* this */
            aload 3 /* bounds */
            invokestatic com.google.common.collect.ImmutableList.copyOf:([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList;
            putfield com.google.common.reflect.Types$TypeVariableImpl.bounds:Lcom/google/common/collect/ImmutableList;
         5: .line 406
            return
        end local 3 // java.lang.reflect.Type[] bounds
        end local 2 // java.lang.String name
        end local 1 // java.lang.reflect.GenericDeclaration genericDeclaration
        end local 0 // com.google.common.reflect.Types$TypeVariableImpl this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    6     0                this  Lcom/google/common/reflect/Types$TypeVariableImpl<TD;>;
            0    6     1  genericDeclaration  TD;
            0    6     2                name  Ljava/lang/String;
            0    6     3              bounds  [Ljava/lang/reflect/Type;
    Signature: (TD;Ljava/lang/String;[Ljava/lang/reflect/Type;)V
    MethodParameters:
                    Name  Flags
      genericDeclaration  
      name                
      bounds              

  public java.lang.reflect.Type[] getBounds();
    descriptor: ()[Ljava/lang/reflect/Type;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.google.common.reflect.Types$TypeVariableImpl this
         0: .line 409
            aload 0 /* this */
            getfield com.google.common.reflect.Types$TypeVariableImpl.bounds:Lcom/google/common/collect/ImmutableList;
            invokestatic com.google.common.reflect.Types.toArray:(Ljava/util/Collection;)[Ljava/lang/reflect/Type;
            areturn
        end local 0 // com.google.common.reflect.Types$TypeVariableImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/google/common/reflect/Types$TypeVariableImpl<TD;>;

  public D getGenericDeclaration();
    descriptor: ()Ljava/lang/reflect/GenericDeclaration;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.google.common.reflect.Types$TypeVariableImpl this
         0: .line 413
            aload 0 /* this */
            getfield com.google.common.reflect.Types$TypeVariableImpl.genericDeclaration:Ljava/lang/reflect/GenericDeclaration;
            areturn
        end local 0 // com.google.common.reflect.Types$TypeVariableImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/google/common/reflect/Types$TypeVariableImpl<TD;>;
    Signature: ()TD;

  public java.lang.String getName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.google.common.reflect.Types$TypeVariableImpl this
         0: .line 417
            aload 0 /* this */
            getfield com.google.common.reflect.Types$TypeVariableImpl.name:Ljava/lang/String;
            areturn
        end local 0 // com.google.common.reflect.Types$TypeVariableImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/google/common/reflect/Types$TypeVariableImpl<TD;>;

  public java.lang.String getTypeName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.google.common.reflect.Types$TypeVariableImpl this
         0: .line 421
            aload 0 /* this */
            getfield com.google.common.reflect.Types$TypeVariableImpl.name:Ljava/lang/String;
            areturn
        end local 0 // com.google.common.reflect.Types$TypeVariableImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/google/common/reflect/Types$TypeVariableImpl<TD;>;

  public java.lang.String toString();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.google.common.reflect.Types$TypeVariableImpl this
         0: .line 426
            aload 0 /* this */
            getfield com.google.common.reflect.Types$TypeVariableImpl.name:Ljava/lang/String;
            areturn
        end local 0 // com.google.common.reflect.Types$TypeVariableImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/google/common/reflect/Types$TypeVariableImpl<TD;>;

  public int hashCode();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.google.common.reflect.Types$TypeVariableImpl this
         0: .line 431
            aload 0 /* this */
            getfield com.google.common.reflect.Types$TypeVariableImpl.genericDeclaration:Ljava/lang/reflect/GenericDeclaration;
            invokevirtual java.lang.Object.hashCode:()I
            aload 0 /* this */
            getfield com.google.common.reflect.Types$TypeVariableImpl.name:Ljava/lang/String;
            invokevirtual java.lang.String.hashCode:()I
            ixor
            ireturn
        end local 0 // com.google.common.reflect.Types$TypeVariableImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/google/common/reflect/Types$TypeVariableImpl<TD;>;

  public boolean equals(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // com.google.common.reflect.Types$TypeVariableImpl this
        start local 1 // java.lang.Object obj
         0: .line 436
            getstatic com.google.common.reflect.Types$NativeTypeVariableEquals.NATIVE_TYPE_VARIABLE_ONLY:Z
            ifeq 13
         1: .line 438
            aload 1 /* obj */
            ifnull 12
         2: .line 439
            aload 1 /* obj */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokestatic java.lang.reflect.Proxy.isProxyClass:(Ljava/lang/Class;)Z
            ifeq 12
         3: .line 440
            aload 1 /* obj */
            invokestatic java.lang.reflect.Proxy.getInvocationHandler:(Ljava/lang/Object;)Ljava/lang/reflect/InvocationHandler;
            instanceof com.google.common.reflect.Types$TypeVariableInvocationHandler
            ifeq 12
         4: .line 442
            aload 1 /* obj */
            invokestatic java.lang.reflect.Proxy.getInvocationHandler:(Ljava/lang/Object;)Ljava/lang/reflect/InvocationHandler;
            checkcast com.google.common.reflect.Types$TypeVariableInvocationHandler
         5: .line 441
            astore 2 /* typeVariableInvocationHandler */
        start local 2 // com.google.common.reflect.Types$TypeVariableInvocationHandler typeVariableInvocationHandler
         6: .line 443
            aload 2 /* typeVariableInvocationHandler */
            getfield com.google.common.reflect.Types$TypeVariableInvocationHandler.typeVariableImpl:Lcom/google/common/reflect/Types$TypeVariableImpl;
            astore 3 /* that */
        start local 3 // com.google.common.reflect.Types$TypeVariableImpl that
         7: .line 444
            aload 0 /* this */
            getfield com.google.common.reflect.Types$TypeVariableImpl.name:Ljava/lang/String;
            aload 3 /* that */
            invokevirtual com.google.common.reflect.Types$TypeVariableImpl.getName:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 11
         8: .line 445
            aload 0 /* this */
            getfield com.google.common.reflect.Types$TypeVariableImpl.genericDeclaration:Ljava/lang/reflect/GenericDeclaration;
            aload 3 /* that */
            invokevirtual com.google.common.reflect.Types$TypeVariableImpl.getGenericDeclaration:()Ljava/lang/reflect/GenericDeclaration;
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifeq 11
         9: .line 446
            aload 0 /* this */
            getfield com.google.common.reflect.Types$TypeVariableImpl.bounds:Lcom/google/common/collect/ImmutableList;
            aload 3 /* that */
            getfield com.google.common.reflect.Types$TypeVariableImpl.bounds:Lcom/google/common/collect/ImmutableList;
            invokevirtual com.google.common.collect.ImmutableList.equals:(Ljava/lang/Object;)Z
            ifeq 11
        10: .line 444
            iconst_1
            ireturn
      StackMap locals: com.google.common.reflect.Types$TypeVariableInvocationHandler com.google.common.reflect.Types$TypeVariableImpl
      StackMap stack:
        11: iconst_0
            ireturn
        end local 3 // com.google.common.reflect.Types$TypeVariableImpl that
        end local 2 // com.google.common.reflect.Types$TypeVariableInvocationHandler typeVariableInvocationHandler
        12: .line 448
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        13: .line 451
      StackMap locals:
      StackMap stack:
            aload 1 /* obj */
            instanceof java.lang.reflect.TypeVariable
            ifeq 19
        14: .line 452
            aload 1 /* obj */
            checkcast java.lang.reflect.TypeVariable
            astore 2 /* that */
        start local 2 // java.lang.reflect.TypeVariable that
        15: .line 453
            aload 0 /* this */
            getfield com.google.common.reflect.Types$TypeVariableImpl.name:Ljava/lang/String;
            aload 2 /* that */
            invokeinterface java.lang.reflect.TypeVariable.getName:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 18
        16: .line 454
            aload 0 /* this */
            getfield com.google.common.reflect.Types$TypeVariableImpl.genericDeclaration:Ljava/lang/reflect/GenericDeclaration;
            aload 2 /* that */
            invokeinterface java.lang.reflect.TypeVariable.getGenericDeclaration:()Ljava/lang/reflect/GenericDeclaration;
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifeq 18
        17: .line 453
            iconst_1
            ireturn
      StackMap locals: java.lang.reflect.TypeVariable
      StackMap stack:
        18: iconst_0
            ireturn
        end local 2 // java.lang.reflect.TypeVariable that
        19: .line 456
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 1 // java.lang.Object obj
        end local 0 // com.google.common.reflect.Types$TypeVariableImpl this
      LocalVariableTable:
        Start  End  Slot                           Name  Signature
            0   20     0                           this  Lcom/google/common/reflect/Types$TypeVariableImpl<TD;>;
            0   20     1                            obj  Ljava/lang/Object;
            6   12     2  typeVariableInvocationHandler  Lcom/google/common/reflect/Types$TypeVariableInvocationHandler;
            7   12     3                           that  Lcom/google/common/reflect/Types$TypeVariableImpl<*>;
           15   19     2                           that  Ljava/lang/reflect/TypeVariable<*>;
    MethodParameters:
      Name  Flags
      obj   
}
Signature: <D::Ljava/lang/reflect/GenericDeclaration;>Ljava/lang/Object;
SourceFile: "Types.java"
NestHost: com.google.common.reflect.Types
InnerClasses:
  final NativeTypeVariableEquals = com.google.common.reflect.Types$NativeTypeVariableEquals of com.google.common.reflect.Types
  private final TypeVariableImpl = com.google.common.reflect.Types$TypeVariableImpl of com.google.common.reflect.Types
  private final TypeVariableInvocationHandler = com.google.common.reflect.Types$TypeVariableInvocationHandler of com.google.common.reflect.Types