final class com.google.common.reflect.Types
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.google.common.reflect.Types
  super_class: java.lang.Object
{
  private static final com.google.common.base.Function<java.lang.reflect.Type, java.lang.String> TYPE_NAME;
    descriptor: Lcom/google/common/base/Function;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Lcom/google/common/base/Function<Ljava/lang/reflect/Type;Ljava/lang/String;>;

  private static final com.google.common.base.Joiner COMMA_JOINER;
    descriptor: Lcom/google/common/base/Joiner;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 58
            new com.google.common.reflect.Types$1
            dup
            invokespecial com.google.common.reflect.Types$1.<init>:()V
         1: .line 57
            putstatic com.google.common.reflect.Types.TYPE_NAME:Lcom/google/common/base/Function;
         2: .line 65
            ldc ", "
            invokestatic com.google.common.base.Joiner.on:(Ljava/lang/String;)Lcom/google/common/base/Joiner;
            ldc "null"
            invokevirtual com.google.common.base.Joiner.useForNull:(Ljava/lang/String;)Lcom/google/common/base/Joiner;
            putstatic com.google.common.reflect.Types.COMMA_JOINER:Lcom/google/common/base/Joiner;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  static java.lang.reflect.Type newArrayType(java.lang.reflect.Type);
    descriptor: (Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // java.lang.reflect.Type componentType
         0: .line 69
            aload 0 /* componentType */
            instanceof java.lang.reflect.WildcardType
            ifeq 13
         1: .line 70
            aload 0 /* componentType */
            checkcast java.lang.reflect.WildcardType
            astore 1 /* wildcard */
        start local 1 // java.lang.reflect.WildcardType wildcard
         2: .line 71
            aload 1 /* wildcard */
            invokeinterface java.lang.reflect.WildcardType.getLowerBounds:()[Ljava/lang/reflect/Type;
            astore 2 /* lowerBounds */
        start local 2 // java.lang.reflect.Type[] lowerBounds
         3: .line 72
            aload 2 /* lowerBounds */
            arraylength
            iconst_1
            if_icmpgt 4
            iconst_1
            goto 5
      StackMap locals: java.lang.reflect.WildcardType java.lang.reflect.Type[]
      StackMap stack:
         4: iconst_0
      StackMap locals:
      StackMap stack: int
         5: ldc "Wildcard cannot have more than one lower bounds."
            invokestatic com.google.common.base.Preconditions.checkArgument:(ZLjava/lang/Object;)V
         6: .line 73
            aload 2 /* lowerBounds */
            arraylength
            iconst_1
            if_icmpne 8
         7: .line 74
            aload 2 /* lowerBounds */
            iconst_0
            aaload
            invokestatic com.google.common.reflect.Types.newArrayType:(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
            invokestatic com.google.common.reflect.Types.supertypeOf:(Ljava/lang/reflect/Type;)Ljava/lang/reflect/WildcardType;
            areturn
         8: .line 76
      StackMap locals:
      StackMap stack:
            aload 1 /* wildcard */
            invokeinterface java.lang.reflect.WildcardType.getUpperBounds:()[Ljava/lang/reflect/Type;
            astore 3 /* upperBounds */
        start local 3 // java.lang.reflect.Type[] upperBounds
         9: .line 77
            aload 3 /* upperBounds */
            arraylength
            iconst_1
            if_icmpne 10
            iconst_1
            goto 11
      StackMap locals: java.lang.reflect.Type[]
      StackMap stack:
        10: iconst_0
      StackMap locals:
      StackMap stack: int
        11: ldc "Wildcard should have only one upper bound."
            invokestatic com.google.common.base.Preconditions.checkArgument:(ZLjava/lang/Object;)V
        12: .line 78
            aload 3 /* upperBounds */
            iconst_0
            aaload
            invokestatic com.google.common.reflect.Types.newArrayType:(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
            invokestatic com.google.common.reflect.Types.subtypeOf:(Ljava/lang/reflect/Type;)Ljava/lang/reflect/WildcardType;
            areturn
        end local 3 // java.lang.reflect.Type[] upperBounds
        end local 2 // java.lang.reflect.Type[] lowerBounds
        end local 1 // java.lang.reflect.WildcardType wildcard
        13: .line 81
      StackMap locals:
      StackMap stack:
            getstatic com.google.common.reflect.Types$JavaVersion.CURRENT:Lcom/google/common/reflect/Types$JavaVersion;
            aload 0 /* componentType */
            invokevirtual com.google.common.reflect.Types$JavaVersion.newArrayType:(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
            areturn
        end local 0 // java.lang.reflect.Type componentType
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   14     0  componentType  Ljava/lang/reflect/Type;
            2   13     1       wildcard  Ljava/lang/reflect/WildcardType;
            3   13     2    lowerBounds  [Ljava/lang/reflect/Type;
            9   13     3    upperBounds  [Ljava/lang/reflect/Type;
    MethodParameters:
               Name  Flags
      componentType  

  static java.lang.reflect.ParameterizedType newParameterizedTypeWithOwner(java.lang.reflect.Type, java.lang.Class<?>, java.lang.reflect.Type[]);
    descriptor: (Ljava/lang/reflect/Type;Ljava/lang/Class;[Ljava/lang/reflect/Type;)Ljava/lang/reflect/ParameterizedType;
    flags: (0x0088) ACC_STATIC, ACC_VARARGS
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // java.lang.reflect.Type ownerType
        start local 1 // java.lang.Class rawType
        start local 2 // java.lang.reflect.Type[] arguments
         0: .line 90
            aload 0 /* ownerType */
            ifnonnull 2
         1: .line 91
            aload 1 /* rawType */
            aload 2 /* arguments */
            invokestatic com.google.common.reflect.Types.newParameterizedType:(Ljava/lang/Class;[Ljava/lang/reflect/Type;)Ljava/lang/reflect/ParameterizedType;
            areturn
         2: .line 94
      StackMap locals:
      StackMap stack:
            aload 2 /* arguments */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         3: .line 95
            aload 1 /* rawType */
            invokevirtual java.lang.Class.getEnclosingClass:()Ljava/lang/Class;
            ifnull 4
            iconst_1
            goto 5
      StackMap locals:
      StackMap stack:
         4: iconst_0
      StackMap locals:
      StackMap stack: int
         5: ldc "Owner type for unenclosed %s"
            aload 1 /* rawType */
            invokestatic com.google.common.base.Preconditions.checkArgument:(ZLjava/lang/String;Ljava/lang/Object;)V
         6: .line 96
            new com.google.common.reflect.Types$ParameterizedTypeImpl
            dup
            aload 0 /* ownerType */
            aload 1 /* rawType */
            aload 2 /* arguments */
            invokespecial com.google.common.reflect.Types$ParameterizedTypeImpl.<init>:(Ljava/lang/reflect/Type;Ljava/lang/Class;[Ljava/lang/reflect/Type;)V
            areturn
        end local 2 // java.lang.reflect.Type[] arguments
        end local 1 // java.lang.Class rawType
        end local 0 // java.lang.reflect.Type ownerType
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    7     0  ownerType  Ljava/lang/reflect/Type;
            0    7     1    rawType  Ljava/lang/Class<*>;
            0    7     2  arguments  [Ljava/lang/reflect/Type;
    Signature: (Ljava/lang/reflect/Type;Ljava/lang/Class<*>;[Ljava/lang/reflect/Type;)Ljava/lang/reflect/ParameterizedType;
    RuntimeVisibleTypeAnnotations: 
      METHOD_FORMAL_PARAMETER
        org.checkerframework.checker.nullness.qual.Nullable()
    MethodParameters:
           Name  Flags
      ownerType  
      rawType    
      arguments  

  static java.lang.reflect.ParameterizedType newParameterizedType(java.lang.Class<?>, java.lang.reflect.Type[]);
    descriptor: (Ljava/lang/Class;[Ljava/lang/reflect/Type;)Ljava/lang/reflect/ParameterizedType;
    flags: (0x0088) ACC_STATIC, ACC_VARARGS
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // java.lang.Class rawType
        start local 1 // java.lang.reflect.Type[] arguments
         0: .line 101
            new com.google.common.reflect.Types$ParameterizedTypeImpl
            dup
         1: .line 102
            getstatic com.google.common.reflect.Types$ClassOwnership.JVM_BEHAVIOR:Lcom/google/common/reflect/Types$ClassOwnership;
            aload 0 /* rawType */
            invokevirtual com.google.common.reflect.Types$ClassOwnership.getOwnerType:(Ljava/lang/Class;)Ljava/lang/Class;
            aload 0 /* rawType */
            aload 1 /* arguments */
         2: .line 101
            invokespecial com.google.common.reflect.Types$ParameterizedTypeImpl.<init>:(Ljava/lang/reflect/Type;Ljava/lang/Class;[Ljava/lang/reflect/Type;)V
            areturn
        end local 1 // java.lang.reflect.Type[] arguments
        end local 0 // java.lang.Class rawType
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    3     0    rawType  Ljava/lang/Class<*>;
            0    3     1  arguments  [Ljava/lang/reflect/Type;
    Signature: (Ljava/lang/Class<*>;[Ljava/lang/reflect/Type;)Ljava/lang/reflect/ParameterizedType;
    MethodParameters:
           Name  Flags
      rawType    
      arguments  

  static <D extends java.lang.reflect.GenericDeclaration> java.lang.reflect.TypeVariable<D> newArtificialTypeVariable(D, java.lang.String, java.lang.reflect.Type[]);
    descriptor: (Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;[Ljava/lang/reflect/Type;)Ljava/lang/reflect/TypeVariable;
    flags: (0x0088) ACC_STATIC, ACC_VARARGS
    Code:
      stack=6, locals=3, args_size=3
        start local 0 // java.lang.reflect.GenericDeclaration declaration
        start local 1 // java.lang.String name
        start local 2 // java.lang.reflect.Type[] bounds
         0: .line 150
            aload 0 /* declaration */
            aload 1 /* name */
            aload 2 /* bounds */
            arraylength
            ifne 1
            iconst_1
            anewarray java.lang.reflect.Type
            dup
            iconst_0
            ldc Ljava/lang/Object;
            aastore
            goto 2
      StackMap locals: java.lang.reflect.GenericDeclaration java.lang.String java.lang.reflect.Type[]
      StackMap stack: java.lang.reflect.GenericDeclaration java.lang.String
         1: aload 2 /* bounds */
         2: .line 149
      StackMap locals: java.lang.reflect.GenericDeclaration java.lang.String java.lang.reflect.Type[]
      StackMap stack: java.lang.reflect.GenericDeclaration java.lang.String java.lang.reflect.Type[]
            invokestatic com.google.common.reflect.Types.newTypeVariableImpl:(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;[Ljava/lang/reflect/Type;)Ljava/lang/reflect/TypeVariable;
            areturn
        end local 2 // java.lang.reflect.Type[] bounds
        end local 1 // java.lang.String name
        end local 0 // java.lang.reflect.GenericDeclaration declaration
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    3     0  declaration  TD;
            0    3     1         name  Ljava/lang/String;
            0    3     2       bounds  [Ljava/lang/reflect/Type;
    Signature: <D::Ljava/lang/reflect/GenericDeclaration;>(TD;Ljava/lang/String;[Ljava/lang/reflect/Type;)Ljava/lang/reflect/TypeVariable<TD;>;
    MethodParameters:
             Name  Flags
      declaration  
      name         
      bounds       

  static java.lang.reflect.WildcardType subtypeOf(java.lang.reflect.Type);
    descriptor: (Ljava/lang/reflect/Type;)Ljava/lang/reflect/WildcardType;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=7, locals=1, args_size=1
        start local 0 // java.lang.reflect.Type upperBound
         0: .line 156
            new com.google.common.reflect.Types$WildcardTypeImpl
            dup
            iconst_0
            anewarray java.lang.reflect.Type
            iconst_1
            anewarray java.lang.reflect.Type
            dup
            iconst_0
            aload 0 /* upperBound */
            aastore
            invokespecial com.google.common.reflect.Types$WildcardTypeImpl.<init>:([Ljava/lang/reflect/Type;[Ljava/lang/reflect/Type;)V
            areturn
        end local 0 // java.lang.reflect.Type upperBound
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0  upperBound  Ljava/lang/reflect/Type;
    RuntimeInvisibleAnnotations: 
      com.google.common.annotations.VisibleForTesting()
    RuntimeInvisibleTypeAnnotations: 
      METHOD_RETURN
        com.google.common.annotations.VisibleForTesting()
    MethodParameters:
            Name  Flags
      upperBound  

  static java.lang.reflect.WildcardType supertypeOf(java.lang.reflect.Type);
    descriptor: (Ljava/lang/reflect/Type;)Ljava/lang/reflect/WildcardType;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=7, locals=1, args_size=1
        start local 0 // java.lang.reflect.Type lowerBound
         0: .line 162
            new com.google.common.reflect.Types$WildcardTypeImpl
            dup
            iconst_1
            anewarray java.lang.reflect.Type
            dup
            iconst_0
            aload 0 /* lowerBound */
            aastore
            iconst_1
            anewarray java.lang.reflect.Type
            dup
            iconst_0
            ldc Ljava/lang/Object;
            aastore
            invokespecial com.google.common.reflect.Types$WildcardTypeImpl.<init>:([Ljava/lang/reflect/Type;[Ljava/lang/reflect/Type;)V
            areturn
        end local 0 // java.lang.reflect.Type lowerBound
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0  lowerBound  Ljava/lang/reflect/Type;
    RuntimeInvisibleAnnotations: 
      com.google.common.annotations.VisibleForTesting()
    RuntimeInvisibleTypeAnnotations: 
      METHOD_RETURN
        com.google.common.annotations.VisibleForTesting()
    MethodParameters:
            Name  Flags
      lowerBound  

  static java.lang.String toString(java.lang.reflect.Type);
    descriptor: (Ljava/lang/reflect/Type;)Ljava/lang/String;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.lang.reflect.Type type
         0: .line 171
            aload 0 /* type */
            instanceof java.lang.Class
            ifeq 1
            aload 0 /* type */
            checkcast java.lang.Class
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            goto 2
      StackMap locals:
      StackMap stack:
         1: aload 0 /* type */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
      StackMap locals:
      StackMap stack: java.lang.String
         2: areturn
        end local 0 // java.lang.reflect.Type type
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  type  Ljava/lang/reflect/Type;
    MethodParameters:
      Name  Flags
      type  

  static java.lang.reflect.Type getComponentType(java.lang.reflect.Type);
    descriptor: (Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=5, locals=2, args_size=1
        start local 0 // java.lang.reflect.Type type
         0: .line 175
            aload 0 /* type */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 176
            new java.util.concurrent.atomic.AtomicReference
            dup
            invokespecial java.util.concurrent.atomic.AtomicReference.<init>:()V
            astore 1 /* result */
        start local 1 // java.util.concurrent.atomic.AtomicReference result
         2: .line 177
            new com.google.common.reflect.Types$2
            dup
            aload 1 /* result */
            invokespecial com.google.common.reflect.Types$2.<init>:(Ljava/util/concurrent/atomic/AtomicReference;)V
            iconst_1
            anewarray java.lang.reflect.Type
            dup
            iconst_0
         3: .line 197
            aload 0 /* type */
            aastore
            invokevirtual com.google.common.reflect.Types$2.visit:([Ljava/lang/reflect/Type;)V
         4: .line 198
            aload 1 /* result */
            invokevirtual java.util.concurrent.atomic.AtomicReference.get:()Ljava/lang/Object;
            checkcast java.lang.reflect.Type
            areturn
        end local 1 // java.util.concurrent.atomic.AtomicReference result
        end local 0 // java.lang.reflect.Type type
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    5     0    type  Ljava/lang/reflect/Type;
            2    5     1  result  Ljava/util/concurrent/atomic/AtomicReference<Ljava/lang/reflect/Type;>;
    RuntimeVisibleTypeAnnotations: 
      METHOD_RETURN
        org.checkerframework.checker.nullness.qual.Nullable()
    MethodParameters:
      Name  Flags
      type  

  private static java.lang.reflect.Type subtypeOfComponentType(java.lang.reflect.Type[]);
    descriptor: ([Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=7, args_size=1
        start local 0 // java.lang.reflect.Type[] bounds
         0: .line 206
            aload 0 /* bounds */
            dup
            astore 4
            arraylength
            istore 3
            iconst_0
            istore 2
            goto 10
      StackMap locals: java.lang.reflect.Type[] top int int java.lang.reflect.Type[]
      StackMap stack:
         1: aload 4
            iload 2
            aaload
            astore 1 /* bound */
        start local 1 // java.lang.reflect.Type bound
         2: .line 207
            aload 1 /* bound */
            invokestatic com.google.common.reflect.Types.getComponentType:(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
            astore 5 /* componentType */
        start local 5 // java.lang.reflect.Type componentType
         3: .line 208
            aload 5 /* componentType */
            ifnull 9
         4: .line 211
            aload 5 /* componentType */
            instanceof java.lang.Class
            ifeq 8
         5: .line 212
            aload 5 /* componentType */
            checkcast java.lang.Class
            astore 6 /* componentClass */
        start local 6 // java.lang.Class componentClass
         6: .line 213
            aload 6 /* componentClass */
            invokevirtual java.lang.Class.isPrimitive:()Z
            ifeq 8
         7: .line 214
            aload 6 /* componentClass */
            areturn
        end local 6 // java.lang.Class componentClass
         8: .line 217
      StackMap locals: java.lang.reflect.Type[] java.lang.reflect.Type int int java.lang.reflect.Type[] java.lang.reflect.Type
      StackMap stack:
            aload 5 /* componentType */
            invokestatic com.google.common.reflect.Types.subtypeOf:(Ljava/lang/reflect/Type;)Ljava/lang/reflect/WildcardType;
            areturn
        end local 5 // java.lang.reflect.Type componentType
        end local 1 // java.lang.reflect.Type bound
         9: .line 206
      StackMap locals: java.lang.reflect.Type[] top int int java.lang.reflect.Type[]
      StackMap stack:
            iinc 2 1
      StackMap locals:
      StackMap stack:
        10: iload 2
            iload 3
            if_icmplt 1
        11: .line 220
            aconst_null
            areturn
        end local 0 // java.lang.reflect.Type[] bounds
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   12     0          bounds  [Ljava/lang/reflect/Type;
            2    9     1           bound  Ljava/lang/reflect/Type;
            3    9     5   componentType  Ljava/lang/reflect/Type;
            6    8     6  componentClass  Ljava/lang/Class<*>;
    RuntimeVisibleTypeAnnotations: 
      METHOD_RETURN
        org.checkerframework.checker.nullness.qual.Nullable()
    MethodParameters:
        Name  Flags
      bounds  

  private static <D extends java.lang.reflect.GenericDeclaration> java.lang.reflect.TypeVariable<D> newTypeVariableImpl(D, java.lang.String, java.lang.reflect.Type[]);
    descriptor: (Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;[Ljava/lang/reflect/Type;)Ljava/lang/reflect/TypeVariable;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=5, args_size=3
        start local 0 // java.lang.reflect.GenericDeclaration genericDeclaration
        start local 1 // java.lang.String name
        start local 2 // java.lang.reflect.Type[] bounds
         0: .line 326
            new com.google.common.reflect.Types$TypeVariableImpl
            dup
            aload 0 /* genericDeclaration */
            aload 1 /* name */
            aload 2 /* bounds */
            invokespecial com.google.common.reflect.Types$TypeVariableImpl.<init>:(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;[Ljava/lang/reflect/Type;)V
         1: .line 325
            astore 3 /* typeVariableImpl */
        start local 3 // com.google.common.reflect.Types$TypeVariableImpl typeVariableImpl
         2: .line 330
            ldc Ljava/lang/reflect/TypeVariable;
            new com.google.common.reflect.Types$TypeVariableInvocationHandler
            dup
            aload 3 /* typeVariableImpl */
            invokespecial com.google.common.reflect.Types$TypeVariableInvocationHandler.<init>:(Lcom/google/common/reflect/Types$TypeVariableImpl;)V
         3: .line 329
            invokestatic com.google.common.reflect.Reflection.newProxy:(Ljava/lang/Class;Ljava/lang/reflect/InvocationHandler;)Ljava/lang/Object;
            checkcast java.lang.reflect.TypeVariable
         4: .line 328
            astore 4 /* typeVariable */
        start local 4 // java.lang.reflect.TypeVariable typeVariable
         5: .line 331
            aload 4 /* typeVariable */
            areturn
        end local 4 // java.lang.reflect.TypeVariable typeVariable
        end local 3 // com.google.common.reflect.Types$TypeVariableImpl typeVariableImpl
        end local 2 // java.lang.reflect.Type[] bounds
        end local 1 // java.lang.String name
        end local 0 // java.lang.reflect.GenericDeclaration genericDeclaration
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    6     0  genericDeclaration  TD;
            0    6     1                name  Ljava/lang/String;
            0    6     2              bounds  [Ljava/lang/reflect/Type;
            2    6     3    typeVariableImpl  Lcom/google/common/reflect/Types$TypeVariableImpl<TD;>;
            5    6     4        typeVariable  Ljava/lang/reflect/TypeVariable<TD;>;
    Signature: <D::Ljava/lang/reflect/GenericDeclaration;>(TD;Ljava/lang/String;[Ljava/lang/reflect/Type;)Ljava/lang/reflect/TypeVariable<TD;>;
    MethodParameters:
                    Name  Flags
      genericDeclaration  
      name                
      bounds              

  private static java.lang.reflect.Type[] toArray(java.util.Collection<java.lang.reflect.Type>);
    descriptor: (Ljava/util/Collection;)[Ljava/lang/reflect/Type;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.util.Collection types
         0: .line 514
            aload 0 /* types */
            aload 0 /* types */
            invokeinterface java.util.Collection.size:()I
            anewarray java.lang.reflect.Type
            invokeinterface java.util.Collection.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            checkcast java.lang.reflect.Type[]
            areturn
        end local 0 // java.util.Collection types
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0  types  Ljava/util/Collection<Ljava/lang/reflect/Type;>;
    Signature: (Ljava/util/Collection<Ljava/lang/reflect/Type;>;)[Ljava/lang/reflect/Type;
    MethodParameters:
       Name  Flags
      types  

  private static java.lang.Iterable<java.lang.reflect.Type> filterUpperBounds(java.lang.Iterable<java.lang.reflect.Type>);
    descriptor: (Ljava/lang/Iterable;)Ljava/lang/Iterable;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.Iterable bounds
         0: .line 518
            aload 0 /* bounds */
            ldc Ljava/lang/Object;
            invokestatic com.google.common.base.Predicates.equalTo:(Ljava/lang/Object;)Lcom/google/common/base/Predicate;
            invokestatic com.google.common.base.Predicates.not:(Lcom/google/common/base/Predicate;)Lcom/google/common/base/Predicate;
            invokestatic com.google.common.collect.Iterables.filter:(Ljava/lang/Iterable;Lcom/google/common/base/Predicate;)Ljava/lang/Iterable;
            areturn
        end local 0 // java.lang.Iterable bounds
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0  bounds  Ljava/lang/Iterable<Ljava/lang/reflect/Type;>;
    Signature: (Ljava/lang/Iterable<Ljava/lang/reflect/Type;>;)Ljava/lang/Iterable<Ljava/lang/reflect/Type;>;
    MethodParameters:
        Name  Flags
      bounds  

  private static void disallowPrimitiveType(java.lang.reflect.Type[], java.lang.String);
    descriptor: ([Ljava/lang/reflect/Type;Ljava/lang/String;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=7, args_size=2
        start local 0 // java.lang.reflect.Type[] types
        start local 1 // java.lang.String usedAs
         0: .line 522
            aload 0 /* types */
            dup
            astore 5
            arraylength
            istore 4
            iconst_0
            istore 3
            goto 8
      StackMap locals: java.lang.reflect.Type[] java.lang.String top int int java.lang.reflect.Type[]
      StackMap stack:
         1: aload 5
            iload 3
            aaload
            astore 2 /* type */
        start local 2 // java.lang.reflect.Type type
         2: .line 523
            aload 2 /* type */
            instanceof java.lang.Class
            ifeq 7
         3: .line 524
            aload 2 /* type */
            checkcast java.lang.Class
            astore 6 /* cls */
        start local 6 // java.lang.Class cls
         4: .line 525
            aload 6 /* cls */
            invokevirtual java.lang.Class.isPrimitive:()Z
            ifeq 5
            iconst_0
            goto 6
      StackMap locals: java.lang.reflect.Type[] java.lang.String java.lang.reflect.Type int int java.lang.reflect.Type[] java.lang.Class
      StackMap stack:
         5: iconst_1
      StackMap locals:
      StackMap stack: int
         6: ldc "Primitive type '%s' used as %s"
            aload 6 /* cls */
            aload 1 /* usedAs */
            invokestatic com.google.common.base.Preconditions.checkArgument:(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
        end local 6 // java.lang.Class cls
        end local 2 // java.lang.reflect.Type type
         7: .line 522
      StackMap locals: java.lang.reflect.Type[] java.lang.String top int int java.lang.reflect.Type[]
      StackMap stack:
            iinc 3 1
      StackMap locals:
      StackMap stack:
         8: iload 3
            iload 4
            if_icmplt 1
         9: .line 528
            return
        end local 1 // java.lang.String usedAs
        end local 0 // java.lang.reflect.Type[] types
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   10     0   types  [Ljava/lang/reflect/Type;
            0   10     1  usedAs  Ljava/lang/String;
            2    7     2    type  Ljava/lang/reflect/Type;
            4    7     6     cls  Ljava/lang/Class<*>;
    MethodParameters:
        Name  Flags
      types   
      usedAs  

  static java.lang.Class<?> getArrayClass(java.lang.Class<?>);
    descriptor: (Ljava/lang/Class;)Ljava/lang/Class;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.Class componentType
         0: .line 535
            aload 0 /* componentType */
            iconst_0
            invokestatic java.lang.reflect.Array.newInstance:(Ljava/lang/Class;I)Ljava/lang/Object;
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            areturn
        end local 0 // java.lang.Class componentType
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    1     0  componentType  Ljava/lang/Class<*>;
    Signature: (Ljava/lang/Class<*>;)Ljava/lang/Class<*>;
    MethodParameters:
               Name  Flags
      componentType  

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.google.common.reflect.Types this
         0: .line 673
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // com.google.common.reflect.Types this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/google/common/reflect/Types;
}
SourceFile: "Types.java"
NestMembers:
  com.google.common.reflect.Types$1  com.google.common.reflect.Types$2  com.google.common.reflect.Types$ClassOwnership  com.google.common.reflect.Types$ClassOwnership$1  com.google.common.reflect.Types$ClassOwnership$1LocalClass  com.google.common.reflect.Types$ClassOwnership$2  com.google.common.reflect.Types$ClassOwnership$3  com.google.common.reflect.Types$GenericArrayTypeImpl  com.google.common.reflect.Types$JavaVersion  com.google.common.reflect.Types$JavaVersion$1  com.google.common.reflect.Types$JavaVersion$2  com.google.common.reflect.Types$JavaVersion$3  com.google.common.reflect.Types$JavaVersion$4  com.google.common.reflect.Types$JavaVersion$5  com.google.common.reflect.Types$JavaVersion$6  com.google.common.reflect.Types$NativeTypeVariableEquals  com.google.common.reflect.Types$ParameterizedTypeImpl  com.google.common.reflect.Types$TypeVariableImpl  com.google.common.reflect.Types$TypeVariableInvocationHandler  com.google.common.reflect.Types$WildcardTypeImpl
InnerClasses:
  com.google.common.reflect.Types$1
  com.google.common.reflect.Types$2
  private abstract ClassOwnership = com.google.common.reflect.Types$ClassOwnership of com.google.common.reflect.Types
  private final GenericArrayTypeImpl = com.google.common.reflect.Types$GenericArrayTypeImpl of com.google.common.reflect.Types
  abstract JavaVersion = com.google.common.reflect.Types$JavaVersion of com.google.common.reflect.Types
  final NativeTypeVariableEquals = com.google.common.reflect.Types$NativeTypeVariableEquals of com.google.common.reflect.Types
  private final ParameterizedTypeImpl = com.google.common.reflect.Types$ParameterizedTypeImpl 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
  final WildcardTypeImpl = com.google.common.reflect.Types$WildcardTypeImpl of com.google.common.reflect.Types