public final class org.mongodb.morphia.utils.ReflectionUtils
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: org.mongodb.morphia.utils.ReflectionUtils
  super_class: java.lang.Object
{
  private static final org.mongodb.morphia.logging.Logger LOG;
    descriptor: Lorg/mongodb/morphia/logging/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 67
            ldc Lorg/mongodb/morphia/utils/ReflectionUtils;
            invokestatic org.mongodb.morphia.logging.MorphiaLoggerFactory.get:(Ljava/lang/Class;)Lorg/mongodb/morphia/logging/Logger;
            putstatic org.mongodb.morphia.utils.ReflectionUtils.LOG:Lorg/mongodb/morphia/logging/Logger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.utils.ReflectionUtils this
         0: .line 70
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 71
            return
        end local 0 // org.mongodb.morphia.utils.ReflectionUtils this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/mongodb/morphia/utils/ReflectionUtils;

  public static java.lang.reflect.Field[] getDeclaredAndInheritedFields(java.lang.Class, boolean);
    descriptor: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Field;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // java.lang.Class type
        start local 1 // boolean returnFinalFields
         0: .line 81
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 2 /* allFields */
        start local 2 // java.util.List allFields
         1: .line 82
            aload 2 /* allFields */
            aload 0 /* type */
            invokevirtual java.lang.Class.getDeclaredFields:()[Ljava/lang/reflect/Field;
            iload 1 /* returnFinalFields */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getValidFields:([Ljava/lang/reflect/Field;Z)Ljava/util/List;
            invokeinterface java.util.List.addAll:(Ljava/util/Collection;)Z
            pop
         2: .line 83
            aload 0 /* type */
            invokevirtual java.lang.Class.getSuperclass:()Ljava/lang/Class;
            astore 3 /* parent */
        start local 3 // java.lang.Class parent
         3: .line 84
            goto 6
         4: .line 85
      StackMap locals: java.util.List java.lang.Class
      StackMap stack:
            aload 2 /* allFields */
            aload 3 /* parent */
            invokevirtual java.lang.Class.getDeclaredFields:()[Ljava/lang/reflect/Field;
            iload 1 /* returnFinalFields */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getValidFields:([Ljava/lang/reflect/Field;Z)Ljava/util/List;
            invokeinterface java.util.List.addAll:(Ljava/util/Collection;)Z
            pop
         5: .line 86
            aload 3 /* parent */
            invokevirtual java.lang.Class.getSuperclass:()Ljava/lang/Class;
            astore 3 /* parent */
         6: .line 84
      StackMap locals:
      StackMap stack:
            aload 3 /* parent */
            ifnull 7
            aload 3 /* parent */
            ldc Ljava/lang/Object;
            if_acmpne 4
         7: .line 88
      StackMap locals:
      StackMap stack:
            aload 2 /* allFields */
            aload 2 /* allFields */
            invokeinterface java.util.List.size:()I
            anewarray java.lang.reflect.Field
            invokeinterface java.util.List.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            checkcast java.lang.reflect.Field[]
            areturn
        end local 3 // java.lang.Class parent
        end local 2 // java.util.List allFields
        end local 1 // boolean returnFinalFields
        end local 0 // java.lang.Class type
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    8     0               type  Ljava/lang/Class;
            0    8     1  returnFinalFields  Z
            1    8     2          allFields  Ljava/util/List<Ljava/lang/reflect/Field;>;
            3    8     3             parent  Ljava/lang/Class;
    MethodParameters:
                   Name  Flags
      type               final
      returnFinalFields  final

  public static java.util.List<java.lang.reflect.Field> getValidFields(java.lang.reflect.Field[], boolean);
    descriptor: ([Ljava/lang/reflect/Field;Z)Ljava/util/List;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=7, args_size=2
        start local 0 // java.lang.reflect.Field[] fields
        start local 1 // boolean returnFinalFields
         0: .line 99
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 2 /* validFields */
        start local 2 // java.util.List validFields
         1: .line 101
            aload 0 /* fields */
            dup
            astore 6
            arraylength
            istore 5
            iconst_0
            istore 4
            goto 6
      StackMap locals: java.lang.reflect.Field[] int java.util.List top int int java.lang.reflect.Field[]
      StackMap stack:
         2: aload 6
            iload 4
            aaload
            astore 3 /* field */
        start local 3 // java.lang.reflect.Field field
         3: .line 102
            aload 3 /* field */
            invokevirtual java.lang.reflect.Field.getModifiers:()I
            invokestatic java.lang.reflect.Modifier.isStatic:(I)Z
            ifne 5
            iload 1 /* returnFinalFields */
            ifne 4
            aload 3 /* field */
            invokevirtual java.lang.reflect.Field.getModifiers:()I
            invokestatic java.lang.reflect.Modifier.isFinal:(I)Z
            ifne 5
         4: .line 103
      StackMap locals: java.lang.reflect.Field[] int java.util.List java.lang.reflect.Field int int java.lang.reflect.Field[]
      StackMap stack:
            aload 2 /* validFields */
            aload 3 /* field */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 3 // java.lang.reflect.Field field
         5: .line 101
      StackMap locals: java.lang.reflect.Field[] int java.util.List top int int java.lang.reflect.Field[]
      StackMap stack:
            iinc 4 1
      StackMap locals:
      StackMap stack:
         6: iload 4
            iload 5
            if_icmplt 2
         7: .line 106
            aload 2 /* validFields */
            areturn
        end local 2 // java.util.List validFields
        end local 1 // boolean returnFinalFields
        end local 0 // java.lang.reflect.Field[] fields
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    8     0             fields  [Ljava/lang/reflect/Field;
            0    8     1  returnFinalFields  Z
            1    8     2        validFields  Ljava/util/List<Ljava/lang/reflect/Field;>;
            3    5     3              field  Ljava/lang/reflect/Field;
    Signature: ([Ljava/lang/reflect/Field;Z)Ljava/util/List<Ljava/lang/reflect/Field;>;
    MethodParameters:
                   Name  Flags
      fields             final
      returnFinalFields  final

  public static java.util.List<java.lang.reflect.Method> getDeclaredAndInheritedMethods(java.lang.Class);
    descriptor: (Ljava/lang/Class;)Ljava/util/List;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // java.lang.Class type
         0: .line 116
            aload 0 /* type */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getDeclaredAndInheritedMethods:(Ljava/lang/Class;Ljava/util/List;)Ljava/util/List;
            areturn
        end local 0 // java.lang.Class type
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  type  Ljava/lang/Class;
    Signature: (Ljava/lang/Class;)Ljava/util/List<Ljava/lang/reflect/Method;>;
    MethodParameters:
      Name  Flags
      type  final

  private static java.util.List<java.lang.reflect.Method> getDeclaredAndInheritedMethods(java.lang.Class, java.util.List<java.lang.reflect.Method>);
    descriptor: (Ljava/lang/Class;Ljava/util/List;)Ljava/util/List;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=8, args_size=2
        start local 0 // java.lang.Class type
        start local 1 // java.util.List methods
         0: .line 120
            aload 0 /* type */
            ifnull 1
            aload 0 /* type */
            ldc Ljava/lang/Object;
            if_acmpne 2
         1: .line 121
      StackMap locals:
      StackMap stack:
            aload 1 /* methods */
            areturn
         2: .line 124
      StackMap locals:
      StackMap stack:
            aload 0 /* type */
            invokevirtual java.lang.Class.getSuperclass:()Ljava/lang/Class;
            astore 2 /* parent */
        start local 2 // java.lang.Class parent
         3: .line 125
            aload 2 /* parent */
            aload 1 /* methods */
            ifnonnull 4
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            goto 5
      StackMap locals: java.lang.Class java.util.List java.lang.Class
      StackMap stack: java.lang.Class
         4: aload 1 /* methods */
      StackMap locals: java.lang.Class java.util.List java.lang.Class
      StackMap stack: java.lang.Class java.util.List
         5: invokestatic org.mongodb.morphia.utils.ReflectionUtils.getDeclaredAndInheritedMethods:(Ljava/lang/Class;Ljava/util/List;)Ljava/util/List;
            astore 3 /* list */
        start local 3 // java.util.List list
         6: .line 127
            aload 0 /* type */
            invokevirtual java.lang.Class.getDeclaredMethods:()[Ljava/lang/reflect/Method;
            dup
            astore 7
            arraylength
            istore 6
            iconst_0
            istore 5
            goto 11
      StackMap locals: java.lang.Class java.util.List java.lang.Class java.util.List top int int java.lang.reflect.Method[]
      StackMap stack:
         7: aload 7
            iload 5
            aaload
            astore 4 /* m */
        start local 4 // java.lang.reflect.Method m
         8: .line 128
            aload 4 /* m */
            invokevirtual java.lang.reflect.Method.getModifiers:()I
            invokestatic java.lang.reflect.Modifier.isStatic:(I)Z
            ifne 10
         9: .line 129
            aload 3 /* list */
            aload 4 /* m */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 4 // java.lang.reflect.Method m
        10: .line 127
      StackMap locals:
      StackMap stack:
            iinc 5 1
      StackMap locals:
      StackMap stack:
        11: iload 5
            iload 6
            if_icmplt 7
        12: .line 133
            aload 3 /* list */
            areturn
        end local 3 // java.util.List list
        end local 2 // java.lang.Class parent
        end local 1 // java.util.List methods
        end local 0 // java.lang.Class type
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   13     0     type  Ljava/lang/Class;
            0   13     1  methods  Ljava/util/List<Ljava/lang/reflect/Method;>;
            3   13     2   parent  Ljava/lang/Class;
            6   13     3     list  Ljava/util/List<Ljava/lang/reflect/Method;>;
            8   10     4        m  Ljava/lang/reflect/Method;
    Signature: (Ljava/lang/Class;Ljava/util/List<Ljava/lang/reflect/Method;>;)Ljava/util/List<Ljava/lang/reflect/Method;>;
    MethodParameters:
         Name  Flags
      type     final
      methods  final

  public static boolean isIntegerType(java.lang.Class);
    descriptor: (Ljava/lang/Class;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // java.lang.Class type
         0: .line 155
            bipush 8
            anewarray java.lang.Class
            dup
            iconst_0
            ldc Ljava/lang/Integer;
            aastore
            dup
            iconst_1
            getstatic java.lang.Integer.TYPE:Ljava/lang/Class;
            aastore
            dup
            iconst_2
            ldc Ljava/lang/Long;
            aastore
            dup
            iconst_3
            getstatic java.lang.Long.TYPE:Ljava/lang/Class;
            aastore
            dup
            iconst_4
            ldc Ljava/lang/Short;
            aastore
            dup
            iconst_5
            getstatic java.lang.Short.TYPE:Ljava/lang/Class;
            aastore
            dup
            bipush 6
            ldc Ljava/lang/Byte;
            aastore
            dup
            bipush 7
         1: .line 156
            getstatic java.lang.Byte.TYPE:Ljava/lang/Class;
            aastore
         2: .line 155
            invokestatic java.util.Arrays.asList:([Ljava/lang/Object;)Ljava/util/List;
         3: .line 156
            aload 0 /* type */
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
         4: .line 155
            ireturn
        end local 0 // java.lang.Class type
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  type  Ljava/lang/Class;
    MethodParameters:
      Name  Flags
      type  final

  public static boolean isPropertyType(java.lang.reflect.Type);
    descriptor: (Ljava/lang/reflect/Type;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.lang.reflect.Type type
         0: .line 166
            aload 0 /* type */
            instanceof java.lang.reflect.GenericArrayType
            ifeq 2
         1: .line 167
            aload 0 /* type */
            checkcast java.lang.reflect.GenericArrayType
            invokeinterface java.lang.reflect.GenericArrayType.getGenericComponentType:()Ljava/lang/reflect/Type;
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.isPropertyType:(Ljava/lang/reflect/Type;)Z
            ireturn
         2: .line 169
      StackMap locals:
      StackMap stack:
            aload 0 /* type */
            instanceof java.lang.reflect.ParameterizedType
            ifeq 4
         3: .line 170
            aload 0 /* type */
            checkcast java.lang.reflect.ParameterizedType
            invokeinterface java.lang.reflect.ParameterizedType.getRawType:()Ljava/lang/reflect/Type;
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.isPropertyType:(Ljava/lang/reflect/Type;)Z
            ireturn
         4: .line 172
      StackMap locals:
      StackMap stack:
            aload 0 /* type */
            instanceof java.lang.Class
            ifeq 5
            aload 0 /* type */
            checkcast java.lang.Class
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.isPropertyType:(Ljava/lang/Class;)Z
            ifeq 5
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         5: iconst_0
            ireturn
        end local 0 // java.lang.reflect.Type type
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  type  Ljava/lang/reflect/Type;
    MethodParameters:
      Name  Flags
      type  final

  public static java.lang.Class getParameterizedClass(java.lang.reflect.Field);
    descriptor: (Ljava/lang/reflect/Field;)Ljava/lang/Class;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.reflect.Field field
         0: .line 182
            aload 0 /* field */
            iconst_0
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getParameterizedClass:(Ljava/lang/reflect/Field;I)Ljava/lang/Class;
            areturn
        end local 0 // java.lang.reflect.Field field
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0  field  Ljava/lang/reflect/Field;
    MethodParameters:
       Name  Flags
      field  final

  public static java.lang.Class getParameterizedClass(java.lang.reflect.Field, int);
    descriptor: (Ljava/lang/reflect/Field;I)Ljava/lang/Class;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // java.lang.reflect.Field field
        start local 1 // int index
         0: .line 193
            aload 0 /* field */
            invokevirtual java.lang.reflect.Field.getGenericType:()Ljava/lang/reflect/Type;
            instanceof java.lang.reflect.ParameterizedType
            ifeq 20
         1: .line 194
            aload 0 /* field */
            invokevirtual java.lang.reflect.Field.getGenericType:()Ljava/lang/reflect/Type;
            checkcast java.lang.reflect.ParameterizedType
            astore 2 /* type */
        start local 2 // java.lang.reflect.ParameterizedType type
         2: .line 195
            aload 2 /* type */
            invokeinterface java.lang.reflect.ParameterizedType.getActualTypeArguments:()[Ljava/lang/reflect/Type;
            ifnull 4
            aload 2 /* type */
            invokeinterface java.lang.reflect.ParameterizedType.getActualTypeArguments:()[Ljava/lang/reflect/Type;
            arraylength
            iload 1 /* index */
            if_icmpgt 4
         3: .line 196
            aconst_null
            areturn
         4: .line 198
      StackMap locals: java.lang.reflect.ParameterizedType
      StackMap stack:
            aload 2 /* type */
            invokeinterface java.lang.reflect.ParameterizedType.getActualTypeArguments:()[Ljava/lang/reflect/Type;
            iload 1 /* index */
            aaload
            astore 3 /* paramType */
        start local 3 // java.lang.reflect.Type paramType
         5: .line 199
            aload 3 /* paramType */
            instanceof java.lang.reflect.GenericArrayType
            ifeq 10
         6: .line 200
            aload 3 /* paramType */
            checkcast java.lang.reflect.GenericArrayType
            invokeinterface java.lang.reflect.GenericArrayType.getGenericComponentType:()Ljava/lang/reflect/Type;
            checkcast java.lang.Class
            astore 4 /* arrayType */
        start local 4 // java.lang.Class arrayType
         7: .line 201
            aload 4 /* arrayType */
            iconst_0
            invokestatic java.lang.reflect.Array.newInstance:(Ljava/lang/Class;I)Ljava/lang/Object;
         8: .line 202
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
         9: .line 201
            areturn
        end local 4 // java.lang.Class arrayType
        10: .line 204
      StackMap locals: java.lang.reflect.Type
      StackMap stack:
            aload 3 /* paramType */
            instanceof java.lang.reflect.ParameterizedType
            ifeq 13
        11: .line 205
            aload 3 /* paramType */
            checkcast java.lang.reflect.ParameterizedType
            astore 4 /* paramPType */
        start local 4 // java.lang.reflect.ParameterizedType paramPType
        12: .line 206
            aload 4 /* paramPType */
            invokeinterface java.lang.reflect.ParameterizedType.getRawType:()Ljava/lang/reflect/Type;
            checkcast java.lang.Class
            areturn
        end local 4 // java.lang.reflect.ParameterizedType paramPType
        13: .line 208
      StackMap locals:
      StackMap stack:
            aload 3 /* paramType */
            instanceof java.lang.reflect.TypeVariable
            ifeq 17
        14: .line 212
            new org.mongodb.morphia.mapping.MappingException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Generic Typed Class not supported:  <"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* paramType */
            checkcast java.lang.reflect.TypeVariable
            invokeinterface java.lang.reflect.TypeVariable.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "> = "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        15: .line 213
            aload 3 /* paramType */
            checkcast java.lang.reflect.TypeVariable
            invokeinterface java.lang.reflect.TypeVariable.getBounds:()[Ljava/lang/reflect/Type;
            iconst_0
            aaload
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        16: .line 212
            invokespecial org.mongodb.morphia.mapping.MappingException.<init>:(Ljava/lang/String;)V
            athrow
        17: .line 214
      StackMap locals:
      StackMap stack:
            aload 3 /* paramType */
            instanceof java.lang.Class
            ifeq 19
        18: .line 215
            aload 3 /* paramType */
            checkcast java.lang.Class
            areturn
        19: .line 217
      StackMap locals:
      StackMap stack:
            new org.mongodb.morphia.mapping.MappingException
            dup
            ldc "Unknown type... pretty bad... call for help, wave your hands... yeah!"
            invokespecial org.mongodb.morphia.mapping.MappingException.<init>:(Ljava/lang/String;)V
            athrow
        end local 3 // java.lang.reflect.Type paramType
        end local 2 // java.lang.reflect.ParameterizedType type
        20: .line 222
      StackMap locals:
      StackMap stack:
            aload 0 /* field */
            invokevirtual java.lang.reflect.Field.getType:()Ljava/lang/Class;
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getParameterizedClass:(Ljava/lang/Class;)Ljava/lang/Class;
            areturn
        end local 1 // int index
        end local 0 // java.lang.reflect.Field field
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   21     0       field  Ljava/lang/reflect/Field;
            0   21     1       index  I
            2   20     2        type  Ljava/lang/reflect/ParameterizedType;
            5   20     3   paramType  Ljava/lang/reflect/Type;
            7   10     4   arrayType  Ljava/lang/Class;
           12   13     4  paramPType  Ljava/lang/reflect/ParameterizedType;
    MethodParameters:
       Name  Flags
      field  final
      index  final

  public static java.lang.reflect.Type getParameterizedType(java.lang.reflect.Field, int);
    descriptor: (Ljava/lang/reflect/Field;I)Ljava/lang/reflect/Type;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // java.lang.reflect.Field field
        start local 1 // int index
         0: .line 233
            aload 0 /* field */
            ifnull 18
         1: .line 234
            aload 0 /* field */
            invokevirtual java.lang.reflect.Field.getGenericType:()Ljava/lang/reflect/Type;
            instanceof java.lang.reflect.ParameterizedType
            ifeq 17
         2: .line 235
            aload 0 /* field */
            invokevirtual java.lang.reflect.Field.getGenericType:()Ljava/lang/reflect/Type;
            checkcast java.lang.reflect.ParameterizedType
            astore 2 /* type */
        start local 2 // java.lang.reflect.ParameterizedType type
         3: .line 236
            aload 2 /* type */
            invokeinterface java.lang.reflect.ParameterizedType.getActualTypeArguments:()[Ljava/lang/reflect/Type;
            ifnull 5
            aload 2 /* type */
            invokeinterface java.lang.reflect.ParameterizedType.getActualTypeArguments:()[Ljava/lang/reflect/Type;
            arraylength
            iload 1 /* index */
            if_icmpgt 5
         4: .line 237
            aconst_null
            areturn
         5: .line 239
      StackMap locals: java.lang.reflect.ParameterizedType
      StackMap stack:
            aload 2 /* type */
            invokeinterface java.lang.reflect.ParameterizedType.getActualTypeArguments:()[Ljava/lang/reflect/Type;
            iload 1 /* index */
            aaload
            astore 3 /* paramType */
        start local 3 // java.lang.reflect.Type paramType
         6: .line 240
            aload 3 /* paramType */
            instanceof java.lang.reflect.GenericArrayType
            ifeq 8
         7: .line 241
            aload 3 /* paramType */
            areturn
         8: .line 243
      StackMap locals: java.lang.reflect.Type
      StackMap stack:
            aload 3 /* paramType */
            instanceof java.lang.reflect.ParameterizedType
            ifeq 10
         9: .line 244
            aload 3 /* paramType */
            areturn
        10: .line 246
      StackMap locals:
      StackMap stack:
            aload 3 /* paramType */
            instanceof java.lang.reflect.TypeVariable
            ifeq 12
        11: .line 252
            aload 3 /* paramType */
            areturn
        12: .line 253
      StackMap locals:
      StackMap stack:
            aload 3 /* paramType */
            instanceof java.lang.reflect.WildcardType
            ifeq 14
        13: .line 254
            aload 3 /* paramType */
            areturn
        14: .line 255
      StackMap locals:
      StackMap stack:
            aload 3 /* paramType */
            instanceof java.lang.Class
            ifeq 16
        15: .line 256
            aload 3 /* paramType */
            areturn
        16: .line 258
      StackMap locals:
      StackMap stack:
            new org.mongodb.morphia.mapping.MappingException
            dup
            ldc "Unknown type... pretty bad... call for help, wave your hands... yeah!"
            invokespecial org.mongodb.morphia.mapping.MappingException.<init>:(Ljava/lang/String;)V
            athrow
        end local 3 // java.lang.reflect.Type paramType
        end local 2 // java.lang.reflect.ParameterizedType type
        17: .line 265
      StackMap locals:
      StackMap stack:
            aload 0 /* field */
            invokevirtual java.lang.reflect.Field.getType:()Ljava/lang/Class;
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getParameterizedClass:(Ljava/lang/Class;)Ljava/lang/Class;
            areturn
        18: .line 268
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 1 // int index
        end local 0 // java.lang.reflect.Field field
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   19     0      field  Ljava/lang/reflect/Field;
            0   19     1      index  I
            3   17     2       type  Ljava/lang/reflect/ParameterizedType;
            6   17     3  paramType  Ljava/lang/reflect/Type;
    MethodParameters:
       Name  Flags
      field  final
      index  final

  public static java.lang.Class getParameterizedClass(java.lang.Class);
    descriptor: (Ljava/lang/Class;)Ljava/lang/Class;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.Class c
         0: .line 278
            aload 0 /* c */
            iconst_0
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getParameterizedClass:(Ljava/lang/Class;I)Ljava/lang/Class;
            areturn
        end local 0 // java.lang.Class c
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0     c  Ljava/lang/Class;
    MethodParameters:
      Name  Flags
      c     final

  public static java.lang.Class getParameterizedClass(java.lang.Class, int);
    descriptor: (Ljava/lang/Class;I)Ljava/lang/Class;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=6, args_size=2
        start local 0 // java.lang.Class c
        start local 1 // int index
         0: .line 289
            aload 0 /* c */
            invokevirtual java.lang.Class.getTypeParameters:()[Ljava/lang/reflect/TypeVariable;
            astore 2 /* typeVars */
        start local 2 // java.lang.reflect.TypeVariable[] typeVars
         1: .line 290
            aload 2 /* typeVars */
            arraylength
            ifle 8
         2: .line 291
            aload 2 /* typeVars */
            iload 1 /* index */
            aaload
            astore 3 /* typeVariable */
        start local 3 // java.lang.reflect.TypeVariable typeVariable
         3: .line 292
            aload 3 /* typeVariable */
            invokeinterface java.lang.reflect.TypeVariable.getBounds:()[Ljava/lang/reflect/Type;
            astore 4 /* bounds */
        start local 4 // java.lang.reflect.Type[] bounds
         4: .line 294
            aload 4 /* bounds */
            iconst_0
            aaload
            astore 5 /* type */
        start local 5 // java.lang.reflect.Type type
         5: .line 295
            aload 5 /* type */
            instanceof java.lang.Class
            ifeq 7
         6: .line 296
            aload 5 /* type */
            checkcast java.lang.Class
            areturn
         7: .line 299
      StackMap locals: java.lang.Class int java.lang.reflect.TypeVariable[] java.lang.reflect.TypeVariable java.lang.reflect.Type[] java.lang.reflect.Type
      StackMap stack:
            aconst_null
            areturn
        end local 5 // java.lang.reflect.Type type
        end local 4 // java.lang.reflect.Type[] bounds
        end local 3 // java.lang.reflect.TypeVariable typeVariable
         8: .line 302
      StackMap locals:
      StackMap stack:
            aload 0 /* c */
            invokevirtual java.lang.Class.getGenericSuperclass:()Ljava/lang/reflect/Type;
            astore 3 /* superclass */
        start local 3 // java.lang.reflect.Type superclass
         9: .line 303
            aload 3 /* superclass */
            ifnonnull 13
            aload 0 /* c */
            invokevirtual java.lang.Class.isInterface:()Z
            ifeq 13
        10: .line 304
            aload 0 /* c */
            invokevirtual java.lang.Class.getGenericInterfaces:()[Ljava/lang/reflect/Type;
            astore 4 /* interfaces */
        start local 4 // java.lang.reflect.Type[] interfaces
        11: .line 305
            aload 4 /* interfaces */
            arraylength
            ifle 13
        12: .line 306
            aload 4 /* interfaces */
            iload 1 /* index */
            aaload
            astore 3 /* superclass */
        end local 4 // java.lang.reflect.Type[] interfaces
        13: .line 309
      StackMap locals: java.lang.reflect.Type
      StackMap stack:
            aload 3 /* superclass */
            instanceof java.lang.reflect.ParameterizedType
            ifeq 18
        14: .line 310
            aload 3 /* superclass */
            checkcast java.lang.reflect.ParameterizedType
            invokeinterface java.lang.reflect.ParameterizedType.getActualTypeArguments:()[Ljava/lang/reflect/Type;
            astore 4 /* actualTypeArguments */
        start local 4 // java.lang.reflect.Type[] actualTypeArguments
        15: .line 311
            aload 4 /* actualTypeArguments */
            arraylength
            iload 1 /* index */
            if_icmple 16
            aload 4 /* actualTypeArguments */
            iload 1 /* index */
            aaload
            checkcast java.lang.Class
            goto 17
      StackMap locals: java.lang.reflect.Type[]
      StackMap stack:
        16: aconst_null
      StackMap locals:
      StackMap stack: java.lang.Class
        17: areturn
        end local 4 // java.lang.reflect.Type[] actualTypeArguments
        18: .line 312
      StackMap locals:
      StackMap stack:
            ldc Ljava/lang/Object;
            aload 3 /* superclass */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifne 20
        19: .line 313
            aload 3 /* superclass */
            checkcast java.lang.Class
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getParameterizedClass:(Ljava/lang/Class;)Ljava/lang/Class;
            areturn
        20: .line 315
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 3 // java.lang.reflect.Type superclass
        end local 2 // java.lang.reflect.TypeVariable[] typeVars
        end local 1 // int index
        end local 0 // java.lang.Class c
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0   21     0                    c  Ljava/lang/Class;
            0   21     1                index  I
            1   21     2             typeVars  [Ljava/lang/reflect/TypeVariable;
            3    8     3         typeVariable  Ljava/lang/reflect/TypeVariable;
            4    8     4               bounds  [Ljava/lang/reflect/Type;
            5    8     5                 type  Ljava/lang/reflect/Type;
            9   21     3           superclass  Ljava/lang/reflect/Type;
           11   13     4           interfaces  [Ljava/lang/reflect/Type;
           15   18     4  actualTypeArguments  [Ljava/lang/reflect/Type;
    MethodParameters:
       Name  Flags
      c      final
      index  final

  public static boolean isFieldParameterizedWithClass(java.lang.reflect.Field, java.lang.Class);
    descriptor: (Ljava/lang/reflect/Field;Ljava/lang/Class;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=7, args_size=2
        start local 0 // java.lang.reflect.Field field
        start local 1 // java.lang.Class c
         0: .line 330
            aload 0 /* field */
            invokevirtual java.lang.reflect.Field.getGenericType:()Ljava/lang/reflect/Type;
            instanceof java.lang.reflect.ParameterizedType
            ifeq 10
         1: .line 331
            aload 0 /* field */
            invokevirtual java.lang.reflect.Field.getGenericType:()Ljava/lang/reflect/Type;
            checkcast java.lang.reflect.ParameterizedType
            astore 2 /* genericType */
        start local 2 // java.lang.reflect.ParameterizedType genericType
         2: .line 332
            aload 2 /* genericType */
            invokeinterface java.lang.reflect.ParameterizedType.getActualTypeArguments:()[Ljava/lang/reflect/Type;
            dup
            astore 6
            arraylength
            istore 5
            iconst_0
            istore 4
            goto 9
      StackMap locals: java.lang.reflect.Field java.lang.Class java.lang.reflect.ParameterizedType top int int java.lang.reflect.Type[]
      StackMap stack:
         3: aload 6
            iload 4
            aaload
            astore 3 /* type */
        start local 3 // java.lang.reflect.Type type
         4: .line 333
            aload 3 /* type */
            aload 1 /* c */
            if_acmpne 6
         5: .line 334
            iconst_1
            ireturn
         6: .line 336
      StackMap locals: java.lang.reflect.Field java.lang.Class java.lang.reflect.ParameterizedType java.lang.reflect.Type int int java.lang.reflect.Type[]
      StackMap stack:
            aload 1 /* c */
            invokevirtual java.lang.Class.isInterface:()Z
            ifeq 8
            aload 3 /* type */
            checkcast java.lang.Class
            aload 1 /* c */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.implementsInterface:(Ljava/lang/Class;Ljava/lang/Class;)Z
            ifeq 8
         7: .line 337
            iconst_1
            ireturn
        end local 3 // java.lang.reflect.Type type
         8: .line 332
      StackMap locals: java.lang.reflect.Field java.lang.Class java.lang.reflect.ParameterizedType top int int java.lang.reflect.Type[]
      StackMap stack:
            iinc 4 1
      StackMap locals:
      StackMap stack:
         9: iload 4
            iload 5
            if_icmplt 3
        end local 2 // java.lang.reflect.ParameterizedType genericType
        10: .line 341
      StackMap locals: java.lang.reflect.Field java.lang.Class
      StackMap stack:
            iconst_0
            ireturn
        end local 1 // java.lang.Class c
        end local 0 // java.lang.reflect.Field field
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   11     0        field  Ljava/lang/reflect/Field;
            0   11     1            c  Ljava/lang/Class;
            2   10     2  genericType  Ljava/lang/reflect/ParameterizedType;
            4    8     3         type  Ljava/lang/reflect/Type;
    MethodParameters:
       Name  Flags
      field  final
      c      final

  public static boolean implementsInterface(java.lang.Class<?>, java.lang.Class<?>);
    descriptor: (Ljava/lang/Class;Ljava/lang/Class;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.lang.Class type
        start local 1 // java.lang.Class interfaceClass
         0: .line 352
            aload 1 /* interfaceClass */
            aload 0 /* type */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ireturn
        end local 1 // java.lang.Class interfaceClass
        end local 0 // java.lang.Class type
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    1     0            type  Ljava/lang/Class<*>;
            0    1     1  interfaceClass  Ljava/lang/Class<*>;
    Signature: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;)Z
    MethodParameters:
                Name  Flags
      type            final
      interfaceClass  final

  public static boolean isFieldParameterizedWithPropertyType(java.lang.reflect.Field);
    descriptor: (Ljava/lang/reflect/Field;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=6, args_size=1
        start local 0 // java.lang.reflect.Field field
         0: .line 363
            aload 0 /* field */
            invokevirtual java.lang.reflect.Field.getGenericType:()Ljava/lang/reflect/Type;
            instanceof java.lang.reflect.ParameterizedType
            ifeq 8
         1: .line 364
            aload 0 /* field */
            invokevirtual java.lang.reflect.Field.getGenericType:()Ljava/lang/reflect/Type;
            checkcast java.lang.reflect.ParameterizedType
            astore 1 /* genericType */
        start local 1 // java.lang.reflect.ParameterizedType genericType
         2: .line 365
            aload 1 /* genericType */
            invokeinterface java.lang.reflect.ParameterizedType.getActualTypeArguments:()[Ljava/lang/reflect/Type;
            dup
            astore 5
            arraylength
            istore 4
            iconst_0
            istore 3
            goto 7
      StackMap locals: java.lang.reflect.Field java.lang.reflect.ParameterizedType top int int java.lang.reflect.Type[]
      StackMap stack:
         3: aload 5
            iload 3
            aaload
            astore 2 /* type */
        start local 2 // java.lang.reflect.Type type
         4: .line 366
            aload 2 /* type */
            checkcast java.lang.Class
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.isPropertyType:(Ljava/lang/Class;)Z
            ifeq 6
         5: .line 367
            iconst_1
            ireturn
        end local 2 // java.lang.reflect.Type type
         6: .line 365
      StackMap locals:
      StackMap stack:
            iinc 3 1
      StackMap locals:
      StackMap stack:
         7: iload 3
            iload 4
            if_icmplt 3
        end local 1 // java.lang.reflect.ParameterizedType genericType
         8: .line 371
      StackMap locals: java.lang.reflect.Field
      StackMap stack:
            iconst_0
            ireturn
        end local 0 // java.lang.reflect.Field field
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    9     0        field  Ljava/lang/reflect/Field;
            2    8     1  genericType  Ljava/lang/reflect/ParameterizedType;
            4    6     2         type  Ljava/lang/reflect/Type;
    MethodParameters:
       Name  Flags
      field  final

  public static boolean isPropertyType(java.lang.Class);
    descriptor: (Ljava/lang/Class;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.Class type
         0: .line 381
            aload 0 /* type */
            ifnull 4
            aload 0 /* type */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.isPrimitiveLike:(Ljava/lang/Class;)Z
            ifne 3
            aload 0 /* type */
            ldc Lcom/mongodb/DBRef;
            if_acmpeq 3
            aload 0 /* type */
            ldc Ljava/util/regex/Pattern;
            if_acmpeq 3
         1: .line 382
            aload 0 /* type */
            ldc Lorg/bson/types/CodeWScope;
            if_acmpeq 3
            aload 0 /* type */
            ldc Lorg/bson/types/ObjectId;
            if_acmpeq 3
            aload 0 /* type */
            ldc Lorg/mongodb/morphia/Key;
            if_acmpeq 3
         2: .line 383
            aload 0 /* type */
            ldc Lcom/mongodb/DBObject;
            if_acmpeq 3
            aload 0 /* type */
            ldc Lcom/mongodb/BasicDBObject;
            if_acmpne 4
         3: .line 381
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         4: iconst_0
            ireturn
        end local 0 // java.lang.Class type
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  type  Ljava/lang/Class;
    MethodParameters:
      Name  Flags
      type  final

  public static boolean isPrimitiveLike(java.lang.Class);
    descriptor: (Ljava/lang/Class;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.Class type
         0: .line 394
            aload 0 /* type */
            ifnull 8
            aload 0 /* type */
            ldc Ljava/lang/String;
            if_acmpeq 7
            aload 0 /* type */
            getstatic java.lang.Character.TYPE:Ljava/lang/Class;
            if_acmpeq 7
         1: .line 395
            aload 0 /* type */
            ldc Ljava/lang/Character;
            if_acmpeq 7
            aload 0 /* type */
            getstatic java.lang.Short.TYPE:Ljava/lang/Class;
            if_acmpeq 7
            aload 0 /* type */
            ldc Ljava/lang/Short;
            if_acmpeq 7
         2: .line 396
            aload 0 /* type */
            ldc Ljava/lang/Integer;
            if_acmpeq 7
            aload 0 /* type */
            getstatic java.lang.Integer.TYPE:Ljava/lang/Class;
            if_acmpeq 7
            aload 0 /* type */
            ldc Ljava/lang/Long;
            if_acmpeq 7
            aload 0 /* type */
            getstatic java.lang.Long.TYPE:Ljava/lang/Class;
            if_acmpeq 7
         3: .line 397
            aload 0 /* type */
            ldc Ljava/lang/Double;
            if_acmpeq 7
            aload 0 /* type */
            getstatic java.lang.Double.TYPE:Ljava/lang/Class;
            if_acmpeq 7
            aload 0 /* type */
            getstatic java.lang.Float.TYPE:Ljava/lang/Class;
            if_acmpeq 7
            aload 0 /* type */
            ldc Ljava/lang/Float;
            if_acmpeq 7
         4: .line 398
            aload 0 /* type */
            ldc Ljava/lang/Boolean;
            if_acmpeq 7
            aload 0 /* type */
            getstatic java.lang.Boolean.TYPE:Ljava/lang/Class;
            if_acmpeq 7
            aload 0 /* type */
            ldc Ljava/lang/Byte;
            if_acmpeq 7
            aload 0 /* type */
            getstatic java.lang.Byte.TYPE:Ljava/lang/Class;
            if_acmpeq 7
         5: .line 399
            aload 0 /* type */
            ldc Ljava/util/Date;
            if_acmpeq 7
            aload 0 /* type */
            ldc Ljava/util/Locale;
            if_acmpeq 7
            aload 0 /* type */
            ldc Ljava/lang/Class;
            if_acmpeq 7
            aload 0 /* type */
            ldc Ljava/util/UUID;
            if_acmpeq 7
         6: .line 400
            aload 0 /* type */
            ldc Ljava/net/URI;
            if_acmpeq 7
            aload 0 /* type */
            invokevirtual java.lang.Class.isEnum:()Z
            ifeq 8
         7: .line 394
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         8: iconst_0
            ireturn
        end local 0 // java.lang.Class type
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0  type  Ljava/lang/Class;
    MethodParameters:
      Name  Flags
      type  final

  public static org.mongodb.morphia.annotations.Embedded getClassEmbeddedAnnotation(java.lang.Class);
    descriptor: (Ljava/lang/Class;)Lorg/mongodb/morphia/annotations/Embedded;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.Class c
         0: .line 411
            aload 0 /* c */
            ldc Lorg/mongodb/morphia/annotations/Embedded;
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getAnnotation:(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Object;
            checkcast org.mongodb.morphia.annotations.Embedded
            areturn
        end local 0 // java.lang.Class c
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0     c  Ljava/lang/Class;
    MethodParameters:
      Name  Flags
      c     final

  public static <T> T getAnnotation(java.lang.Class, java.lang.Class<T>);
    descriptor: (Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Object;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // java.lang.Class c
        start local 1 // java.lang.Class annotation
         0: .line 423
            aload 0 /* c */
            aload 1 /* annotation */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getAnnotations:(Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/List;
            astore 2 /* found */
        start local 2 // java.util.List found
         1: .line 424
            aload 2 /* found */
            ifnull 3
            aload 2 /* found */
            invokeinterface java.util.List.isEmpty:()Z
            ifne 3
         2: .line 425
            aload 2 /* found */
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            areturn
         3: .line 427
      StackMap locals: java.util.List
      StackMap stack:
            aconst_null
            areturn
        end local 2 // java.util.List found
        end local 1 // java.lang.Class annotation
        end local 0 // java.lang.Class c
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0           c  Ljava/lang/Class;
            0    4     1  annotation  Ljava/lang/Class<TT;>;
            1    4     2       found  Ljava/util/List<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class;Ljava/lang/Class<TT;>;)TT;
    MethodParameters:
            Name  Flags
      c           final
      annotation  final

  public static <T> java.util.List<T> getAnnotations(java.lang.Class, java.lang.Class<T>);
    descriptor: (Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/List;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=8, args_size=2
        start local 0 // java.lang.Class c
        start local 1 // java.lang.Class annotation
         0: .line 441
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 2 /* found */
        start local 2 // java.util.List found
         1: .line 443
            aload 0 /* c */
            aload 1 /* annotation */
            invokevirtual java.lang.Class.isAnnotationPresent:(Ljava/lang/Class;)Z
            ifeq 3
         2: .line 444
            aload 2 /* found */
            aload 0 /* c */
            aload 1 /* annotation */
            invokevirtual java.lang.Class.getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         3: .line 447
      StackMap locals: java.util.List
      StackMap stack:
            aload 0 /* c */
            invokevirtual java.lang.Class.getSuperclass:()Ljava/lang/Class;
            astore 3 /* parent */
        start local 3 // java.lang.Class parent
         4: .line 448
            goto 14
         5: .line 449
      StackMap locals: java.lang.Class
      StackMap stack:
            aload 3 /* parent */
            aload 1 /* annotation */
            invokevirtual java.lang.Class.isAnnotationPresent:(Ljava/lang/Class;)Z
            ifeq 7
         6: .line 450
            aload 2 /* found */
            aload 3 /* parent */
            aload 1 /* annotation */
            invokevirtual java.lang.Class.getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         7: .line 454
      StackMap locals:
      StackMap stack:
            aload 3 /* parent */
            invokevirtual java.lang.Class.getInterfaces:()[Ljava/lang/Class;
            dup
            astore 7
            arraylength
            istore 6
            iconst_0
            istore 5
            goto 12
      StackMap locals: java.lang.Class java.lang.Class java.util.List java.lang.Class top int int java.lang.Class[]
      StackMap stack:
         8: aload 7
            iload 5
            aaload
            astore 4 /* interfaceClass */
        start local 4 // java.lang.Class interfaceClass
         9: .line 455
            aload 4 /* interfaceClass */
            aload 1 /* annotation */
            invokevirtual java.lang.Class.isAnnotationPresent:(Ljava/lang/Class;)Z
            ifeq 11
        10: .line 456
            aload 2 /* found */
            aload 4 /* interfaceClass */
            aload 1 /* annotation */
            invokevirtual java.lang.Class.getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 4 // java.lang.Class interfaceClass
        11: .line 454
      StackMap locals:
      StackMap stack:
            iinc 5 1
      StackMap locals:
      StackMap stack:
        12: iload 5
            iload 6
            if_icmplt 8
        13: .line 460
            aload 3 /* parent */
            invokevirtual java.lang.Class.getSuperclass:()Ljava/lang/Class;
            astore 3 /* parent */
        14: .line 448
      StackMap locals: java.lang.Class java.lang.Class java.util.List java.lang.Class
      StackMap stack:
            aload 3 /* parent */
            ifnull 15
            aload 3 /* parent */
            ldc Ljava/lang/Object;
            if_acmpne 5
        15: .line 464
      StackMap locals:
      StackMap stack:
            aload 0 /* c */
            invokevirtual java.lang.Class.getInterfaces:()[Ljava/lang/Class;
            dup
            astore 7
            arraylength
            istore 6
            iconst_0
            istore 5
            goto 20
      StackMap locals: java.lang.Class java.lang.Class java.util.List java.lang.Class top int int java.lang.Class[]
      StackMap stack:
        16: aload 7
            iload 5
            aaload
            astore 4 /* interfaceClass */
        start local 4 // java.lang.Class interfaceClass
        17: .line 465
            aload 4 /* interfaceClass */
            aload 1 /* annotation */
            invokevirtual java.lang.Class.isAnnotationPresent:(Ljava/lang/Class;)Z
            ifeq 19
        18: .line 466
            aload 2 /* found */
            aload 4 /* interfaceClass */
            aload 1 /* annotation */
            invokevirtual java.lang.Class.getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 4 // java.lang.Class interfaceClass
        19: .line 464
      StackMap locals:
      StackMap stack:
            iinc 5 1
      StackMap locals:
      StackMap stack:
        20: iload 5
            iload 6
            if_icmplt 16
        21: .line 470
            aload 2 /* found */
            areturn
        end local 3 // java.lang.Class parent
        end local 2 // java.util.List found
        end local 1 // java.lang.Class annotation
        end local 0 // java.lang.Class c
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   22     0               c  Ljava/lang/Class;
            0   22     1      annotation  Ljava/lang/Class<TT;>;
            1   22     2           found  Ljava/util/List<TT;>;
            4   22     3          parent  Ljava/lang/Class;
            9   11     4  interfaceClass  Ljava/lang/Class;
           17   19     4  interfaceClass  Ljava/lang/Class;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class;Ljava/lang/Class<TT;>;)Ljava/util/List<TT;>;
    MethodParameters:
            Name  Flags
      c           final
      annotation  final

  public static org.mongodb.morphia.annotations.Entity getClassEntityAnnotation(java.lang.Class);
    descriptor: (Ljava/lang/Class;)Lorg/mongodb/morphia/annotations/Entity;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.Class c
         0: .line 480
            aload 0 /* c */
            ldc Lorg/mongodb/morphia/annotations/Entity;
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getAnnotation:(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Object;
            checkcast org.mongodb.morphia.annotations.Entity
            areturn
        end local 0 // java.lang.Class c
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0     c  Ljava/lang/Class;
    MethodParameters:
      Name  Flags
      c     final

  public static java.util.Set<java.lang.Class<?>> getClasses(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/util/Set;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String packageName
         0: .line 492
            aload 0 /* packageName */
            iconst_0
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getClasses:(Ljava/lang/String;Z)Ljava/util/Set;
            areturn
        end local 0 // java.lang.String packageName
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    1     0  packageName  Ljava/lang/String;
    Exceptions:
      throws java.io.IOException, java.lang.ClassNotFoundException
    Signature: (Ljava/lang/String;)Ljava/util/Set<Ljava/lang/Class<*>;>;
    MethodParameters:
             Name  Flags
      packageName  final

  public static java.util.Set<java.lang.Class<?>> getClasses(java.lang.String, boolean);
    descriptor: (Ljava/lang/String;Z)Ljava/util/Set;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // java.lang.String packageName
        start local 1 // boolean mapSubPackages
         0: .line 505
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
         1: .line 506
            invokevirtual java.lang.Thread.getContextClassLoader:()Ljava/lang/ClassLoader;
         2: .line 505
            astore 2 /* loader */
        start local 2 // java.lang.ClassLoader loader
         3: .line 507
            aload 2 /* loader */
            aload 0 /* packageName */
            iload 1 /* mapSubPackages */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getClasses:(Ljava/lang/ClassLoader;Ljava/lang/String;Z)Ljava/util/Set;
            areturn
        end local 2 // java.lang.ClassLoader loader
        end local 1 // boolean mapSubPackages
        end local 0 // java.lang.String packageName
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    4     0     packageName  Ljava/lang/String;
            0    4     1  mapSubPackages  Z
            3    4     2          loader  Ljava/lang/ClassLoader;
    Exceptions:
      throws java.io.IOException, java.lang.ClassNotFoundException
    Signature: (Ljava/lang/String;Z)Ljava/util/Set<Ljava/lang/Class<*>;>;
    MethodParameters:
                Name  Flags
      packageName     final
      mapSubPackages  final

  public static java.util.Set<java.lang.Class<?>> getClasses(java.lang.ClassLoader, java.lang.String);
    descriptor: (Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/util/Set;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // java.lang.ClassLoader loader
        start local 1 // java.lang.String packageName
         0: .line 520
            aload 0 /* loader */
            aload 1 /* packageName */
            iconst_0
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getClasses:(Ljava/lang/ClassLoader;Ljava/lang/String;Z)Ljava/util/Set;
            areturn
        end local 1 // java.lang.String packageName
        end local 0 // java.lang.ClassLoader loader
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    1     0       loader  Ljava/lang/ClassLoader;
            0    1     1  packageName  Ljava/lang/String;
    Exceptions:
      throws java.io.IOException, java.lang.ClassNotFoundException
    Signature: (Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/util/Set<Ljava/lang/Class<*>;>;
    MethodParameters:
             Name  Flags
      loader       final
      packageName  final

  public static java.util.Set<java.lang.Class<?>> getClasses(java.lang.ClassLoader, java.lang.String, boolean);
    descriptor: (Ljava/lang/ClassLoader;Ljava/lang/String;Z)Ljava/util/Set;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=8, args_size=3
        start local 0 // java.lang.ClassLoader loader
        start local 1 // java.lang.String packageName
        start local 2 // boolean mapSubPackages
         0: .line 535
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            astore 3 /* classes */
        start local 3 // java.util.Set classes
         1: .line 536
            aload 1 /* packageName */
            bipush 46
            bipush 47
            invokevirtual java.lang.String.replace:(CC)Ljava/lang/String;
            astore 4 /* path */
        start local 4 // java.lang.String path
         2: .line 537
            aload 0 /* loader */
            aload 4 /* path */
            invokevirtual java.lang.ClassLoader.getResources:(Ljava/lang/String;)Ljava/util/Enumeration;
            astore 5 /* resources */
        start local 5 // java.util.Enumeration resources
         3: .line 538
            aload 5 /* resources */
            ifnull 23
         4: .line 539
            goto 22
         5: .line 540
      StackMap locals: java.util.Set java.lang.String java.util.Enumeration
      StackMap stack:
            aload 5 /* resources */
            invokeinterface java.util.Enumeration.nextElement:()Ljava/lang/Object;
            checkcast java.net.URL
         6: .line 541
            invokevirtual java.net.URL.getFile:()Ljava/lang/String;
         7: .line 540
            astore 6 /* filePath */
        start local 6 // java.lang.String filePath
         8: .line 543
            aload 6 /* filePath */
            ldc "%20"
            invokevirtual java.lang.String.indexOf:(Ljava/lang/String;)I
            ifle 10
         9: .line 544
            aload 6 /* filePath */
            ldc "%20"
            ldc " "
            invokevirtual java.lang.String.replaceAll:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
            astore 6 /* filePath */
        10: .line 547
      StackMap locals: java.lang.String
      StackMap stack:
            aload 6 /* filePath */
            ldc "%23"
            invokevirtual java.lang.String.indexOf:(Ljava/lang/String;)I
            ifle 12
        11: .line 548
            aload 6 /* filePath */
            ldc "%23"
            ldc "#"
            invokevirtual java.lang.String.replaceAll:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
            astore 6 /* filePath */
        12: .line 551
      StackMap locals:
      StackMap stack:
            aload 6 /* filePath */
            ifnull 22
        13: .line 552
            aload 6 /* filePath */
            ldc "!"
            invokevirtual java.lang.String.indexOf:(Ljava/lang/String;)I
            ifle 21
            aload 6 /* filePath */
            ldc ".jar"
            invokevirtual java.lang.String.indexOf:(Ljava/lang/String;)I
            ifle 21
        14: .line 553
            aload 6 /* filePath */
            iconst_0
            aload 6 /* filePath */
            ldc "!"
            invokevirtual java.lang.String.indexOf:(Ljava/lang/String;)I
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
        15: .line 554
            aload 6 /* filePath */
            ldc ":"
            invokevirtual java.lang.String.indexOf:(Ljava/lang/String;)I
            iconst_1
            iadd
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
        16: .line 553
            astore 7 /* jarPath */
        start local 7 // java.lang.String jarPath
        17: .line 556
            aload 7 /* jarPath */
            ldc ":"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 19
        18: .line 557
            aload 7 /* jarPath */
            iconst_1
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
            astore 7 /* jarPath */
        19: .line 559
      StackMap locals: java.lang.String
      StackMap stack:
            aload 3 /* classes */
            aload 0 /* loader */
            aload 7 /* jarPath */
            aload 4 /* path */
            iload 2 /* mapSubPackages */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getFromJARFile:(Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Z)Ljava/util/Set;
            invokeinterface java.util.Set.addAll:(Ljava/util/Collection;)Z
            pop
        end local 7 // java.lang.String jarPath
        20: .line 560
            goto 22
        21: .line 561
      StackMap locals:
      StackMap stack:
            aload 3 /* classes */
            aload 0 /* loader */
            new java.io.File
            dup
            aload 6 /* filePath */
            invokespecial java.io.File.<init>:(Ljava/lang/String;)V
            aload 1 /* packageName */
            iload 2 /* mapSubPackages */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getFromDirectory:(Ljava/lang/ClassLoader;Ljava/io/File;Ljava/lang/String;Z)Ljava/util/Set;
            invokeinterface java.util.Set.addAll:(Ljava/util/Collection;)Z
            pop
        end local 6 // java.lang.String filePath
        22: .line 539
      StackMap locals:
      StackMap stack:
            aload 5 /* resources */
            invokeinterface java.util.Enumeration.hasMoreElements:()Z
            ifne 5
        23: .line 566
      StackMap locals:
      StackMap stack:
            aload 3 /* classes */
            areturn
        end local 5 // java.util.Enumeration resources
        end local 4 // java.lang.String path
        end local 3 // java.util.Set classes
        end local 2 // boolean mapSubPackages
        end local 1 // java.lang.String packageName
        end local 0 // java.lang.ClassLoader loader
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   24     0          loader  Ljava/lang/ClassLoader;
            0   24     1     packageName  Ljava/lang/String;
            0   24     2  mapSubPackages  Z
            1   24     3         classes  Ljava/util/Set<Ljava/lang/Class<*>;>;
            2   24     4            path  Ljava/lang/String;
            3   24     5       resources  Ljava/util/Enumeration<Ljava/net/URL;>;
            8   22     6        filePath  Ljava/lang/String;
           17   20     7         jarPath  Ljava/lang/String;
    Exceptions:
      throws java.io.IOException, java.lang.ClassNotFoundException
    Signature: (Ljava/lang/ClassLoader;Ljava/lang/String;Z)Ljava/util/Set<Ljava/lang/Class<*>;>;
    MethodParameters:
                Name  Flags
      loader          final
      packageName     final
      mapSubPackages  final

  public static java.util.Set<java.lang.Class<?>> getFromJARFile(java.lang.ClassLoader, java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Set;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // java.lang.ClassLoader loader
        start local 1 // java.lang.String jar
        start local 2 // java.lang.String packageName
         0: .line 581
            aload 0 /* loader */
            aload 1 /* jar */
            aload 2 /* packageName */
            iconst_0
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getFromJARFile:(Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Z)Ljava/util/Set;
            areturn
        end local 2 // java.lang.String packageName
        end local 1 // java.lang.String jar
        end local 0 // java.lang.ClassLoader loader
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    1     0       loader  Ljava/lang/ClassLoader;
            0    1     1          jar  Ljava/lang/String;
            0    1     2  packageName  Ljava/lang/String;
    Exceptions:
      throws java.io.IOException, java.lang.ClassNotFoundException
    Signature: (Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Set<Ljava/lang/Class<*>;>;
    MethodParameters:
             Name  Flags
      loader       final
      jar          final
      packageName  final

  public static java.util.Set<java.lang.Class<?>> getFromJARFile(java.lang.ClassLoader, java.lang.String, java.lang.String, boolean);
    descriptor: (Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Z)Ljava/util/Set;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=10, args_size=4
        start local 0 // java.lang.ClassLoader loader
        start local 1 // java.lang.String jar
        start local 2 // java.lang.String packageName
        start local 3 // boolean mapSubPackages
         0: .line 597
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            astore 4 /* classes */
        start local 4 // java.util.Set classes
         1: .line 598
            new java.util.jar.JarInputStream
            dup
            new java.io.FileInputStream
            dup
            aload 1 /* jar */
            invokespecial java.io.FileInputStream.<init>:(Ljava/lang/String;)V
            invokespecial java.util.jar.JarInputStream.<init>:(Ljava/io/InputStream;)V
            astore 5 /* jarFile */
        start local 5 // java.util.jar.JarInputStream jarFile
         2: .line 602
      StackMap locals: java.util.Set java.util.jar.JarInputStream
      StackMap stack:
            aload 5 /* jarFile */
            invokevirtual java.util.jar.JarInputStream.getNextJarEntry:()Ljava/util/jar/JarEntry;
            astore 6 /* jarEntry */
        start local 6 // java.util.jar.JarEntry jarEntry
         3: .line 603
            aload 6 /* jarEntry */
            ifnull 10
         4: .line 604
            aload 6 /* jarEntry */
            invokevirtual java.util.jar.JarEntry.getName:()Ljava/lang/String;
            astore 7 /* className */
        start local 7 // java.lang.String className
         5: .line 605
            aload 7 /* className */
            ldc ".class"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 10
         6: .line 606
            aload 7 /* className */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getPackageName:(Ljava/lang/String;)Ljava/lang/String;
            astore 8 /* classPackageName */
        start local 8 // java.lang.String classPackageName
         7: .line 607
            aload 8 /* classPackageName */
            aload 2 /* packageName */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 8
            iload 3 /* mapSubPackages */
            ifeq 10
            aload 8 /* classPackageName */
            aload 2 /* packageName */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.isSubPackage:(Ljava/lang/String;Ljava/lang/String;)Z
            ifeq 10
         8: .line 608
      StackMap locals: java.util.jar.JarEntry java.lang.String java.lang.String
      StackMap stack:
            aload 7 /* className */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.stripFilenameExtension:(Ljava/lang/String;)Ljava/lang/String;
            astore 7 /* className */
         9: .line 609
            aload 4 /* classes */
            aload 7 /* className */
            bipush 47
            bipush 46
            invokevirtual java.lang.String.replace:(CC)Ljava/lang/String;
            iconst_1
            aload 0 /* loader */
            invokestatic java.lang.Class.forName:(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        end local 8 // java.lang.String classPackageName
        end local 7 // java.lang.String className
        10: .line 613
      StackMap locals:
      StackMap stack:
            aload 6 /* jarEntry */
            ifnonnull 2
        end local 6 // java.util.jar.JarEntry jarEntry
        11: .line 614
            goto 15
      StackMap locals: java.lang.ClassLoader java.lang.String java.lang.String int java.util.Set java.util.jar.JarInputStream
      StackMap stack: java.lang.Throwable
        12: astore 9
        13: .line 615
            aload 5 /* jarFile */
            invokevirtual java.util.jar.JarInputStream.close:()V
        14: .line 616
            aload 9
            athrow
        15: .line 615
      StackMap locals:
      StackMap stack:
            aload 5 /* jarFile */
            invokevirtual java.util.jar.JarInputStream.close:()V
        16: .line 617
            aload 4 /* classes */
            areturn
        end local 5 // java.util.jar.JarInputStream jarFile
        end local 4 // java.util.Set classes
        end local 3 // boolean mapSubPackages
        end local 2 // java.lang.String packageName
        end local 1 // java.lang.String jar
        end local 0 // java.lang.ClassLoader loader
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   17     0            loader  Ljava/lang/ClassLoader;
            0   17     1               jar  Ljava/lang/String;
            0   17     2       packageName  Ljava/lang/String;
            0   17     3    mapSubPackages  Z
            1   17     4           classes  Ljava/util/Set<Ljava/lang/Class<*>;>;
            2   17     5           jarFile  Ljava/util/jar/JarInputStream;
            3   11     6          jarEntry  Ljava/util/jar/JarEntry;
            5   10     7         className  Ljava/lang/String;
            7   10     8  classPackageName  Ljava/lang/String;
      Exception table:
        from    to  target  type
           2    12      12  any
    Exceptions:
      throws java.io.IOException, java.lang.ClassNotFoundException
    Signature: (Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Z)Ljava/util/Set<Ljava/lang/Class<*>;>;
    MethodParameters:
                Name  Flags
      loader          final
      jar             final
      packageName     final
      mapSubPackages  final

  public static java.util.Set<java.lang.Class<?>> getFromDirectory(java.lang.ClassLoader, java.io.File, java.lang.String);
    descriptor: (Ljava/lang/ClassLoader;Ljava/io/File;Ljava/lang/String;)Ljava/util/Set;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // java.lang.ClassLoader loader
        start local 1 // java.io.File directory
        start local 2 // java.lang.String packageName
         0: .line 631
            aload 0 /* loader */
            aload 1 /* directory */
            aload 2 /* packageName */
            iconst_0
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getFromDirectory:(Ljava/lang/ClassLoader;Ljava/io/File;Ljava/lang/String;Z)Ljava/util/Set;
            areturn
        end local 2 // java.lang.String packageName
        end local 1 // java.io.File directory
        end local 0 // java.lang.ClassLoader loader
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    1     0       loader  Ljava/lang/ClassLoader;
            0    1     1    directory  Ljava/io/File;
            0    1     2  packageName  Ljava/lang/String;
    Exceptions:
      throws java.lang.ClassNotFoundException
    Signature: (Ljava/lang/ClassLoader;Ljava/io/File;Ljava/lang/String;)Ljava/util/Set<Ljava/lang/Class<*>;>;
    MethodParameters:
             Name  Flags
      loader       final
      directory    final
      packageName  final

  public static java.util.Set<java.lang.Class<?>> getFromDirectory(java.lang.ClassLoader, java.io.File, java.lang.String, boolean);
    descriptor: (Ljava/lang/ClassLoader;Ljava/io/File;Ljava/lang/String;Z)Ljava/util/Set;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=9, args_size=4
        start local 0 // java.lang.ClassLoader loader
        start local 1 // java.io.File directory
        start local 2 // java.lang.String packageName
        start local 3 // boolean mapSubPackages
         0: .line 646
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            astore 4 /* classes */
        start local 4 // java.util.Set classes
         1: .line 647
            aload 1 /* directory */
            invokevirtual java.io.File.exists:()Z
            ifeq 9
         2: .line 648
            aload 1 /* directory */
            aload 2 /* packageName */
            iload 3 /* mapSubPackages */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getFileNames:(Ljava/io/File;Ljava/lang/String;Z)Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 6
            goto 8
      StackMap locals: java.lang.ClassLoader java.io.File java.lang.String int java.util.Set top java.util.Iterator
      StackMap stack:
         3: aload 6
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 5 /* file */
        start local 5 // java.lang.String file
         4: .line 649
            aload 5 /* file */
            ldc ".class"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 8
         5: .line 650
            aload 5 /* file */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.stripFilenameExtension:(Ljava/lang/String;)Ljava/lang/String;
            astore 7 /* name */
        start local 7 // java.lang.String name
         6: .line 651
            aload 7 /* name */
            iconst_1
            aload 0 /* loader */
            invokestatic java.lang.Class.forName:(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;
            astore 8 /* clazz */
        start local 8 // java.lang.Class clazz
         7: .line 652
            aload 4 /* classes */
            aload 8 /* clazz */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        end local 8 // java.lang.Class clazz
        end local 7 // java.lang.String name
        end local 5 // java.lang.String file
         8: .line 648
      StackMap locals:
      StackMap stack:
            aload 6
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
         9: .line 656
      StackMap locals: java.lang.ClassLoader java.io.File java.lang.String int java.util.Set
      StackMap stack:
            aload 4 /* classes */
            areturn
        end local 4 // java.util.Set classes
        end local 3 // boolean mapSubPackages
        end local 2 // java.lang.String packageName
        end local 1 // java.io.File directory
        end local 0 // java.lang.ClassLoader loader
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   10     0          loader  Ljava/lang/ClassLoader;
            0   10     1       directory  Ljava/io/File;
            0   10     2     packageName  Ljava/lang/String;
            0   10     3  mapSubPackages  Z
            1   10     4         classes  Ljava/util/Set<Ljava/lang/Class<*>;>;
            4    8     5            file  Ljava/lang/String;
            6    8     7            name  Ljava/lang/String;
            7    8     8           clazz  Ljava/lang/Class<*>;
    Exceptions:
      throws java.lang.ClassNotFoundException
    Signature: (Ljava/lang/ClassLoader;Ljava/io/File;Ljava/lang/String;Z)Ljava/util/Set<Ljava/lang/Class<*>;>;
    MethodParameters:
                Name  Flags
      loader          final
      directory       final
      packageName     final
      mapSubPackages  final

  private static java.util.Set<java.lang.String> getFileNames(java.io.File, java.lang.String, boolean);
    descriptor: (Ljava/io/File;Ljava/lang/String;Z)Ljava/util/Set;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=8, args_size=3
        start local 0 // java.io.File directory
        start local 1 // java.lang.String packageName
        start local 2 // boolean mapSubPackages
         0: .line 660
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            astore 3 /* fileNames */
        start local 3 // java.util.Set fileNames
         1: .line 661
            aload 0 /* directory */
            invokevirtual java.io.File.listFiles:()[Ljava/io/File;
            dup
            astore 7
            arraylength
            istore 6
            iconst_0
            istore 5
            goto 9
      StackMap locals: java.io.File java.lang.String int java.util.Set top int int java.io.File[]
      StackMap stack:
         2: aload 7
            iload 5
            aaload
            astore 4 /* file */
        start local 4 // java.io.File file
         3: .line 662
            aload 4 /* file */
            invokevirtual java.io.File.isFile:()Z
            ifeq 6
         4: .line 663
            aload 3 /* fileNames */
            new java.lang.StringBuilder
            dup
            aload 1 /* packageName */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            bipush 46
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            aload 4 /* file */
            invokevirtual java.io.File.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
         5: .line 664
            goto 8
      StackMap locals: java.io.File java.lang.String int java.util.Set java.io.File int int java.io.File[]
      StackMap stack:
         6: iload 2 /* mapSubPackages */
            ifeq 8
         7: .line 665
            aload 3 /* fileNames */
            aload 4 /* file */
            new java.lang.StringBuilder
            dup
            aload 1 /* packageName */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            bipush 46
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            aload 4 /* file */
            invokevirtual java.io.File.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            iconst_1
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getFileNames:(Ljava/io/File;Ljava/lang/String;Z)Ljava/util/Set;
            invokeinterface java.util.Set.addAll:(Ljava/util/Collection;)Z
            pop
        end local 4 // java.io.File file
         8: .line 661
      StackMap locals: java.io.File java.lang.String int java.util.Set top int int java.io.File[]
      StackMap stack:
            iinc 5 1
      StackMap locals:
      StackMap stack:
         9: iload 5
            iload 6
            if_icmplt 2
        10: .line 668
            aload 3 /* fileNames */
            areturn
        end local 3 // java.util.Set fileNames
        end local 2 // boolean mapSubPackages
        end local 1 // java.lang.String packageName
        end local 0 // java.io.File directory
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   11     0       directory  Ljava/io/File;
            0   11     1     packageName  Ljava/lang/String;
            0   11     2  mapSubPackages  Z
            1   11     3       fileNames  Ljava/util/Set<Ljava/lang/String;>;
            3    8     4            file  Ljava/io/File;
    Signature: (Ljava/io/File;Ljava/lang/String;Z)Ljava/util/Set<Ljava/lang/String;>;
    MethodParameters:
                Name  Flags
      directory       final
      packageName     final
      mapSubPackages  final

  private static java.lang.String getPackageName(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // java.lang.String filename
         0: .line 672
            aload 0 /* filename */
            ldc "/"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 1
            aload 0 /* filename */
            iconst_0
            aload 0 /* filename */
            bipush 47
            invokevirtual java.lang.String.lastIndexOf:(I)I
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            goto 2
      StackMap locals:
      StackMap stack:
         1: aload 0 /* filename */
      StackMap locals:
      StackMap stack: java.lang.String
         2: areturn
        end local 0 // java.lang.String filename
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    3     0  filename  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      filename  final

  private static java.lang.String stripFilenameExtension(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // java.lang.String filename
         0: .line 676
            aload 0 /* filename */
            bipush 46
            invokevirtual java.lang.String.indexOf:(I)I
            iconst_m1
            if_icmpeq 2
         1: .line 677
            aload 0 /* filename */
            iconst_0
            aload 0 /* filename */
            bipush 46
            invokevirtual java.lang.String.lastIndexOf:(I)I
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            areturn
         2: .line 679
      StackMap locals:
      StackMap stack:
            aload 0 /* filename */
            areturn
        end local 0 // java.lang.String filename
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    3     0  filename  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      filename  final

  private static boolean isSubPackage(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.lang.String fullPackageName
        start local 1 // java.lang.String parentPackageName
         0: .line 684
            aload 0 /* fullPackageName */
            aload 1 /* parentPackageName */
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ireturn
        end local 1 // java.lang.String parentPackageName
        end local 0 // java.lang.String fullPackageName
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    1     0    fullPackageName  Ljava/lang/String;
            0    1     1  parentPackageName  Ljava/lang/String;
    MethodParameters:
                   Name  Flags
      fullPackageName    final
      parentPackageName  final

  public static <T> java.util.List<T> iterToList(java.lang.Iterable<T>);
    descriptor: (Ljava/lang/Iterable;)Ljava/util/List;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // java.lang.Iterable it
         0: .line 695
            aload 0 /* it */
            instanceof java.util.List
            ifeq 2
         1: .line 696
            aload 0 /* it */
            checkcast java.util.List
            areturn
         2: .line 698
      StackMap locals:
      StackMap stack:
            aload 0 /* it */
            ifnonnull 4
         3: .line 699
            aconst_null
            areturn
         4: .line 702
      StackMap locals:
      StackMap stack:
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 1 /* ar */
        start local 1 // java.util.List ar
         5: .line 703
            aload 0 /* it */
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 3
            goto 8
      StackMap locals: java.lang.Iterable java.util.List top java.util.Iterator
      StackMap stack:
         6: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.Object
            astore 2 /* o */
        start local 2 // java.lang.Object o
         7: .line 704
            aload 1 /* ar */
            aload 2 /* o */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 2 // java.lang.Object o
         8: .line 703
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 6
         9: .line 707
            aload 1 /* ar */
            areturn
        end local 1 // java.util.List ar
        end local 0 // java.lang.Iterable it
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0    it  Ljava/lang/Iterable<TT;>;
            5   10     1    ar  Ljava/util/List<TT;>;
            7    8     2     o  TT;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Iterable<TT;>;)Ljava/util/List<TT;>;
    MethodParameters:
      Name  Flags
      it    final

  public static  convertToArray(java.lang.Class, java.util.List<?>);
    descriptor: (Ljava/lang/Class;Ljava/util/List;)Ljava/lang/Object;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // java.lang.Class type
        start local 1 // java.util.List values
         0: .line 718
            aload 0 /* type */
            aload 1 /* values */
            invokeinterface java.util.List.size:()I
            invokestatic java.lang.reflect.Array.newInstance:(Ljava/lang/Class;I)Ljava/lang/Object;
            astore 2 /* exampleArray */
        start local 2 // java.lang.Object exampleArray
         1: .line 720
            aload 1 /* values */
            aload 2 /* exampleArray */
            checkcast java.lang.Object[]
            invokeinterface java.util.List.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
         2: areturn
         3: .line 721
      StackMap locals: java.lang.Class java.util.List java.lang.Object
      StackMap stack: java.lang.ClassCastException
            pop
         4: .line 722
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         5: goto 8
         6: .line 723
      StackMap locals: int
      StackMap stack:
            aload 2 /* exampleArray */
            iload 3 /* i */
            aload 1 /* values */
            iload 3 /* i */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            invokestatic java.lang.reflect.Array.set:(Ljava/lang/Object;ILjava/lang/Object;)V
         7: .line 722
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
         8: iload 3 /* i */
            aload 1 /* values */
            invokeinterface java.util.List.size:()I
            if_icmplt 6
        end local 3 // int i
         9: .line 725
            aload 2 /* exampleArray */
            areturn
        end local 2 // java.lang.Object exampleArray
        end local 1 // java.util.List values
        end local 0 // java.lang.Class type
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   10     0          type  Ljava/lang/Class;
            0   10     1        values  Ljava/util/List<*>;
            1   10     2  exampleArray  Ljava/lang/Object;
            5    9     3             i  I
      Exception table:
        from    to  target  type
           1     2       3  Class java.lang.ClassCastException
    Signature: (Ljava/lang/Class;Ljava/util/List<*>;)Ljava/lang/Object;
    MethodParameters:
        Name  Flags
      type    final
      values  final

  public static java.lang.Class<?> getClass(java.lang.reflect.Type);
    descriptor: (Ljava/lang/reflect/Type;)Ljava/lang/Class;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // java.lang.reflect.Type type
         0: .line 737
            aload 0 /* type */
            instanceof java.lang.Class
            ifeq 2
         1: .line 738
            aload 0 /* type */
            checkcast java.lang.Class
            areturn
         2: .line 739
      StackMap locals:
      StackMap stack:
            aload 0 /* type */
            instanceof java.lang.reflect.ParameterizedType
            ifeq 4
         3: .line 740
            aload 0 /* type */
            checkcast java.lang.reflect.ParameterizedType
            invokeinterface java.lang.reflect.ParameterizedType.getRawType:()Ljava/lang/reflect/Type;
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getClass:(Ljava/lang/reflect/Type;)Ljava/lang/Class;
            areturn
         4: .line 741
      StackMap locals:
      StackMap stack:
            aload 0 /* type */
            instanceof java.lang.reflect.GenericArrayType
            ifeq 12
         5: .line 742
            aload 0 /* type */
            checkcast java.lang.reflect.GenericArrayType
            invokeinterface java.lang.reflect.GenericArrayType.getGenericComponentType:()Ljava/lang/reflect/Type;
            astore 1 /* componentType */
        start local 1 // java.lang.reflect.Type componentType
         6: .line 743
            aload 1 /* componentType */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getClass:(Ljava/lang/reflect/Type;)Ljava/lang/Class;
            astore 2 /* componentClass */
        start local 2 // java.lang.Class componentClass
         7: .line 744
            aload 2 /* componentClass */
            ifnull 9
         8: .line 745
            aload 2 /* componentClass */
            iconst_0
            invokestatic java.lang.reflect.Array.newInstance:(Ljava/lang/Class;I)Ljava/lang/Object;
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            areturn
         9: .line 747
      StackMap locals: java.lang.reflect.Type java.lang.Class
      StackMap stack:
            getstatic org.mongodb.morphia.utils.ReflectionUtils.LOG:Lorg/mongodb/morphia/logging/Logger;
            ldc "************ ReflectionUtils.getClass 1st else"
            invokeinterface org.mongodb.morphia.logging.Logger.debug:(Ljava/lang/String;)V
        10: .line 748
            getstatic org.mongodb.morphia.utils.ReflectionUtils.LOG:Lorg/mongodb/morphia/logging/Logger;
            new java.lang.StringBuilder
            dup
            ldc "************ type = "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* type */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.mongodb.morphia.logging.Logger.debug:(Ljava/lang/String;)V
        11: .line 749
            aconst_null
            areturn
        end local 2 // java.lang.Class componentClass
        end local 1 // java.lang.reflect.Type componentType
        12: .line 752
      StackMap locals:
      StackMap stack:
            getstatic org.mongodb.morphia.utils.ReflectionUtils.LOG:Lorg/mongodb/morphia/logging/Logger;
            ldc "************ ReflectionUtils.getClass final else"
            invokeinterface org.mongodb.morphia.logging.Logger.debug:(Ljava/lang/String;)V
        13: .line 753
            getstatic org.mongodb.morphia.utils.ReflectionUtils.LOG:Lorg/mongodb/morphia/logging/Logger;
            new java.lang.StringBuilder
            dup
            ldc "************ type = "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* type */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.mongodb.morphia.logging.Logger.debug:(Ljava/lang/String;)V
        14: .line 754
            aconst_null
            areturn
        end local 0 // java.lang.reflect.Type type
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   15     0            type  Ljava/lang/reflect/Type;
            6   12     1   componentType  Ljava/lang/reflect/Type;
            7   12     2  componentClass  Ljava/lang/Class<*>;
    Signature: (Ljava/lang/reflect/Type;)Ljava/lang/Class<*>;
    MethodParameters:
      Name  Flags
      type  final

  public static <T> java.util.List<java.lang.Class<?>> getTypeArguments(java.lang.Class<T>, java.lang.Class<? extends T>);
    descriptor: (Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/List;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=10, args_size=2
        start local 0 // java.lang.Class baseClass
        start local 1 // java.lang.Class childClass
         0: .line 768
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 2 /* resolvedTypes */
        start local 2 // java.util.Map resolvedTypes
         1: .line 769
            aload 1 /* childClass */
            astore 3 /* type */
        start local 3 // java.lang.reflect.Type type
         2: .line 771
            goto 17
         3: .line 772
      StackMap locals: java.util.Map java.lang.reflect.Type
      StackMap stack:
            aload 3 /* type */
            instanceof java.lang.Class
            ifeq 6
         4: .line 775
            aload 3 /* type */
            checkcast java.lang.Class
            invokevirtual java.lang.Class.getGenericSuperclass:()Ljava/lang/reflect/Type;
            astore 3 /* type */
         5: .line 776
            goto 17
         6: .line 777
      StackMap locals:
      StackMap stack:
            aload 3 /* type */
            checkcast java.lang.reflect.ParameterizedType
            astore 4 /* parameterizedType */
        start local 4 // java.lang.reflect.ParameterizedType parameterizedType
         7: .line 778
            aload 4 /* parameterizedType */
            invokeinterface java.lang.reflect.ParameterizedType.getRawType:()Ljava/lang/reflect/Type;
            checkcast java.lang.Class
            astore 5 /* rawType */
        start local 5 // java.lang.Class rawType
         8: .line 780
            aload 4 /* parameterizedType */
            invokeinterface java.lang.reflect.ParameterizedType.getActualTypeArguments:()[Ljava/lang/reflect/Type;
            astore 6 /* actualTypeArguments */
        start local 6 // java.lang.reflect.Type[] actualTypeArguments
         9: .line 781
            aload 5 /* rawType */
            invokevirtual java.lang.Class.getTypeParameters:()[Ljava/lang/reflect/TypeVariable;
            astore 7 /* typeParameters */
        start local 7 // java.lang.reflect.TypeVariable[] typeParameters
        10: .line 782
            iconst_0
            istore 8 /* i */
        start local 8 // int i
        11: goto 14
        12: .line 783
      StackMap locals: java.lang.Class java.lang.Class java.util.Map java.lang.reflect.Type java.lang.reflect.ParameterizedType java.lang.Class java.lang.reflect.Type[] java.lang.reflect.TypeVariable[] int
      StackMap stack:
            aload 2 /* resolvedTypes */
            aload 7 /* typeParameters */
            iload 8 /* i */
            aaload
            aload 6 /* actualTypeArguments */
            iload 8 /* i */
            aaload
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        13: .line 782
            iinc 8 /* i */ 1
      StackMap locals:
      StackMap stack:
        14: iload 8 /* i */
            aload 6 /* actualTypeArguments */
            arraylength
            if_icmplt 12
        end local 8 // int i
        15: .line 786
            aload 5 /* rawType */
            aload 0 /* baseClass */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifne 17
        16: .line 787
            aload 5 /* rawType */
            invokevirtual java.lang.Class.getGenericSuperclass:()Ljava/lang/reflect/Type;
            astore 3 /* type */
        end local 7 // java.lang.reflect.TypeVariable[] typeParameters
        end local 6 // java.lang.reflect.Type[] actualTypeArguments
        end local 5 // java.lang.Class rawType
        end local 4 // java.lang.reflect.ParameterizedType parameterizedType
        17: .line 771
      StackMap locals: java.lang.Class java.lang.Class java.util.Map java.lang.reflect.Type
      StackMap stack:
            aload 3 /* type */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getClass:(Ljava/lang/reflect/Type;)Ljava/lang/Class;
            aload 0 /* baseClass */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifeq 3
        18: .line 796
            aload 3 /* type */
            instanceof java.lang.Class
            ifeq 21
        19: .line 797
            aload 3 /* type */
            checkcast java.lang.Class
            invokevirtual java.lang.Class.getTypeParameters:()[Ljava/lang/reflect/TypeVariable;
            astore 4 /* actualTypeArguments */
        start local 4 // java.lang.reflect.Type[] actualTypeArguments
        20: .line 798
            goto 22
        end local 4 // java.lang.reflect.Type[] actualTypeArguments
        21: .line 799
      StackMap locals:
      StackMap stack:
            aload 3 /* type */
            checkcast java.lang.reflect.ParameterizedType
            invokeinterface java.lang.reflect.ParameterizedType.getActualTypeArguments:()[Ljava/lang/reflect/Type;
            astore 4 /* actualTypeArguments */
        start local 4 // java.lang.reflect.Type[] actualTypeArguments
        22: .line 801
      StackMap locals: java.lang.reflect.Type[]
      StackMap stack:
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 5 /* typeArgumentsAsClasses */
        start local 5 // java.util.List typeArgumentsAsClasses
        23: .line 803
            aload 4 /* actualTypeArguments */
            dup
            astore 9
            arraylength
            istore 8
            iconst_0
            istore 7
            goto 30
      StackMap locals: java.lang.Class java.lang.Class java.util.Map java.lang.reflect.Type java.lang.reflect.Type[] java.util.List top int int java.lang.reflect.Type[]
      StackMap stack:
        24: aload 9
            iload 7
            aaload
            astore 6 /* baseType */
        start local 6 // java.lang.reflect.Type baseType
        25: .line 804
            goto 27
        26: .line 805
      StackMap locals: java.lang.Class java.lang.Class java.util.Map java.lang.reflect.Type java.lang.reflect.Type[] java.util.List java.lang.reflect.Type int int java.lang.reflect.Type[]
      StackMap stack:
            aload 2 /* resolvedTypes */
            aload 6 /* baseType */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.reflect.Type
            astore 6 /* baseType */
        27: .line 804
      StackMap locals:
      StackMap stack:
            aload 2 /* resolvedTypes */
            aload 6 /* baseType */
            invokeinterface java.util.Map.containsKey:(Ljava/lang/Object;)Z
            ifne 26
        28: .line 807
            aload 5 /* typeArgumentsAsClasses */
            aload 6 /* baseType */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getClass:(Ljava/lang/reflect/Type;)Ljava/lang/Class;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 6 // java.lang.reflect.Type baseType
        29: .line 803
            iinc 7 1
      StackMap locals: java.lang.Class java.lang.Class java.util.Map java.lang.reflect.Type java.lang.reflect.Type[] java.util.List top int int java.lang.reflect.Type[]
      StackMap stack:
        30: iload 7
            iload 8
            if_icmplt 24
        31: .line 809
            aload 5 /* typeArgumentsAsClasses */
            areturn
        end local 5 // java.util.List typeArgumentsAsClasses
        end local 4 // java.lang.reflect.Type[] actualTypeArguments
        end local 3 // java.lang.reflect.Type type
        end local 2 // java.util.Map resolvedTypes
        end local 1 // java.lang.Class childClass
        end local 0 // java.lang.Class baseClass
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   32     0               baseClass  Ljava/lang/Class<TT;>;
            0   32     1              childClass  Ljava/lang/Class<+TT;>;
            1   32     2           resolvedTypes  Ljava/util/Map<Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;>;
            2   32     3                    type  Ljava/lang/reflect/Type;
            7   17     4       parameterizedType  Ljava/lang/reflect/ParameterizedType;
            8   17     5                 rawType  Ljava/lang/Class<*>;
            9   17     6     actualTypeArguments  [Ljava/lang/reflect/Type;
           10   17     7          typeParameters  [Ljava/lang/reflect/TypeVariable;
           11   15     8                       i  I
           20   21     4     actualTypeArguments  [Ljava/lang/reflect/Type;
           22   32     4     actualTypeArguments  [Ljava/lang/reflect/Type;
           23   32     5  typeArgumentsAsClasses  Ljava/util/List<Ljava/lang/Class<*>;>;
           25   29     6                baseType  Ljava/lang/reflect/Type;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/Class<+TT;>;)Ljava/util/List<Ljava/lang/Class<*>;>;
    MethodParameters:
            Name  Flags
      baseClass   final
      childClass  final

  public static <T> java.lang.Class<?> getTypeArgument(java.lang.Class<? extends T>, java.lang.reflect.TypeVariable<? extends java.lang.reflect.GenericDeclaration>);
    descriptor: (Ljava/lang/Class;Ljava/lang/reflect/TypeVariable;)Ljava/lang/Class;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=12, args_size=2
        start local 0 // java.lang.Class clazz
        start local 1 // java.lang.reflect.TypeVariable tv
         0: .line 821
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 2 /* resolvedTypes */
        start local 2 // java.util.Map resolvedTypes
         1: .line 822
            aload 0 /* clazz */
            astore 3 /* type */
        start local 3 // java.lang.reflect.Type type
         2: .line 824
            goto 28
         3: .line 825
      StackMap locals: java.util.Map java.lang.reflect.Type
      StackMap stack:
            aload 3 /* type */
            instanceof java.lang.Class
            ifeq 6
         4: .line 828
            aload 3 /* type */
            checkcast java.lang.Class
            invokevirtual java.lang.Class.getGenericSuperclass:()Ljava/lang/reflect/Type;
            astore 3 /* type */
         5: .line 829
            goto 28
         6: .line 830
      StackMap locals:
      StackMap stack:
            aload 3 /* type */
            checkcast java.lang.reflect.ParameterizedType
            astore 4 /* parameterizedType */
        start local 4 // java.lang.reflect.ParameterizedType parameterizedType
         7: .line 831
            aload 4 /* parameterizedType */
            invokeinterface java.lang.reflect.ParameterizedType.getRawType:()Ljava/lang/reflect/Type;
            checkcast java.lang.Class
            astore 5 /* rawType */
        start local 5 // java.lang.Class rawType
         8: .line 833
            aload 4 /* parameterizedType */
            invokeinterface java.lang.reflect.ParameterizedType.getActualTypeArguments:()[Ljava/lang/reflect/Type;
            astore 6 /* actualTypeArguments */
        start local 6 // java.lang.reflect.Type[] actualTypeArguments
         9: .line 834
            aload 5 /* rawType */
            invokevirtual java.lang.Class.getTypeParameters:()[Ljava/lang/reflect/TypeVariable;
            astore 7 /* typeParameters */
        start local 7 // java.lang.reflect.TypeVariable[] typeParameters
        10: .line 835
            iconst_0
            istore 8 /* i */
        start local 8 // int i
        11: goto 25
        12: .line 836
      StackMap locals: java.lang.Class java.lang.reflect.TypeVariable java.util.Map java.lang.reflect.Type java.lang.reflect.ParameterizedType java.lang.Class java.lang.reflect.Type[] java.lang.reflect.TypeVariable[] int
      StackMap stack:
            aload 7 /* typeParameters */
            iload 8 /* i */
            aaload
            aload 1 /* tv */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifeq 23
        13: .line 837
            aload 6 /* actualTypeArguments */
            iload 8 /* i */
            aaload
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getClass:(Ljava/lang/reflect/Type;)Ljava/lang/Class;
            astore 9 /* cls */
        start local 9 // java.lang.Class cls
        14: .line 838
            aload 9 /* cls */
            ifnull 16
        15: .line 839
            aload 9 /* cls */
            areturn
        16: .line 843
      StackMap locals: java.lang.Class
      StackMap stack:
            aload 2 /* resolvedTypes */
            aload 6 /* actualTypeArguments */
            iload 8 /* i */
            aaload
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.reflect.Type
            astore 10 /* typeToTest */
        start local 10 // java.lang.reflect.Type typeToTest
        17: .line 844
            goto 22
        18: .line 845
      StackMap locals: java.lang.reflect.Type
      StackMap stack:
            aload 10 /* typeToTest */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getClass:(Ljava/lang/reflect/Type;)Ljava/lang/Class;
            astore 11 /* classToTest */
        start local 11 // java.lang.Class classToTest
        19: .line 846
            aload 11 /* classToTest */
            ifnull 21
        20: .line 847
            aload 11 /* classToTest */
            areturn
        21: .line 849
      StackMap locals: java.lang.Class
      StackMap stack:
            aload 2 /* resolvedTypes */
            aload 10 /* typeToTest */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.reflect.Type
            astore 10 /* typeToTest */
        end local 11 // java.lang.Class classToTest
        22: .line 844
      StackMap locals:
      StackMap stack:
            aload 10 /* typeToTest */
            ifnonnull 18
        end local 10 // java.lang.reflect.Type typeToTest
        end local 9 // java.lang.Class cls
        23: .line 852
      StackMap locals:
      StackMap stack:
            aload 2 /* resolvedTypes */
            aload 7 /* typeParameters */
            iload 8 /* i */
            aaload
            aload 6 /* actualTypeArguments */
            iload 8 /* i */
            aaload
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        24: .line 835
            iinc 8 /* i */ 1
      StackMap locals:
      StackMap stack:
        25: iload 8 /* i */
            aload 6 /* actualTypeArguments */
            arraylength
            if_icmplt 12
        end local 8 // int i
        26: .line 855
            aload 5 /* rawType */
            ldc Ljava/lang/Object;
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifne 28
        27: .line 856
            aload 5 /* rawType */
            invokevirtual java.lang.Class.getGenericSuperclass:()Ljava/lang/reflect/Type;
            astore 3 /* type */
        end local 7 // java.lang.reflect.TypeVariable[] typeParameters
        end local 6 // java.lang.reflect.Type[] actualTypeArguments
        end local 5 // java.lang.Class rawType
        end local 4 // java.lang.reflect.ParameterizedType parameterizedType
        28: .line 824
      StackMap locals: java.lang.Class java.lang.reflect.TypeVariable java.util.Map java.lang.reflect.Type
      StackMap stack:
            aload 3 /* type */
            ifnull 29
            ldc Ljava/lang/Object;
            aload 3 /* type */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.getClass:(Ljava/lang/reflect/Type;)Ljava/lang/Class;
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifeq 3
        29: .line 861
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 3 // java.lang.reflect.Type type
        end local 2 // java.util.Map resolvedTypes
        end local 1 // java.lang.reflect.TypeVariable tv
        end local 0 // java.lang.Class clazz
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0   30     0                clazz  Ljava/lang/Class<+TT;>;
            0   30     1                   tv  Ljava/lang/reflect/TypeVariable<+Ljava/lang/reflect/GenericDeclaration;>;
            1   30     2        resolvedTypes  Ljava/util/Map<Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;>;
            2   30     3                 type  Ljava/lang/reflect/Type;
            7   28     4    parameterizedType  Ljava/lang/reflect/ParameterizedType;
            8   28     5              rawType  Ljava/lang/Class<*>;
            9   28     6  actualTypeArguments  [Ljava/lang/reflect/Type;
           10   28     7       typeParameters  [Ljava/lang/reflect/TypeVariable;
           11   26     8                    i  I
           14   23     9                  cls  Ljava/lang/Class;
           17   23    10           typeToTest  Ljava/lang/reflect/Type;
           19   22    11          classToTest  Ljava/lang/Class;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<+TT;>;Ljava/lang/reflect/TypeVariable<+Ljava/lang/reflect/GenericDeclaration;>;)Ljava/lang/Class<*>;
    MethodParameters:
       Name  Flags
      clazz  final
      tv     final
}
SourceFile: "ReflectionUtils.java"