public class org.mongodb.morphia.mapping.Mapper
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.mongodb.morphia.mapping.Mapper
  super_class: java.lang.Object
{
  public static final java.lang.String ID_KEY;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "_id"

  public static final java.lang.String IGNORED_FIELDNAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "."

  public static final java.lang.String CLASS_NAME_FIELDNAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "className"

  private static final org.mongodb.morphia.logging.Logger LOG;
    descriptor: Lorg/mongodb/morphia/logging/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final java.util.Map<java.lang.String, org.mongodb.morphia.mapping.MappedClass> mappedClasses;
    descriptor: Ljava/util/Map;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Map<Ljava/lang/String;Lorg/mongodb/morphia/mapping/MappedClass;>;

  private final java.util.concurrent.ConcurrentHashMap<java.lang.String, java.util.Set<org.mongodb.morphia.mapping.MappedClass>> mappedClassesByCollection;
    descriptor: Ljava/util/concurrent/ConcurrentHashMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/concurrent/ConcurrentHashMap<Ljava/lang/String;Ljava/util/Set<Lorg/mongodb/morphia/mapping/MappedClass;>;>;

  private final java.util.List<org.mongodb.morphia.EntityInterceptor> interceptors;
    descriptor: Ljava/util/List;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/List<Lorg/mongodb/morphia/EntityInterceptor;>;

  private final java.util.Map<java.lang.Class, java.lang.Object> instanceCache;
    descriptor: Ljava/util/Map;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Map<Ljava/lang/Class;Ljava/lang/Object;>;

  private final org.mongodb.morphia.mapping.lazy.LazyProxyFactory proxyFactory;
    descriptor: Lorg/mongodb/morphia/mapping/lazy/LazyProxyFactory;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.mongodb.morphia.converters.Converters converters;
    descriptor: Lorg/mongodb/morphia/converters/Converters;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private org.mongodb.morphia.mapping.MapperOptions opts;
    descriptor: Lorg/mongodb/morphia/mapping/MapperOptions;
    flags: (0x0002) ACC_PRIVATE

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

  public void <init>(org.mongodb.morphia.mapping.MapperOptions);
    descriptor: (Lorg/mongodb/morphia/mapping/MapperOptions;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.mapping.MapperOptions opts
         0: .line 112
            aload 0 /* this */
            invokespecial org.mongodb.morphia.mapping.Mapper.<init>:()V
         1: .line 113
            aload 0 /* this */
            aload 1 /* opts */
            putfield org.mongodb.morphia.mapping.Mapper.opts:Lorg/mongodb/morphia/mapping/MapperOptions;
         2: .line 114
            return
        end local 1 // org.mongodb.morphia.mapping.MapperOptions opts
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/mongodb/morphia/mapping/Mapper;
            0    3     1  opts  Lorg/mongodb/morphia/mapping/MapperOptions;
    MethodParameters:
      Name  Flags
      opts  final

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.mapping.Mapper this
         0: .line 121
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 93
            aload 0 /* this */
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
            putfield org.mongodb.morphia.mapping.Mapper.mappedClasses:Ljava/util/Map;
         2: .line 94
            aload 0 /* this */
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
            putfield org.mongodb.morphia.mapping.Mapper.mappedClassesByCollection:Ljava/util/concurrent/ConcurrentHashMap;
         3: .line 97
            aload 0 /* this */
            new java.util.LinkedList
            dup
            invokespecial java.util.LinkedList.<init>:()V
            putfield org.mongodb.morphia.mapping.Mapper.interceptors:Ljava/util/List;
         4: .line 100
            aload 0 /* this */
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
            putfield org.mongodb.morphia.mapping.Mapper.instanceCache:Ljava/util/Map;
         5: .line 102
            aload 0 /* this */
            invokestatic org.mongodb.morphia.mapping.lazy.LazyFeatureDependencies.createDefaultProxyFactory:()Lorg/mongodb/morphia/mapping/lazy/LazyProxyFactory;
            putfield org.mongodb.morphia.mapping.Mapper.proxyFactory:Lorg/mongodb/morphia/mapping/lazy/LazyProxyFactory;
         6: .line 104
            aload 0 /* this */
            new org.mongodb.morphia.mapping.MapperOptions
            dup
            invokespecial org.mongodb.morphia.mapping.MapperOptions.<init>:()V
            putfield org.mongodb.morphia.mapping.Mapper.opts:Lorg/mongodb/morphia/mapping/MapperOptions;
         7: .line 122
            aload 0 /* this */
            new org.mongodb.morphia.converters.CustomConverters
            dup
            aload 0 /* this */
            invokespecial org.mongodb.morphia.converters.CustomConverters.<init>:(Lorg/mongodb/morphia/mapping/Mapper;)V
            putfield org.mongodb.morphia.mapping.Mapper.converters:Lorg/mongodb/morphia/converters/Converters;
         8: .line 123
            return
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0  this  Lorg/mongodb/morphia/mapping/Mapper;

  public void <init>(org.mongodb.morphia.mapping.MapperOptions, org.mongodb.morphia.mapping.Mapper);
    descriptor: (Lorg/mongodb/morphia/mapping/MapperOptions;Lorg/mongodb/morphia/mapping/Mapper;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=3
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.mapping.MapperOptions options
        start local 2 // org.mongodb.morphia.mapping.Mapper mapper
         0: .line 133
            aload 0 /* this */
            aload 1 /* options */
            invokespecial org.mongodb.morphia.mapping.Mapper.<init>:(Lorg/mongodb/morphia/mapping/MapperOptions;)V
         1: .line 134
            aload 2 /* mapper */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClasses:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 4
            goto 4
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MapperOptions org.mongodb.morphia.mapping.Mapper top java.util.Iterator
      StackMap stack:
         2: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.mongodb.morphia.mapping.MappedClass
            astore 3 /* mappedClass */
        start local 3 // org.mongodb.morphia.mapping.MappedClass mappedClass
         3: .line 135
            aload 0 /* this */
            aload 3 /* mappedClass */
            iconst_0
            invokevirtual org.mongodb.morphia.mapping.Mapper.addMappedClass:(Lorg/mongodb/morphia/mapping/MappedClass;Z)Lorg/mongodb/morphia/mapping/MappedClass;
            pop
        end local 3 // org.mongodb.morphia.mapping.MappedClass mappedClass
         4: .line 134
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         5: .line 137
            return
        end local 2 // org.mongodb.morphia.mapping.Mapper mapper
        end local 1 // org.mongodb.morphia.mapping.MapperOptions options
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    6     0         this  Lorg/mongodb/morphia/mapping/Mapper;
            0    6     1      options  Lorg/mongodb/morphia/mapping/MapperOptions;
            0    6     2       mapper  Lorg/mongodb/morphia/mapping/Mapper;
            3    4     3  mappedClass  Lorg/mongodb/morphia/mapping/MappedClass;
    MethodParameters:
         Name  Flags
      options  final
      mapper   final

  public void addInterceptor(org.mongodb.morphia.EntityInterceptor);
    descriptor: (Lorg/mongodb/morphia/EntityInterceptor;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.EntityInterceptor ei
         0: .line 145
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.interceptors:Ljava/util/List;
            aload 1 /* ei */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         1: .line 146
            return
        end local 1 // org.mongodb.morphia.EntityInterceptor ei
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/mongodb/morphia/mapping/Mapper;
            0    2     1    ei  Lorg/mongodb/morphia/EntityInterceptor;
    MethodParameters:
      Name  Flags
      ei    final

  public org.mongodb.morphia.mapping.MappedClass addMappedClass(java.lang.Class);
    descriptor: (Ljava/lang/Class;)Lorg/mongodb/morphia/mapping/MappedClass;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.Class c
         0: .line 156
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.mappedClasses:Ljava/util/Map;
            aload 1 /* c */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.mongodb.morphia.mapping.MappedClass
            astore 2 /* mappedClass */
        start local 2 // org.mongodb.morphia.mapping.MappedClass mappedClass
         1: .line 157
            aload 2 /* mappedClass */
            ifnonnull 4
         2: .line 158
            new org.mongodb.morphia.mapping.MappedClass
            dup
            aload 1 /* c */
            aload 0 /* this */
            invokespecial org.mongodb.morphia.mapping.MappedClass.<init>:(Ljava/lang/Class;Lorg/mongodb/morphia/mapping/Mapper;)V
            astore 2 /* mappedClass */
         3: .line 159
            aload 0 /* this */
            aload 2 /* mappedClass */
            iconst_1
            invokevirtual org.mongodb.morphia.mapping.Mapper.addMappedClass:(Lorg/mongodb/morphia/mapping/MappedClass;Z)Lorg/mongodb/morphia/mapping/MappedClass;
            areturn
         4: .line 161
      StackMap locals: org.mongodb.morphia.mapping.MappedClass
      StackMap stack:
            aload 2 /* mappedClass */
            areturn
        end local 2 // org.mongodb.morphia.mapping.MappedClass mappedClass
        end local 1 // java.lang.Class c
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    5     0         this  Lorg/mongodb/morphia/mapping/Mapper;
            0    5     1            c  Ljava/lang/Class;
            1    5     2  mappedClass  Lorg/mongodb/morphia/mapping/MappedClass;
    MethodParameters:
      Name  Flags
      c     final

  public org.mongodb.morphia.mapping.cache.EntityCache createEntityCache();
    descriptor: ()Lorg/mongodb/morphia/mapping/cache/EntityCache;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.mapping.Mapper this
         0: .line 170
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getOptions:()Lorg/mongodb/morphia/mapping/MapperOptions;
            invokevirtual org.mongodb.morphia.mapping.MapperOptions.getCacheFactory:()Lorg/mongodb/morphia/mapping/cache/EntityCacheFactory;
            invokeinterface org.mongodb.morphia.mapping.cache.EntityCacheFactory.createCache:()Lorg/mongodb/morphia/mapping/cache/EntityCache;
            areturn
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/mapping/Mapper;

  public <T> T fromDBObject(org.mongodb.morphia.Datastore, java.lang.Class<T>, com.mongodb.DBObject, org.mongodb.morphia.mapping.cache.EntityCache);
    descriptor: (Lorg/mongodb/morphia/Datastore;Ljava/lang/Class;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/cache/EntityCache;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=6, args_size=5
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.Datastore datastore
        start local 2 // java.lang.Class entityClass
        start local 3 // com.mongodb.DBObject dbObject
        start local 4 // org.mongodb.morphia.mapping.cache.EntityCache cache
         0: .line 185
            aload 3 /* dbObject */
            ifnonnull 4
         1: .line 186
            new java.lang.Throwable
            dup
            invokespecial java.lang.Throwable.<init>:()V
            astore 5 /* t */
        start local 5 // java.lang.Throwable t
         2: .line 187
            getstatic org.mongodb.morphia.mapping.Mapper.LOG:Lorg/mongodb/morphia/logging/Logger;
            ldc "A null reference was passed in for the dbObject"
            aload 5 /* t */
            invokeinterface org.mongodb.morphia.logging.Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
         3: .line 188
            aconst_null
            areturn
        end local 5 // java.lang.Throwable t
         4: .line 192
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.opts:Lorg/mongodb/morphia/mapping/MapperOptions;
            invokevirtual org.mongodb.morphia.mapping.MapperOptions.getObjectFactory:()Lorg/mongodb/morphia/ObjectFactory;
            aload 2 /* entityClass */
            aload 3 /* dbObject */
            invokeinterface org.mongodb.morphia.ObjectFactory.createInstance:(Ljava/lang/Class;Lcom/mongodb/DBObject;)Ljava/lang/Object;
            astore 5 /* entity */
        start local 5 // java.lang.Object entity
         5: .line 193
            aload 0 /* this */
            aload 1 /* datastore */
            aload 3 /* dbObject */
            aload 5 /* entity */
            aload 4 /* cache */
            invokevirtual org.mongodb.morphia.mapping.Mapper.fromDb:(Lorg/mongodb/morphia/Datastore;Lcom/mongodb/DBObject;Ljava/lang/Object;Lorg/mongodb/morphia/mapping/cache/EntityCache;)Ljava/lang/Object;
            astore 5 /* entity */
         6: .line 194
            aload 5 /* entity */
            areturn
        end local 5 // java.lang.Object entity
        end local 4 // org.mongodb.morphia.mapping.cache.EntityCache cache
        end local 3 // com.mongodb.DBObject dbObject
        end local 2 // java.lang.Class entityClass
        end local 1 // org.mongodb.morphia.Datastore datastore
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    7     0         this  Lorg/mongodb/morphia/mapping/Mapper;
            0    7     1    datastore  Lorg/mongodb/morphia/Datastore;
            0    7     2  entityClass  Ljava/lang/Class<TT;>;
            0    7     3     dbObject  Lcom/mongodb/DBObject;
            0    7     4        cache  Lorg/mongodb/morphia/mapping/cache/EntityCache;
            2    4     5            t  Ljava/lang/Throwable;
            5    7     5       entity  TT;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/Datastore;Ljava/lang/Class<TT;>;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/cache/EntityCache;)TT;
    MethodParameters:
             Name  Flags
      datastore    final
      entityClass  final
      dbObject     final
      cache        final

  public java.util.List<org.mongodb.morphia.mapping.MappedClass> getSubTypes(org.mongodb.morphia.mapping.MappedClass);
    descriptor: (Lorg/mongodb/morphia/mapping/MappedClass;)Ljava/util/List;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=5, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.mapping.MappedClass mc
         0: .line 206
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 2 /* subtypes */
        start local 2 // java.util.List subtypes
         1: .line 207
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClasses:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 4
            goto 5
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MappedClass java.util.List top java.util.Iterator
      StackMap stack:
         2: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.mongodb.morphia.mapping.MappedClass
            astore 3 /* mappedClass */
        start local 3 // org.mongodb.morphia.mapping.MappedClass mappedClass
         3: .line 208
            aload 3 /* mappedClass */
            aload 1 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.isSubType:(Lorg/mongodb/morphia/mapping/MappedClass;)Z
            ifeq 5
         4: .line 209
            aload 2 /* subtypes */
            aload 3 /* mappedClass */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 3 // org.mongodb.morphia.mapping.MappedClass mappedClass
         5: .line 207
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         6: .line 213
            aload 2 /* subtypes */
            areturn
        end local 2 // java.util.List subtypes
        end local 1 // org.mongodb.morphia.mapping.MappedClass mc
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    7     0         this  Lorg/mongodb/morphia/mapping/Mapper;
            0    7     1           mc  Lorg/mongodb/morphia/mapping/MappedClass;
            1    7     2     subtypes  Ljava/util/List<Lorg/mongodb/morphia/mapping/MappedClass;>;
            3    5     3  mappedClass  Lorg/mongodb/morphia/mapping/MappedClass;
    Signature: (Lorg/mongodb/morphia/mapping/MappedClass;)Ljava/util/List<Lorg/mongodb/morphia/mapping/MappedClass;>;
    MethodParameters:
      Name  Flags
      mc    final

  <T> T fromDBObject(org.mongodb.morphia.Datastore, com.mongodb.DBObject);
    descriptor: (Lorg/mongodb/morphia/Datastore;Lcom/mongodb/DBObject;)Ljava/lang/Object;
    flags: (0x0000) 
    Code:
      stack=7, locals=4, args_size=3
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.Datastore datastore
        start local 2 // com.mongodb.DBObject dbObject
         0: .line 225
            aload 2 /* dbObject */
            ldc "className"
            invokeinterface com.mongodb.DBObject.containsField:(Ljava/lang/String;)Z
            ifeq 4
         1: .line 226
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.opts:Lorg/mongodb/morphia/mapping/MapperOptions;
            invokevirtual org.mongodb.morphia.mapping.MapperOptions.getObjectFactory:()Lorg/mongodb/morphia/ObjectFactory;
            aconst_null
            aload 2 /* dbObject */
            invokeinterface org.mongodb.morphia.ObjectFactory.createInstance:(Ljava/lang/Class;Lcom/mongodb/DBObject;)Ljava/lang/Object;
            astore 3 /* entity */
        start local 3 // java.lang.Object entity
         2: .line 227
            aload 0 /* this */
            aload 1 /* datastore */
            aload 2 /* dbObject */
            aload 3 /* entity */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.mapping.Mapper.createEntityCache:()Lorg/mongodb/morphia/mapping/cache/EntityCache;
            invokevirtual org.mongodb.morphia.mapping.Mapper.fromDb:(Lorg/mongodb/morphia/Datastore;Lcom/mongodb/DBObject;Ljava/lang/Object;Lorg/mongodb/morphia/mapping/cache/EntityCache;)Ljava/lang/Object;
            astore 3 /* entity */
         3: .line 229
            aload 3 /* entity */
            areturn
        end local 3 // java.lang.Object entity
         4: .line 231
      StackMap locals:
      StackMap stack:
            new org.mongodb.morphia.mapping.MappingException
            dup
            ldc "The DBOBbject does not contain a %s key.  Determining entity type is impossible."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
         5: .line 232
            ldc "className"
            aastore
         6: .line 231
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial org.mongodb.morphia.mapping.MappingException.<init>:(Ljava/lang/String;)V
            athrow
        end local 2 // com.mongodb.DBObject dbObject
        end local 1 // org.mongodb.morphia.Datastore datastore
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    7     0       this  Lorg/mongodb/morphia/mapping/Mapper;
            0    7     1  datastore  Lorg/mongodb/morphia/Datastore;
            0    7     2   dbObject  Lcom/mongodb/DBObject;
            2    4     3     entity  TT;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/Datastore;Lcom/mongodb/DBObject;)TT;
    MethodParameters:
           Name  Flags
      datastore  final
      dbObject   final

  public <T> T fromDb(org.mongodb.morphia.Datastore, com.mongodb.DBObject, T, org.mongodb.morphia.mapping.cache.EntityCache);
    descriptor: (Lorg/mongodb/morphia/Datastore;Lcom/mongodb/DBObject;Ljava/lang/Object;Lorg/mongodb/morphia/mapping/cache/EntityCache;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=10, args_size=5
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.Datastore datastore
        start local 2 // com.mongodb.DBObject dbObject
        start local 3 // java.lang.Object entity
        start local 4 // org.mongodb.morphia.mapping.cache.EntityCache cache
         0: .line 248
            aload 3 /* entity */
            instanceof org.mongodb.morphia.mapping.MappedField
            ifeq 3
         1: .line 249
            aload 0 /* this */
            aload 1 /* datastore */
            aload 3 /* entity */
            checkcast org.mongodb.morphia.mapping.MappedField
            aload 3 /* entity */
            aload 4 /* cache */
            aload 2 /* dbObject */
            invokevirtual org.mongodb.morphia.mapping.Mapper.readMappedField:(Lorg/mongodb/morphia/Datastore;Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Object;Lorg/mongodb/morphia/mapping/cache/EntityCache;Lcom/mongodb/DBObject;)V
         2: .line 250
            aload 3 /* entity */
            areturn
         3: .line 255
      StackMap locals:
      StackMap stack:
            aload 2 /* dbObject */
            ldc "_id"
            invokeinterface com.mongodb.DBObject.containsField:(Ljava/lang/String;)Z
            ifeq 10
            aload 0 /* this */
            aload 3 /* entity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getIdField:()Ljava/lang/reflect/Field;
            ifnull 10
         4: .line 256
            aload 0 /* this */
            aload 3 /* entity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getEntityAnnotation:()Lorg/mongodb/morphia/annotations/Entity;
            ifnull 10
         5: .line 257
            new org.mongodb.morphia.Key
            dup
            aload 3 /* entity */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            aload 0 /* this */
            aload 3 /* entity */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getCollectionName:(Ljava/lang/Object;)Ljava/lang/String;
            aload 2 /* dbObject */
            ldc "_id"
            invokeinterface com.mongodb.DBObject.get:(Ljava/lang/String;)Ljava/lang/Object;
            invokespecial org.mongodb.morphia.Key.<init>:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)V
            astore 5 /* key */
        start local 5 // org.mongodb.morphia.Key key
         6: .line 258
            aload 4 /* cache */
            aload 5 /* key */
            invokeinterface org.mongodb.morphia.mapping.cache.EntityCache.getEntity:(Lorg/mongodb/morphia/Key;)Ljava/lang/Object;
            astore 6 /* cachedInstance */
        start local 6 // java.lang.Object cachedInstance
         7: .line 259
            aload 6 /* cachedInstance */
            ifnull 9
         8: .line 260
            aload 6 /* cachedInstance */
            areturn
         9: .line 262
      StackMap locals: org.mongodb.morphia.Key java.lang.Object
      StackMap stack:
            aload 4 /* cache */
            aload 5 /* key */
            aload 3 /* entity */
            invokeinterface org.mongodb.morphia.mapping.cache.EntityCache.putEntity:(Lorg/mongodb/morphia/Key;Ljava/lang/Object;)V
        end local 6 // java.lang.Object cachedInstance
        end local 5 // org.mongodb.morphia.Key key
        10: .line 266
      StackMap locals:
      StackMap stack:
            aload 3 /* entity */
            instanceof java.util.Map
            ifeq 20
        11: .line 267
            aload 3 /* entity */
            checkcast java.util.Map
            astore 5 /* map */
        start local 5 // java.util.Map map
        12: .line 268
            aload 2 /* dbObject */
            invokeinterface com.mongodb.DBObject.keySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 7
            goto 18
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.Datastore com.mongodb.DBObject java.lang.Object org.mongodb.morphia.mapping.cache.EntityCache java.util.Map top java.util.Iterator
      StackMap stack:
        13: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 6 /* key */
        start local 6 // java.lang.String key
        14: .line 269
            aload 2 /* dbObject */
            aload 6 /* key */
            invokeinterface com.mongodb.DBObject.get:(Ljava/lang/String;)Ljava/lang/Object;
            astore 8 /* o */
        start local 8 // java.lang.Object o
        15: .line 270
            aload 5 /* map */
            aload 6 /* key */
            aload 8 /* o */
            instanceof com.mongodb.DBObject
            ifeq 16
            aload 0 /* this */
            aload 1 /* datastore */
            aload 8 /* o */
            checkcast com.mongodb.DBObject
            invokevirtual org.mongodb.morphia.mapping.Mapper.fromDBObject:(Lorg/mongodb/morphia/Datastore;Lcom/mongodb/DBObject;)Ljava/lang/Object;
            goto 17
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.Datastore com.mongodb.DBObject java.lang.Object org.mongodb.morphia.mapping.cache.EntityCache java.util.Map java.lang.String java.util.Iterator java.lang.Object
      StackMap stack: java.util.Map java.lang.String
        16: aload 8 /* o */
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.Datastore com.mongodb.DBObject java.lang.Object org.mongodb.morphia.mapping.cache.EntityCache java.util.Map java.lang.String java.util.Iterator java.lang.Object
      StackMap stack: java.util.Map java.lang.String java.lang.Object
        17: invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 8 // java.lang.Object o
        end local 6 // java.lang.String key
        18: .line 268
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.Datastore com.mongodb.DBObject java.lang.Object org.mongodb.morphia.mapping.cache.EntityCache java.util.Map top java.util.Iterator
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 13
        end local 5 // java.util.Map map
        19: .line 272
            goto 48
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.Datastore com.mongodb.DBObject java.lang.Object org.mongodb.morphia.mapping.cache.EntityCache
      StackMap stack:
        20: aload 3 /* entity */
            instanceof java.util.Collection
            ifeq 29
        21: .line 273
            aload 3 /* entity */
            checkcast java.util.Collection
            astore 5 /* collection */
        start local 5 // java.util.Collection collection
        22: .line 274
            aload 2 /* dbObject */
            checkcast java.util.List
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 7
            goto 27
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.Datastore com.mongodb.DBObject java.lang.Object org.mongodb.morphia.mapping.cache.EntityCache java.util.Collection top java.util.Iterator
      StackMap stack:
        23: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            astore 6 /* o */
        start local 6 // java.lang.Object o
        24: .line 275
            aload 5 /* collection */
            aload 6 /* o */
            instanceof com.mongodb.DBObject
            ifeq 25
            aload 0 /* this */
            aload 1 /* datastore */
            aload 6 /* o */
            checkcast com.mongodb.DBObject
            invokevirtual org.mongodb.morphia.mapping.Mapper.fromDBObject:(Lorg/mongodb/morphia/Datastore;Lcom/mongodb/DBObject;)Ljava/lang/Object;
            goto 26
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.Datastore com.mongodb.DBObject java.lang.Object org.mongodb.morphia.mapping.cache.EntityCache java.util.Collection java.lang.Object java.util.Iterator
      StackMap stack: java.util.Collection
        25: aload 6 /* o */
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.Datastore com.mongodb.DBObject java.lang.Object org.mongodb.morphia.mapping.cache.EntityCache java.util.Collection java.lang.Object java.util.Iterator
      StackMap stack: java.util.Collection java.lang.Object
        26: invokeinterface java.util.Collection.add:(Ljava/lang/Object;)Z
            pop
        end local 6 // java.lang.Object o
        27: .line 274
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.Datastore com.mongodb.DBObject java.lang.Object org.mongodb.morphia.mapping.cache.EntityCache java.util.Collection top java.util.Iterator
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 23
        end local 5 // java.util.Collection collection
        28: .line 277
            goto 48
        29: .line 278
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.Datastore com.mongodb.DBObject java.lang.Object org.mongodb.morphia.mapping.cache.EntityCache
      StackMap stack:
            aload 0 /* this */
            aload 3 /* entity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            astore 5 /* mc */
        start local 5 // org.mongodb.morphia.mapping.MappedClass mc
        30: .line 279
            aload 5 /* mc */
            ldc Lorg/mongodb/morphia/annotations/PreLoad;
            aload 3 /* entity */
            aload 2 /* dbObject */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.callLifecycleMethods:(Ljava/lang/Class;Ljava/lang/Object;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/Mapper;)Lcom/mongodb/DBObject;
            astore 6 /* updated */
        start local 6 // com.mongodb.DBObject updated
        31: .line 281
            aload 5 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getPersistenceFields:()Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 8
            goto 34
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.Datastore com.mongodb.DBObject java.lang.Object org.mongodb.morphia.mapping.cache.EntityCache org.mongodb.morphia.mapping.MappedClass com.mongodb.DBObject top java.util.Iterator
      StackMap stack:
        32: aload 8
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.mongodb.morphia.mapping.MappedField
            astore 7 /* mf */
        start local 7 // org.mongodb.morphia.mapping.MappedField mf
        33: .line 282
            aload 0 /* this */
            aload 1 /* datastore */
            aload 7 /* mf */
            aload 3 /* entity */
            aload 4 /* cache */
            aload 6 /* updated */
            invokevirtual org.mongodb.morphia.mapping.Mapper.readMappedField:(Lorg/mongodb/morphia/Datastore;Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Object;Lorg/mongodb/morphia/mapping/cache/EntityCache;Lcom/mongodb/DBObject;)V
        end local 7 // org.mongodb.morphia.mapping.MappedField mf
        34: .line 281
      StackMap locals:
      StackMap stack:
            aload 8
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 32
        35: .line 284
            goto 44
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.Datastore com.mongodb.DBObject java.lang.Object org.mongodb.morphia.mapping.cache.EntityCache org.mongodb.morphia.mapping.MappedClass com.mongodb.DBObject
      StackMap stack: org.mongodb.morphia.mapping.MappingException
        36: astore 7 /* e */
        start local 7 // org.mongodb.morphia.mapping.MappingException e
        37: .line 285
            aload 2 /* dbObject */
            ldc "_id"
            invokeinterface com.mongodb.DBObject.get:(Ljava/lang/String;)Ljava/lang/Object;
            astore 8 /* id */
        start local 8 // java.lang.Object id
        38: .line 286
            aload 3 /* entity */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            astore 9 /* entityName */
        start local 9 // java.lang.String entityName
        39: .line 287
            new org.mongodb.morphia.mapping.MappingException
            dup
            ldc "Could not map %s with ID: %s in database '%s'"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
            aload 9 /* entityName */
            aastore
            dup
            iconst_1
            aload 8 /* id */
            aastore
            dup
            iconst_2
        40: .line 288
            aload 1 /* datastore */
            invokeinterface org.mongodb.morphia.Datastore.getDB:()Lcom/mongodb/DB;
            invokevirtual com.mongodb.DB.getName:()Ljava/lang/String;
            aastore
        41: .line 287
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        42: .line 288
            aload 7 /* e */
        43: .line 287
            invokespecial org.mongodb.morphia.mapping.MappingException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 9 // java.lang.String entityName
        end local 8 // java.lang.Object id
        end local 7 // org.mongodb.morphia.mapping.MappingException e
        44: .line 291
      StackMap locals:
      StackMap stack:
            aload 6 /* updated */
            ldc "_id"
            invokeinterface com.mongodb.DBObject.containsField:(Ljava/lang/String;)Z
            ifeq 47
            aload 0 /* this */
            aload 3 /* entity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getIdField:()Ljava/lang/reflect/Field;
            ifnull 47
        45: .line 292
            new org.mongodb.morphia.Key
            dup
            aload 3 /* entity */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            aload 0 /* this */
            aload 3 /* entity */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getCollectionName:(Ljava/lang/Object;)Ljava/lang/String;
            aload 6 /* updated */
            ldc "_id"
            invokeinterface com.mongodb.DBObject.get:(Ljava/lang/String;)Ljava/lang/Object;
            invokespecial org.mongodb.morphia.Key.<init>:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)V
            astore 7 /* key */
        start local 7 // org.mongodb.morphia.Key key
        46: .line 293
            aload 4 /* cache */
            aload 7 /* key */
            aload 3 /* entity */
            invokeinterface org.mongodb.morphia.mapping.cache.EntityCache.putEntity:(Lorg/mongodb/morphia/Key;Ljava/lang/Object;)V
        end local 7 // org.mongodb.morphia.Key key
        47: .line 295
      StackMap locals:
      StackMap stack:
            aload 5 /* mc */
            ldc Lorg/mongodb/morphia/annotations/PostLoad;
            aload 3 /* entity */
            aload 6 /* updated */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.callLifecycleMethods:(Ljava/lang/Class;Ljava/lang/Object;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/Mapper;)Lcom/mongodb/DBObject;
            pop
        end local 6 // com.mongodb.DBObject updated
        end local 5 // org.mongodb.morphia.mapping.MappedClass mc
        48: .line 297
      StackMap locals:
      StackMap stack:
            aload 3 /* entity */
            areturn
        end local 4 // org.mongodb.morphia.mapping.cache.EntityCache cache
        end local 3 // java.lang.Object entity
        end local 2 // com.mongodb.DBObject dbObject
        end local 1 // org.mongodb.morphia.Datastore datastore
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   49     0            this  Lorg/mongodb/morphia/mapping/Mapper;
            0   49     1       datastore  Lorg/mongodb/morphia/Datastore;
            0   49     2        dbObject  Lcom/mongodb/DBObject;
            0   49     3          entity  TT;
            0   49     4           cache  Lorg/mongodb/morphia/mapping/cache/EntityCache;
            6   10     5             key  Lorg/mongodb/morphia/Key<TT;>;
            7   10     6  cachedInstance  TT;
           12   19     5             map  Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;
           14   18     6             key  Ljava/lang/String;
           15   18     8               o  Ljava/lang/Object;
           22   28     5      collection  Ljava/util/Collection<Ljava/lang/Object;>;
           24   27     6               o  Ljava/lang/Object;
           30   48     5              mc  Lorg/mongodb/morphia/mapping/MappedClass;
           31   48     6         updated  Lcom/mongodb/DBObject;
           33   34     7              mf  Lorg/mongodb/morphia/mapping/MappedField;
           37   44     7               e  Lorg/mongodb/morphia/mapping/MappingException;
           38   44     8              id  Ljava/lang/Object;
           39   44     9      entityName  Ljava/lang/String;
           46   47     7             key  Lorg/mongodb/morphia/Key;
      Exception table:
        from    to  target  type
          31    35      36  Class org.mongodb.morphia.mapping.MappingException
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/Datastore;Lcom/mongodb/DBObject;TT;Lorg/mongodb/morphia/mapping/cache/EntityCache;)TT;
    MethodParameters:
           Name  Flags
      datastore  final
      dbObject   final
      entity     final
      cache      final

  public java.lang.Class<?> getClassFromCollection(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/Class;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=3, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.String collection
         0: .line 307
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.mappedClassesByCollection:Ljava/util/concurrent/ConcurrentHashMap;
            aload 1 /* collection */
            invokevirtual java.util.concurrent.ConcurrentHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Set
            astore 2 /* mcs */
        start local 2 // java.util.Set mcs
         1: .line 308
            aload 2 /* mcs */
            ifnull 2
            aload 2 /* mcs */
            invokeinterface java.util.Set.isEmpty:()Z
            ifeq 3
         2: .line 309
      StackMap locals: java.util.Set
      StackMap stack:
            new org.mongodb.morphia.mapping.MappingException
            dup
            ldc "The collection '%s' is not mapped to a java class."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* collection */
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial org.mongodb.morphia.mapping.MappingException.<init>:(Ljava/lang/String;)V
            athrow
         3: .line 311
      StackMap locals:
      StackMap stack:
            aload 2 /* mcs */
            invokeinterface java.util.Set.size:()I
            iconst_1
            if_icmple 6
         4: .line 312
            getstatic org.mongodb.morphia.mapping.Mapper.LOG:Lorg/mongodb/morphia/logging/Logger;
            invokeinterface org.mongodb.morphia.logging.Logger.isInfoEnabled:()Z
            ifeq 6
         5: .line 313
            getstatic org.mongodb.morphia.mapping.Mapper.LOG:Lorg/mongodb/morphia/logging/Logger;
            ldc "Found more than one class mapped to collection '%s'%s"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* collection */
            aastore
            dup
            iconst_1
            aload 2 /* mcs */
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.mongodb.morphia.logging.Logger.info:(Ljava/lang/String;)V
         6: .line 316
      StackMap locals:
      StackMap stack:
            aload 2 /* mcs */
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.mongodb.morphia.mapping.MappedClass
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getClazz:()Ljava/lang/Class;
            areturn
        end local 2 // java.util.Set mcs
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    7     0        this  Lorg/mongodb/morphia/mapping/Mapper;
            0    7     1  collection  Ljava/lang/String;
            1    7     2         mcs  Ljava/util/Set<Lorg/mongodb/morphia/mapping/MappedClass;>;
    Signature: (Ljava/lang/String;)Ljava/lang/Class<*>;
    MethodParameters:
            Name  Flags
      collection  final

  public java.lang.String getCollectionName(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.Object object
         0: .line 326
            aload 1 /* object */
            ifnonnull 2
         1: .line 327
            new java.lang.IllegalArgumentException
            dup
            invokespecial java.lang.IllegalArgumentException.<init>:()V
            athrow
         2: .line 330
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* object */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            astore 2 /* mc */
        start local 2 // org.mongodb.morphia.mapping.MappedClass mc
         3: .line 331
            aload 2 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getCollectionName:()Ljava/lang/String;
            areturn
        end local 2 // org.mongodb.morphia.mapping.MappedClass mc
        end local 1 // java.lang.Object object
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    4     0    this  Lorg/mongodb/morphia/mapping/Mapper;
            0    4     1  object  Ljava/lang/Object;
            3    4     2      mc  Lorg/mongodb/morphia/mapping/MappedClass;
    MethodParameters:
        Name  Flags
      object  final

  public org.mongodb.morphia.converters.Converters getConverters();
    descriptor: ()Lorg/mongodb/morphia/converters/Converters;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.mapping.Mapper this
         0: .line 338
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.converters:Lorg/mongodb/morphia/converters/Converters;
            areturn
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/mapping/Mapper;

  public java.lang.Object getId(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.Object entity
         0: .line 348
            aload 1 /* entity */
            astore 2 /* unwrapped */
        start local 2 // java.lang.Object unwrapped
         1: .line 349
            aload 2 /* unwrapped */
            ifnonnull 3
         2: .line 350
            aconst_null
            areturn
         3: .line 352
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 2 /* unwrapped */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* unwrapped */
         4: .line 354
            aload 0 /* this */
            aload 2 /* unwrapped */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getIdField:()Ljava/lang/reflect/Field;
            aload 2 /* unwrapped */
            invokevirtual java.lang.reflect.Field.get:(Ljava/lang/Object;)Ljava/lang/Object;
         5: areturn
         6: .line 355
      StackMap locals:
      StackMap stack: java.lang.Exception
            pop
         7: .line 356
            aconst_null
            areturn
        end local 2 // java.lang.Object unwrapped
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    8     0       this  Lorg/mongodb/morphia/mapping/Mapper;
            0    8     1     entity  Ljava/lang/Object;
            1    8     2  unwrapped  Ljava/lang/Object;
      Exception table:
        from    to  target  type
           4     5       6  Class java.lang.Exception
    MethodParameters:
        Name  Flags
      entity  final

  public java.util.Map<java.lang.Class, java.lang.Object> getInstanceCache();
    descriptor: ()Ljava/util/Map;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.mapping.Mapper this
         0: .line 364
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.instanceCache:Ljava/util/Map;
            areturn
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/mapping/Mapper;
    Signature: ()Ljava/util/Map<Ljava/lang/Class;Ljava/lang/Object;>;

  public java.util.Collection<org.mongodb.morphia.EntityInterceptor> getInterceptors();
    descriptor: ()Ljava/util/Collection;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.mapping.Mapper this
         0: .line 373
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.interceptors:Ljava/util/List;
            areturn
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/mapping/Mapper;
    Signature: ()Ljava/util/Collection<Lorg/mongodb/morphia/EntityInterceptor;>;

  public <T> org.mongodb.morphia.Key<T> getKey(T);
    descriptor: (Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.Object entity
         0: .line 384
            aload 1 /* entity */
            astore 2 /* unwrapped */
        start local 2 // java.lang.Object unwrapped
         1: .line 385
            aload 2 /* unwrapped */
            instanceof org.mongodb.morphia.mapping.lazy.proxy.ProxiedEntityReference
            ifeq 4
         2: .line 386
            aload 2 /* unwrapped */
            checkcast org.mongodb.morphia.mapping.lazy.proxy.ProxiedEntityReference
            astore 3 /* proxy */
        start local 3 // org.mongodb.morphia.mapping.lazy.proxy.ProxiedEntityReference proxy
         3: .line 387
            aload 3 /* proxy */
            invokeinterface org.mongodb.morphia.mapping.lazy.proxy.ProxiedEntityReference.__getKey:()Lorg/mongodb/morphia/Key;
            areturn
        end local 3 // org.mongodb.morphia.mapping.lazy.proxy.ProxiedEntityReference proxy
         4: .line 390
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 2 /* unwrapped */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* unwrapped */
         5: .line 391
            aload 2 /* unwrapped */
            instanceof org.mongodb.morphia.Key
            ifeq 7
         6: .line 392
            aload 2 /* unwrapped */
            checkcast org.mongodb.morphia.Key
            areturn
         7: .line 395
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* unwrapped */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getId:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 3 /* id */
        start local 3 // java.lang.Object id
         8: .line 396
            aload 2 /* unwrapped */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            astore 4 /* aClass */
        start local 4 // java.lang.Class aClass
         9: .line 397
            aload 3 /* id */
            ifnonnull 10
            aconst_null
            goto 11
      StackMap locals: java.lang.Object java.lang.Class
      StackMap stack:
        10: new org.mongodb.morphia.Key
            dup
            aload 4 /* aClass */
            aload 0 /* this */
            aload 4 /* aClass */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getCollectionName:(Ljava/lang/Object;)Ljava/lang/String;
            aload 3 /* id */
            invokespecial org.mongodb.morphia.Key.<init>:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)V
      StackMap locals:
      StackMap stack: org.mongodb.morphia.Key
        11: areturn
        end local 4 // java.lang.Class aClass
        end local 3 // java.lang.Object id
        end local 2 // java.lang.Object unwrapped
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   12     0       this  Lorg/mongodb/morphia/mapping/Mapper;
            0   12     1     entity  TT;
            1   12     2  unwrapped  TT;
            3    4     3      proxy  Lorg/mongodb/morphia/mapping/lazy/proxy/ProxiedEntityReference;
            8   12     3         id  Ljava/lang/Object;
            9   12     4     aClass  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(TT;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
        Name  Flags
      entity  final

  public <T> org.mongodb.morphia.Key<T> getKey(T, java.lang.String);
    descriptor: (Ljava/lang/Object;Ljava/lang/String;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=6, args_size=3
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.Object entity
        start local 2 // java.lang.String collection
         0: .line 409
            aload 1 /* entity */
            astore 3 /* unwrapped */
        start local 3 // java.lang.Object unwrapped
         1: .line 410
            aload 3 /* unwrapped */
            instanceof org.mongodb.morphia.mapping.lazy.proxy.ProxiedEntityReference
            ifeq 4
         2: .line 411
            aload 3 /* unwrapped */
            checkcast org.mongodb.morphia.mapping.lazy.proxy.ProxiedEntityReference
            astore 4 /* proxy */
        start local 4 // org.mongodb.morphia.mapping.lazy.proxy.ProxiedEntityReference proxy
         3: .line 412
            aload 4 /* proxy */
            invokeinterface org.mongodb.morphia.mapping.lazy.proxy.ProxiedEntityReference.__getKey:()Lorg/mongodb/morphia/Key;
            areturn
        end local 4 // org.mongodb.morphia.mapping.lazy.proxy.ProxiedEntityReference proxy
         4: .line 415
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 3 /* unwrapped */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 3 /* unwrapped */
         5: .line 416
            aload 3 /* unwrapped */
            instanceof org.mongodb.morphia.Key
            ifeq 7
         6: .line 417
            aload 3 /* unwrapped */
            checkcast org.mongodb.morphia.Key
            areturn
         7: .line 420
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* unwrapped */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getId:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 4 /* id */
        start local 4 // java.lang.Object id
         8: .line 421
            aload 3 /* unwrapped */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            astore 5 /* aClass */
        start local 5 // java.lang.Class aClass
         9: .line 422
            aload 4 /* id */
            ifnonnull 10
            aconst_null
            goto 11
      StackMap locals: java.lang.Object java.lang.Class
      StackMap stack:
        10: new org.mongodb.morphia.Key
            dup
            aload 5 /* aClass */
            aload 2 /* collection */
            aload 4 /* id */
            invokespecial org.mongodb.morphia.Key.<init>:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)V
      StackMap locals:
      StackMap stack: org.mongodb.morphia.Key
        11: areturn
        end local 5 // java.lang.Class aClass
        end local 4 // java.lang.Object id
        end local 3 // java.lang.Object unwrapped
        end local 2 // java.lang.String collection
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   12     0        this  Lorg/mongodb/morphia/mapping/Mapper;
            0   12     1      entity  TT;
            0   12     2  collection  Ljava/lang/String;
            1   12     3   unwrapped  TT;
            3    4     4       proxy  Lorg/mongodb/morphia/mapping/lazy/proxy/ProxiedEntityReference;
            8   12     4          id  Ljava/lang/Object;
            9   12     5      aClass  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(TT;Ljava/lang/String;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
            Name  Flags
      entity      final
      collection  final

  public <T> java.util.List<org.mongodb.morphia.Key<T>> getKeysByManualRefs(java.lang.Class<T>, java.util.List<java.lang.Object>);
    descriptor: (Ljava/lang/Class;Ljava/util/List;)Ljava/util/List;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=7, args_size=3
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.Class clazz
        start local 2 // java.util.List refs
         0: .line 434
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getCollectionName:(Ljava/lang/Object;)Ljava/lang/String;
            astore 3 /* collection */
        start local 3 // java.lang.String collection
         1: .line 435
            new java.util.ArrayList
            dup
            aload 2 /* refs */
            invokeinterface java.util.List.size:()I
            invokespecial java.util.ArrayList.<init>:(I)V
            astore 4 /* keys */
        start local 4 // java.util.List keys
         2: .line 436
            aload 2 /* refs */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 6
            goto 5
      StackMap locals: org.mongodb.morphia.mapping.Mapper java.lang.Class java.util.List java.lang.String java.util.List top java.util.Iterator
      StackMap stack:
         3: aload 6
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            astore 5 /* ref */
        start local 5 // java.lang.Object ref
         4: .line 437
            aload 4 /* keys */
            aload 0 /* this */
            aload 3 /* collection */
            aload 5 /* ref */
            invokevirtual org.mongodb.morphia.mapping.Mapper.manualRefToKey:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 5 // java.lang.Object ref
         5: .line 436
      StackMap locals:
      StackMap stack:
            aload 6
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
         6: .line 440
            aload 4 /* keys */
            areturn
        end local 4 // java.util.List keys
        end local 3 // java.lang.String collection
        end local 2 // java.util.List refs
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    7     0        this  Lorg/mongodb/morphia/mapping/Mapper;
            0    7     1       clazz  Ljava/lang/Class<TT;>;
            0    7     2        refs  Ljava/util/List<Ljava/lang/Object;>;
            1    7     3  collection  Ljava/lang/String;
            2    7     4        keys  Ljava/util/List<Lorg/mongodb/morphia/Key<TT;>;>;
            4    5     5         ref  Ljava/lang/Object;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/util/List<Ljava/lang/Object;>;)Ljava/util/List<Lorg/mongodb/morphia/Key<TT;>;>;
    MethodParameters:
       Name  Flags
      clazz  final
      refs   final

  public <T> java.util.List<org.mongodb.morphia.Key<T>> getKeysByRefs(java.util.List<com.mongodb.DBRef>);
    descriptor: (Ljava/util/List;)Ljava/util/List;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=6, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.util.List refs
         0: .line 451
            new java.util.ArrayList
            dup
            aload 1 /* refs */
            invokeinterface java.util.List.size:()I
            invokespecial java.util.ArrayList.<init>:(I)V
            astore 2 /* keys */
        start local 2 // java.util.List keys
         1: .line 452
            aload 1 /* refs */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 4
            goto 5
      StackMap locals: org.mongodb.morphia.mapping.Mapper java.util.List java.util.List top java.util.Iterator
      StackMap stack:
         2: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.mongodb.DBRef
            astore 3 /* ref */
        start local 3 // com.mongodb.DBRef ref
         3: .line 453
            aload 0 /* this */
            aload 3 /* ref */
            invokevirtual org.mongodb.morphia.mapping.Mapper.refToKey:(Lcom/mongodb/DBRef;)Lorg/mongodb/morphia/Key;
            astore 5 /* testKey */
        start local 5 // org.mongodb.morphia.Key testKey
         4: .line 454
            aload 2 /* keys */
            aload 5 /* testKey */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 5 // org.mongodb.morphia.Key testKey
        end local 3 // com.mongodb.DBRef ref
         5: .line 452
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         6: .line 456
            aload 2 /* keys */
            areturn
        end local 2 // java.util.List keys
        end local 1 // java.util.List refs
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    7     0     this  Lorg/mongodb/morphia/mapping/Mapper;
            0    7     1     refs  Ljava/util/List<Lcom/mongodb/DBRef;>;
            1    7     2     keys  Ljava/util/List<Lorg/mongodb/morphia/Key<TT;>;>;
            3    5     3      ref  Lcom/mongodb/DBRef;
            4    5     5  testKey  Lorg/mongodb/morphia/Key<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/util/List<Lcom/mongodb/DBRef;>;)Ljava/util/List<Lorg/mongodb/morphia/Key<TT;>;>;
    MethodParameters:
      Name  Flags
      refs  final

  public java.util.Map<java.lang.String, org.mongodb.morphia.mapping.MappedClass> getMCMap();
    descriptor: ()Ljava/util/Map;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.mapping.Mapper this
         0: .line 463
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.mappedClasses:Ljava/util/Map;
            invokestatic java.util.Collections.unmodifiableMap:(Ljava/util/Map;)Ljava/util/Map;
            areturn
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/mapping/Mapper;
    Signature: ()Ljava/util/Map<Ljava/lang/String;Lorg/mongodb/morphia/mapping/MappedClass;>;

  public org.mongodb.morphia.mapping.MappedClass getMappedClass(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.Object obj
         0: .line 473
            aload 1 /* obj */
            ifnonnull 2
         1: .line 474
            aconst_null
            areturn
         2: .line 477
      StackMap locals:
      StackMap stack:
            aload 1 /* obj */
            instanceof java.lang.Class
            ifeq 3
            aload 1 /* obj */
            checkcast java.lang.Class
            goto 4
      StackMap locals:
      StackMap stack:
         3: aload 1 /* obj */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
      StackMap locals:
      StackMap stack: java.lang.Class
         4: astore 2 /* type */
        start local 2 // java.lang.Class type
         5: .line 478
            aload 1 /* obj */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.isProxy:(Ljava/lang/Object;)Z
            ifeq 7
         6: .line 479
            aload 1 /* obj */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.getReferentClass:(Ljava/lang/Object;)Ljava/lang/Class;
            astore 2 /* type */
         7: .line 482
      StackMap locals: java.lang.Class
      StackMap stack:
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.mappedClasses:Ljava/util/Map;
            aload 2 /* type */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.mongodb.morphia.mapping.MappedClass
            astore 3 /* mc */
        start local 3 // org.mongodb.morphia.mapping.MappedClass mc
         8: .line 483
            aload 3 /* mc */
            ifnonnull 11
         9: .line 484
            new org.mongodb.morphia.mapping.MappedClass
            dup
            aload 2 /* type */
            aload 0 /* this */
            invokespecial org.mongodb.morphia.mapping.MappedClass.<init>:(Ljava/lang/Class;Lorg/mongodb/morphia/mapping/Mapper;)V
            astore 3 /* mc */
        10: .line 486
            aload 0 /* this */
            aload 3 /* mc */
            iconst_0
            invokevirtual org.mongodb.morphia.mapping.Mapper.addMappedClass:(Lorg/mongodb/morphia/mapping/MappedClass;Z)Lorg/mongodb/morphia/mapping/MappedClass;
            pop
        11: .line 488
      StackMap locals: org.mongodb.morphia.mapping.MappedClass
      StackMap stack:
            aload 3 /* mc */
            areturn
        end local 3 // org.mongodb.morphia.mapping.MappedClass mc
        end local 2 // java.lang.Class type
        end local 1 // java.lang.Object obj
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   12     0  this  Lorg/mongodb/morphia/mapping/Mapper;
            0   12     1   obj  Ljava/lang/Object;
            5   12     2  type  Ljava/lang/Class;
            8   12     3    mc  Lorg/mongodb/morphia/mapping/MappedClass;
    MethodParameters:
      Name  Flags
      obj   final

  public java.util.Collection<org.mongodb.morphia.mapping.MappedClass> getMappedClasses();
    descriptor: ()Ljava/util/Collection;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.mapping.Mapper this
         0: .line 495
            new java.util.ArrayList
            dup
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.mappedClasses:Ljava/util/Map;
            invokeinterface java.util.Map.values:()Ljava/util/Collection;
            invokespecial java.util.ArrayList.<init>:(Ljava/util/Collection;)V
            areturn
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/mapping/Mapper;
    Signature: ()Ljava/util/Collection<Lorg/mongodb/morphia/mapping/MappedClass;>;

  public org.mongodb.morphia.mapping.MapperOptions getOptions();
    descriptor: ()Lorg/mongodb/morphia/mapping/MapperOptions;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.mapping.Mapper this
         0: .line 502
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.opts:Lorg/mongodb/morphia/mapping/MapperOptions;
            areturn
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/mapping/Mapper;

  public void setOptions(org.mongodb.morphia.mapping.MapperOptions);
    descriptor: (Lorg/mongodb/morphia/mapping/MapperOptions;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.mapping.MapperOptions options
         0: .line 511
            aload 0 /* this */
            aload 1 /* options */
            putfield org.mongodb.morphia.mapping.Mapper.opts:Lorg/mongodb/morphia/mapping/MapperOptions;
         1: .line 512
            return
        end local 1 // org.mongodb.morphia.mapping.MapperOptions options
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lorg/mongodb/morphia/mapping/Mapper;
            0    2     1  options  Lorg/mongodb/morphia/mapping/MapperOptions;
    MethodParameters:
         Name  Flags
      options  final

  public boolean isMapped(java.lang.Class);
    descriptor: (Ljava/lang/Class;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.Class c
         0: .line 521
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.mappedClasses:Ljava/util/Map;
            aload 1 /* c */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokeinterface java.util.Map.containsKey:(Ljava/lang/Object;)Z
            ireturn
        end local 1 // java.lang.Class c
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/mapping/Mapper;
            0    1     1     c  Ljava/lang/Class;
    MethodParameters:
      Name  Flags
      c     final

  public com.mongodb.DBRef keyToDBRef(org.mongodb.morphia.Key);
    descriptor: (Lorg/mongodb/morphia/Key;)Lcom/mongodb/DBRef;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.Key key
         0: .line 531
            aload 1 /* key */
            ifnonnull 2
         1: .line 532
            aconst_null
            areturn
         2: .line 534
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            invokevirtual org.mongodb.morphia.Key.getType:()Ljava/lang/Class;
            ifnonnull 4
            aload 1 /* key */
            invokevirtual org.mongodb.morphia.Key.getCollection:()Ljava/lang/String;
            ifnonnull 4
         3: .line 535
            new java.lang.IllegalStateException
            dup
            ldc "How can it be missing both?"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 537
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            invokevirtual org.mongodb.morphia.Key.getCollection:()Ljava/lang/String;
            ifnonnull 6
         5: .line 538
            aload 1 /* key */
            aload 0 /* this */
            aload 1 /* key */
            invokevirtual org.mongodb.morphia.Key.getType:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getCollectionName:(Ljava/lang/Object;)Ljava/lang/String;
            invokevirtual org.mongodb.morphia.Key.setCollection:(Ljava/lang/String;)V
         6: .line 541
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            invokevirtual org.mongodb.morphia.Key.getId:()Ljava/lang/Object;
            astore 2 /* id */
        start local 2 // java.lang.Object id
         7: .line 542
            aload 0 /* this */
            aload 2 /* id */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.mapping.Mapper.isMapped:(Ljava/lang/Class;)Z
            ifeq 9
         8: .line 543
            aload 0 /* this */
            aload 2 /* id */
            iconst_1
            invokevirtual org.mongodb.morphia.mapping.Mapper.toMongoObject:(Ljava/lang/Object;Z)Ljava/lang/Object;
            astore 2 /* id */
         9: .line 545
      StackMap locals: java.lang.Object
      StackMap stack:
            new com.mongodb.DBRef
            dup
            aload 1 /* key */
            invokevirtual org.mongodb.morphia.Key.getCollection:()Ljava/lang/String;
            aload 2 /* id */
            invokespecial com.mongodb.DBRef.<init>:(Ljava/lang/String;Ljava/lang/Object;)V
            areturn
        end local 2 // java.lang.Object id
        end local 1 // org.mongodb.morphia.Key key
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0  this  Lorg/mongodb/morphia/mapping/Mapper;
            0   10     1   key  Lorg/mongodb/morphia/Key;
            7   10     2    id  Ljava/lang/Object;
    MethodParameters:
      Name  Flags
      key   final

  public <T> org.mongodb.morphia.Key<T> manualRefToKey(java.lang.Class<T>, );
    descriptor: (Ljava/lang/Class;Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.Class type
        start local 2 // java.lang.Object id
         0: .line 557
            aload 2 /* id */
            ifnonnull 1
            aconst_null
            goto 2
      StackMap locals:
      StackMap stack:
         1: new org.mongodb.morphia.Key
            dup
            aload 1 /* type */
            aload 0 /* this */
            aload 1 /* type */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getCollectionName:(Ljava/lang/Object;)Ljava/lang/String;
            aload 2 /* id */
            invokespecial org.mongodb.morphia.Key.<init>:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)V
      StackMap locals:
      StackMap stack: org.mongodb.morphia.Key
         2: areturn
        end local 2 // java.lang.Object id
        end local 1 // java.lang.Class type
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/mongodb/morphia/mapping/Mapper;
            0    3     1  type  Ljava/lang/Class<TT;>;
            0    3     2    id  Ljava/lang/Object;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/Object;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
      Name  Flags
      type  final
      id    final

  public <T> org.mongodb.morphia.Key<T> refToKey(com.mongodb.DBRef);
    descriptor: (Lcom/mongodb/DBRef;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // com.mongodb.DBRef ref
         0: .line 568
            aload 1 /* ref */
            ifnonnull 1
            aconst_null
            goto 3
      StackMap locals:
      StackMap stack:
         1: new org.mongodb.morphia.Key
            dup
            aload 0 /* this */
            aload 1 /* ref */
            invokevirtual com.mongodb.DBRef.getCollectionName:()Ljava/lang/String;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getClassFromCollection:(Ljava/lang/String;)Ljava/lang/Class;
         2: .line 569
            aload 1 /* ref */
            invokevirtual com.mongodb.DBRef.getCollectionName:()Ljava/lang/String;
            aload 1 /* ref */
            invokevirtual com.mongodb.DBRef.getId:()Ljava/lang/Object;
            invokespecial org.mongodb.morphia.Key.<init>:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)V
         3: .line 568
      StackMap locals:
      StackMap stack: org.mongodb.morphia.Key
            areturn
        end local 1 // com.mongodb.DBRef ref
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lorg/mongodb/morphia/mapping/Mapper;
            0    4     1   ref  Lcom/mongodb/DBRef;
    Signature: <T:Ljava/lang/Object;>(Lcom/mongodb/DBRef;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
      Name  Flags
      ref   final

  public com.mongodb.DBObject toDBObject(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Lcom/mongodb/DBObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.Object entity
         0: .line 581
            aload 0 /* this */
            aload 1 /* entity */
            aconst_null
            invokevirtual org.mongodb.morphia.mapping.Mapper.toDBObject:(Ljava/lang/Object;Ljava/util/Map;)Lcom/mongodb/DBObject;
            areturn
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lorg/mongodb/morphia/mapping/Mapper;
            0    1     1  entity  Ljava/lang/Object;
    MethodParameters:
        Name  Flags
      entity  final

  public com.mongodb.DBObject toDBObject(, java.util.Map<java.lang.Object, com.mongodb.DBObject>);
    descriptor: (Ljava/lang/Object;Ljava/util/Map;)Lcom/mongodb/DBObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.Object entity
        start local 2 // java.util.Map involvedObjects
         0: .line 593
            aload 0 /* this */
            aload 1 /* entity */
            aload 2 /* involvedObjects */
            iconst_1
            invokevirtual org.mongodb.morphia.mapping.Mapper.toDBObject:(Ljava/lang/Object;Ljava/util/Map;Z)Lcom/mongodb/DBObject;
            areturn
        end local 2 // java.util.Map involvedObjects
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    1     0             this  Lorg/mongodb/morphia/mapping/Mapper;
            0    1     1           entity  Ljava/lang/Object;
            0    1     2  involvedObjects  Ljava/util/Map<Ljava/lang/Object;Lcom/mongodb/DBObject;>;
    Signature: (Ljava/lang/Object;Ljava/util/Map<Ljava/lang/Object;Lcom/mongodb/DBObject;>;)Lcom/mongodb/DBObject;
    MethodParameters:
                 Name  Flags
      entity           final
      involvedObjects  final

  public java.lang.Object toMongoObject(org.mongodb.morphia.mapping.MappedField, org.mongodb.morphia.mapping.MappedClass, java.lang.Object);
    descriptor: (Lorg/mongodb/morphia/mapping/MappedField;Lorg/mongodb/morphia/mapping/MappedClass;Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=9, args_size=4
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.mapping.MappedField mf
        start local 2 // org.mongodb.morphia.mapping.MappedClass mc
        start local 3 // java.lang.Object value
         0: .line 607
            aload 3 /* value */
            ifnonnull 2
         1: .line 608
            aconst_null
            areturn
         2: .line 611
      StackMap locals:
      StackMap stack:
            aload 3 /* value */
            astore 4 /* mappedValue */
        start local 4 // java.lang.Object mappedValue
         3: .line 613
            aload 3 /* value */
            instanceof org.mongodb.morphia.query.Query
            ifeq 6
         4: .line 614
            aload 3 /* value */
            checkcast org.mongodb.morphia.query.QueryImpl
            invokevirtual org.mongodb.morphia.query.QueryImpl.getQueryObject:()Lcom/mongodb/DBObject;
            astore 4 /* mappedValue */
         5: .line 615
            goto 72
      StackMap locals: java.lang.Object
      StackMap stack:
         6: aload 0 /* this */
            aload 1 /* mf */
            aload 3 /* value */
            invokevirtual org.mongodb.morphia.mapping.Mapper.isAssignable:(Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Object;)Z
            ifne 7
            aload 0 /* this */
            aload 2 /* mc */
            invokevirtual org.mongodb.morphia.mapping.Mapper.isEntity:(Lorg/mongodb/morphia/mapping/MappedClass;)Z
            ifeq 49
         7: .line 618
      StackMap locals:
      StackMap stack:
            aload 3 /* value */
            instanceof java.lang.Iterable
            ifeq 17
         8: .line 619
            aload 0 /* this */
            aload 1 /* mf */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getSubClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            astore 5 /* mapped */
        start local 5 // org.mongodb.morphia.mapping.MappedClass mapped
         9: .line 620
            aload 5 /* mapped */
            ifnull 12
            ldc Lorg/mongodb/morphia/Key;
            aload 5 /* mapped */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getClazz:()Ljava/lang/Class;
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifne 10
            aload 5 /* mapped */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getEntityAnnotation:()Lorg/mongodb/morphia/annotations/Entity;
            ifnull 12
        10: .line 621
      StackMap locals: org.mongodb.morphia.mapping.MappedClass
      StackMap stack:
            aload 0 /* this */
            aload 1 /* mf */
            aload 3 /* value */
            checkcast java.lang.Iterable
            invokevirtual org.mongodb.morphia.mapping.Mapper.getDBRefs:(Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Iterable;)Ljava/lang/Object;
            astore 4 /* mappedValue */
        11: .line 622
            goto 72
        12: .line 623
      StackMap locals:
      StackMap stack:
            aload 1 /* mf */
            ldc Lorg/mongodb/morphia/annotations/Reference;
            invokevirtual org.mongodb.morphia.mapping.MappedField.hasAnnotation:(Ljava/lang/Class;)Z
            ifeq 15
        13: .line 624
            aload 0 /* this */
            aload 1 /* mf */
            aload 3 /* value */
            checkcast java.lang.Iterable
            invokevirtual org.mongodb.morphia.mapping.Mapper.getDBRefs:(Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Iterable;)Ljava/lang/Object;
            astore 4 /* mappedValue */
        14: .line 625
            goto 72
        15: .line 626
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* value */
            iconst_0
            invokevirtual org.mongodb.morphia.mapping.Mapper.toMongoObject:(Ljava/lang/Object;Z)Ljava/lang/Object;
            astore 4 /* mappedValue */
        end local 5 // org.mongodb.morphia.mapping.MappedClass mapped
        16: .line 629
            goto 72
        17: .line 630
      StackMap locals:
      StackMap stack:
            aload 1 /* mf */
            ifnull 42
        18: .line 631
            aload 1 /* mf */
            ldc Lorg/mongodb/morphia/annotations/Reference;
            invokevirtual org.mongodb.morphia.mapping.MappedField.getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
            checkcast org.mongodb.morphia.annotations.Reference
            astore 5 /* refAnn */
        start local 5 // org.mongodb.morphia.annotations.Reference refAnn
        19: .line 632
            aconst_null
            astore 6 /* idType */
        start local 6 // java.lang.Class idType
        20: .line 633
            aload 1 /* mf */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getType:()Ljava/lang/Class;
            ldc Lorg/mongodb/morphia/Key;
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifne 22
            aload 0 /* this */
            aload 1 /* mf */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getType:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.mapping.Mapper.isMapped:(Ljava/lang/Class;)Z
            ifeq 22
        21: .line 634
            aload 0 /* this */
            aload 1 /* mf */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getType:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getMappedIdField:()Lorg/mongodb/morphia/mapping/MappedField;
            invokevirtual org.mongodb.morphia.mapping.MappedField.getType:()Ljava/lang/Class;
            astore 6 /* idType */
        22: .line 636
      StackMap locals: org.mongodb.morphia.annotations.Reference java.lang.Class
      StackMap stack:
            aload 4 /* mappedValue */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            aload 6 /* idType */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            istore 7 /* valueIsIdType */
        start local 7 // boolean valueIsIdType
        23: .line 637
            aload 5 /* refAnn */
            ifnull 34
        24: .line 638
            iload 7 /* valueIsIdType */
            ifne 42
        25: .line 639
            aload 3 /* value */
            instanceof org.mongodb.morphia.Key
            ifeq 26
            aload 3 /* value */
            checkcast org.mongodb.morphia.Key
            goto 27
      StackMap locals: int
      StackMap stack:
        26: aload 0 /* this */
            aload 3 /* value */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getKey:(Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
      StackMap locals:
      StackMap stack: org.mongodb.morphia.Key
        27: astore 8 /* key */
        start local 8 // org.mongodb.morphia.Key key
        28: .line 640
            aload 8 /* key */
            ifnull 42
        29: .line 641
            aload 5 /* refAnn */
            invokeinterface org.mongodb.morphia.annotations.Reference.idOnly:()Z
            ifeq 31
        30: .line 642
            aload 0 /* this */
            aload 8 /* key */
            invokevirtual org.mongodb.morphia.mapping.Mapper.keyToId:(Lorg/mongodb/morphia/Key;)Ljava/lang/Object;
            goto 32
        31: .line 643
      StackMap locals: org.mongodb.morphia.Key
      StackMap stack:
            aload 0 /* this */
            aload 8 /* key */
            invokevirtual org.mongodb.morphia.mapping.Mapper.keyToDBRef:(Lorg/mongodb/morphia/Key;)Lcom/mongodb/DBRef;
        32: .line 641
      StackMap locals:
      StackMap stack: java.lang.Object
            astore 4 /* mappedValue */
        end local 8 // org.mongodb.morphia.Key key
        33: .line 646
            goto 42
      StackMap locals:
      StackMap stack:
        34: aload 1 /* mf */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getType:()Ljava/lang/Class;
            ldc Lorg/mongodb/morphia/Key;
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifeq 42
        35: .line 647
            aload 0 /* this */
            iload 7 /* valueIsIdType */
            ifeq 37
        36: .line 648
            aload 0 /* this */
            aload 1 /* mf */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getSubClass:()Ljava/lang/Class;
            aload 3 /* value */
            invokevirtual org.mongodb.morphia.mapping.Mapper.createKey:(Ljava/lang/Class;Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
            goto 39
        37: .line 649
      StackMap locals:
      StackMap stack: org.mongodb.morphia.mapping.Mapper
            aload 3 /* value */
            instanceof org.mongodb.morphia.Key
            ifeq 38
            aload 3 /* value */
            checkcast org.mongodb.morphia.Key
            goto 39
      StackMap locals:
      StackMap stack: org.mongodb.morphia.mapping.Mapper
        38: aload 0 /* this */
            aload 3 /* value */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getKey:(Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
        39: .line 647
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MappedField org.mongodb.morphia.mapping.MappedClass java.lang.Object java.lang.Object org.mongodb.morphia.annotations.Reference java.lang.Class int
      StackMap stack: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.Key
            invokevirtual org.mongodb.morphia.mapping.Mapper.keyToDBRef:(Lorg/mongodb/morphia/Key;)Lcom/mongodb/DBRef;
            astore 4 /* mappedValue */
        40: .line 650
            aload 4 /* mappedValue */
            aload 3 /* value */
            if_acmpne 42
        41: .line 651
            new org.mongodb.morphia.query.ValidationException
            dup
            new java.lang.StringBuilder
            dup
            ldc "cannot map to Key<T> field: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* value */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial org.mongodb.morphia.query.ValidationException.<init>:(Ljava/lang/String;)V
            athrow
        end local 7 // boolean valueIsIdType
        end local 6 // java.lang.Class idType
        end local 5 // org.mongodb.morphia.annotations.Reference refAnn
        42: .line 656
      StackMap locals:
      StackMap stack:
            aload 4 /* mappedValue */
            aload 3 /* value */
            if_acmpne 72
        43: .line 657
            aload 0 /* this */
            aload 3 /* value */
            iconst_0
            invokevirtual org.mongodb.morphia.mapping.Mapper.toMongoObject:(Ljava/lang/Object;Z)Ljava/lang/Object;
            astore 4 /* mappedValue */
        44: .line 660
            goto 72
      StackMap locals:
      StackMap stack: java.lang.Exception
        45: astore 5 /* e */
        start local 5 // java.lang.Exception e
        46: .line 661
            getstatic org.mongodb.morphia.mapping.Mapper.LOG:Lorg/mongodb/morphia/logging/Logger;
            new java.lang.StringBuilder
            dup
            ldc "Error converting value("
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* value */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc ") to reference."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 5 /* e */
            invokeinterface org.mongodb.morphia.logging.Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
        47: .line 662
            aload 0 /* this */
            aload 3 /* value */
            iconst_0
            invokevirtual org.mongodb.morphia.mapping.Mapper.toMongoObject:(Ljava/lang/Object;Z)Ljava/lang/Object;
            astore 4 /* mappedValue */
        end local 5 // java.lang.Exception e
        48: .line 664
            goto 72
      StackMap locals:
      StackMap stack:
        49: aload 1 /* mf */
            ifnull 56
            aload 1 /* mf */
            ldc Lorg/mongodb/morphia/annotations/Serialized;
            invokevirtual org.mongodb.morphia.mapping.MappedField.hasAnnotation:(Ljava/lang/Class;)Z
            ifeq 56
        50: .line 666
            aload 3 /* value */
            aload 1 /* mf */
            ldc Lorg/mongodb/morphia/annotations/Serialized;
            invokevirtual org.mongodb.morphia.mapping.MappedField.getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
            checkcast org.mongodb.morphia.annotations.Serialized
            invokeinterface org.mongodb.morphia.annotations.Serialized.disableCompression:()Z
            ifeq 51
            iconst_0
            goto 52
      StackMap locals:
      StackMap stack: java.lang.Object
        51: iconst_1
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MappedField org.mongodb.morphia.mapping.MappedClass java.lang.Object java.lang.Object
      StackMap stack: java.lang.Object int
        52: invokestatic org.mongodb.morphia.mapping.Serializer.serialize:(Ljava/lang/Object;Z)[B
            astore 4 /* mappedValue */
        53: .line 667
            goto 72
      StackMap locals:
      StackMap stack: java.io.IOException
        54: astore 5 /* e */
        start local 5 // java.io.IOException e
        55: .line 668
            new java.lang.RuntimeException
            dup
            aload 5 /* e */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 5 // java.io.IOException e
        56: .line 670
      StackMap locals:
      StackMap stack:
            aload 3 /* value */
            instanceof com.mongodb.DBObject
            ifeq 59
        57: .line 671
            aload 3 /* value */
            astore 4 /* mappedValue */
        58: .line 672
            goto 72
        59: .line 673
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* value */
            aload 3 /* value */
            aload 4 /* mappedValue */
            aload 1 /* mf */
            invokestatic org.mongodb.morphia.mapping.EmbeddedMapper.shouldSaveClassName:(Ljava/lang/Object;Ljava/lang/Object;Lorg/mongodb/morphia/mapping/MappedField;)Z
            invokevirtual org.mongodb.morphia.mapping.Mapper.toMongoObject:(Ljava/lang/Object;Z)Ljava/lang/Object;
            astore 4 /* mappedValue */
        60: .line 674
            aload 4 /* mappedValue */
            instanceof com.mongodb.BasicDBList
            ifeq 70
        61: .line 675
            aload 4 /* mappedValue */
            checkcast com.mongodb.BasicDBList
            astore 5 /* list */
        start local 5 // com.mongodb.BasicDBList list
        62: .line 676
            aload 5 /* list */
            invokevirtual com.mongodb.BasicDBList.size:()I
            ifeq 72
        63: .line 677
            aload 0 /* this */
            aload 3 /* value */
            invokevirtual org.mongodb.morphia.mapping.Mapper.extractFirstElement:(Ljava/lang/Object;)Ljava/lang/Object;
            aload 5 /* list */
            iconst_0
            invokevirtual com.mongodb.BasicDBList.get:(I)Ljava/lang/Object;
            aload 1 /* mf */
            invokestatic org.mongodb.morphia.mapping.EmbeddedMapper.shouldSaveClassName:(Ljava/lang/Object;Ljava/lang/Object;Lorg/mongodb/morphia/mapping/MappedField;)Z
            ifne 72
        64: .line 678
            aload 5 /* list */
            invokevirtual com.mongodb.BasicDBList.iterator:()Ljava/util/Iterator;
            astore 7
            goto 68
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MappedField org.mongodb.morphia.mapping.MappedClass java.lang.Object java.lang.Object com.mongodb.BasicDBList top java.util.Iterator
      StackMap stack:
        65: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            astore 6 /* o */
        start local 6 // java.lang.Object o
        66: .line 679
            aload 6 /* o */
            instanceof com.mongodb.DBObject
            ifeq 68
        67: .line 680
            aload 6 /* o */
            checkcast com.mongodb.DBObject
            ldc "className"
            invokeinterface com.mongodb.DBObject.removeField:(Ljava/lang/String;)Ljava/lang/Object;
            pop
        end local 6 // java.lang.Object o
        68: .line 678
      StackMap locals:
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 65
        end local 5 // com.mongodb.BasicDBList list
        69: .line 685
            goto 72
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MappedField org.mongodb.morphia.mapping.MappedClass java.lang.Object java.lang.Object
      StackMap stack:
        70: aload 4 /* mappedValue */
            instanceof com.mongodb.DBObject
            ifeq 72
            aload 3 /* value */
            aload 4 /* mappedValue */
            aload 1 /* mf */
            invokestatic org.mongodb.morphia.mapping.EmbeddedMapper.shouldSaveClassName:(Ljava/lang/Object;Ljava/lang/Object;Lorg/mongodb/morphia/mapping/MappedField;)Z
            ifne 72
        71: .line 686
            aload 4 /* mappedValue */
            checkcast com.mongodb.DBObject
            ldc "className"
            invokeinterface com.mongodb.DBObject.removeField:(Ljava/lang/String;)Ljava/lang/Object;
            pop
        72: .line 690
      StackMap locals:
      StackMap stack:
            aload 4 /* mappedValue */
            areturn
        end local 4 // java.lang.Object mappedValue
        end local 3 // java.lang.Object value
        end local 2 // org.mongodb.morphia.mapping.MappedClass mc
        end local 1 // org.mongodb.morphia.mapping.MappedField mf
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   73     0           this  Lorg/mongodb/morphia/mapping/Mapper;
            0   73     1             mf  Lorg/mongodb/morphia/mapping/MappedField;
            0   73     2             mc  Lorg/mongodb/morphia/mapping/MappedClass;
            0   73     3          value  Ljava/lang/Object;
            3   73     4    mappedValue  Ljava/lang/Object;
            9   16     5         mapped  Lorg/mongodb/morphia/mapping/MappedClass;
           19   42     5         refAnn  Lorg/mongodb/morphia/annotations/Reference;
           20   42     6         idType  Ljava/lang/Class<*>;
           23   42     7  valueIsIdType  Z
           28   33     8            key  Lorg/mongodb/morphia/Key<*>;
           46   48     5              e  Ljava/lang/Exception;
           55   56     5              e  Ljava/io/IOException;
           62   69     5           list  Lcom/mongodb/BasicDBList;
           66   68     6              o  Ljava/lang/Object;
      Exception table:
        from    to  target  type
           7    44      45  Class java.lang.Exception
          50    53      54  Class java.io.IOException
    MethodParameters:
       Name  Flags
      mf     final
      mc     final
      value  final

  public java.lang.String updateCollection(org.mongodb.morphia.Key);
    descriptor: (Lorg/mongodb/morphia/Key;)Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.Key key
         0: .line 700
            aload 1 /* key */
            invokevirtual org.mongodb.morphia.Key.getCollection:()Ljava/lang/String;
            ifnonnull 2
            aload 1 /* key */
            invokevirtual org.mongodb.morphia.Key.getType:()Ljava/lang/Class;
            ifnonnull 2
         1: .line 701
            new java.lang.IllegalStateException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Key is invalid! "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 702
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            invokevirtual org.mongodb.morphia.Key.getCollection:()Ljava/lang/String;
            ifnonnull 4
         3: .line 703
            aload 1 /* key */
            aload 0 /* this */
            aload 1 /* key */
            invokevirtual org.mongodb.morphia.Key.getType:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getCollectionName:()Ljava/lang/String;
            invokevirtual org.mongodb.morphia.Key.setCollection:(Ljava/lang/String;)V
         4: .line 706
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            invokevirtual org.mongodb.morphia.Key.getCollection:()Ljava/lang/String;
            areturn
        end local 1 // org.mongodb.morphia.Key key
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lorg/mongodb/morphia/mapping/Mapper;
            0    5     1   key  Lorg/mongodb/morphia/Key;
    MethodParameters:
      Name  Flags
      key   final

  public void updateKeyAndVersionInfo(org.mongodb.morphia.Datastore, com.mongodb.DBObject, org.mongodb.morphia.mapping.cache.EntityCache, java.lang.Object);
    descriptor: (Lorg/mongodb/morphia/Datastore;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/cache/EntityCache;Ljava/lang/Object;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=9, args_size=5
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.Datastore datastore
        start local 2 // com.mongodb.DBObject dbObj
        start local 3 // org.mongodb.morphia.mapping.cache.EntityCache cache
        start local 4 // java.lang.Object entity
         0: .line 718
            aload 0 /* this */
            aload 4 /* entity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            astore 5 /* mc */
        start local 5 // org.mongodb.morphia.mapping.MappedClass mc
         1: .line 721
            aload 5 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getIdField:()Ljava/lang/reflect/Field;
            ifnull 16
            aload 2 /* dbObj */
            ifnull 16
            aload 2 /* dbObj */
            ldc "_id"
            invokeinterface com.mongodb.DBObject.get:(Ljava/lang/String;)Ljava/lang/Object;
            ifnull 16
         2: .line 723
            aload 5 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getMappedIdField:()Lorg/mongodb/morphia/mapping/MappedField;
            astore 6 /* mf */
        start local 6 // org.mongodb.morphia.mapping.MappedField mf
         3: .line 724
            aload 5 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getIdField:()Ljava/lang/reflect/Field;
            aload 4 /* entity */
            invokevirtual java.lang.reflect.Field.get:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 7 /* oldIdValue */
        start local 7 // java.lang.Object oldIdValue
         4: .line 725
            aload 0 /* this */
            aload 1 /* datastore */
            aload 6 /* mf */
            aload 4 /* entity */
            aload 3 /* cache */
            aload 2 /* dbObj */
            invokevirtual org.mongodb.morphia.mapping.Mapper.readMappedField:(Lorg/mongodb/morphia/Datastore;Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Object;Lorg/mongodb/morphia/mapping/cache/EntityCache;Lcom/mongodb/DBObject;)V
         5: .line 726
            aload 7 /* oldIdValue */
            ifnull 16
         6: .line 729
            aload 6 /* mf */
            aload 4 /* entity */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getFieldValue:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 8 /* dbIdValue */
        start local 8 // java.lang.Object dbIdValue
         7: .line 730
            aload 8 /* dbIdValue */
            aload 7 /* oldIdValue */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifne 16
         8: .line 731
            aload 6 /* mf */
            aload 4 /* entity */
            aload 7 /* oldIdValue */
            invokevirtual org.mongodb.morphia.mapping.MappedField.setFieldValue:(Ljava/lang/Object;Ljava/lang/Object;)V
         9: .line 732
            new java.lang.RuntimeException
            dup
            ldc "@Id mismatch: %s != %s for %s"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
            aload 7 /* oldIdValue */
            aastore
            dup
            iconst_1
            aload 8 /* dbIdValue */
            aastore
            dup
            iconst_2
        10: .line 733
            aload 4 /* entity */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            aastore
        11: .line 732
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        end local 8 // java.lang.Object dbIdValue
        end local 7 // java.lang.Object oldIdValue
        end local 6 // org.mongodb.morphia.mapping.MappedField mf
        12: .line 736
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.Datastore com.mongodb.DBObject org.mongodb.morphia.mapping.cache.EntityCache java.lang.Object org.mongodb.morphia.mapping.MappedClass
      StackMap stack: java.lang.Exception
            astore 6 /* e */
        start local 6 // java.lang.Exception e
        13: .line 737
            aload 6 /* e */
            instanceof java.lang.RuntimeException
            ifeq 15
        14: .line 738
            aload 6 /* e */
            checkcast java.lang.RuntimeException
            athrow
        15: .line 741
      StackMap locals: java.lang.Exception
      StackMap stack:
            new java.lang.RuntimeException
            dup
            ldc "Error setting @Id field after save/insert."
            aload 6 /* e */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 6 // java.lang.Exception e
        16: .line 744
      StackMap locals:
      StackMap stack:
            aload 5 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getMappedVersionField:()Lorg/mongodb/morphia/mapping/MappedField;
            ifnull 18
            aload 2 /* dbObj */
            ifnull 18
        17: .line 745
            aload 0 /* this */
            aload 1 /* datastore */
            aload 5 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getMappedVersionField:()Lorg/mongodb/morphia/mapping/MappedField;
            aload 4 /* entity */
            aload 3 /* cache */
            aload 2 /* dbObj */
            invokevirtual org.mongodb.morphia.mapping.Mapper.readMappedField:(Lorg/mongodb/morphia/Datastore;Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Object;Lorg/mongodb/morphia/mapping/cache/EntityCache;Lcom/mongodb/DBObject;)V
        18: .line 747
      StackMap locals:
      StackMap stack:
            return
        end local 5 // org.mongodb.morphia.mapping.MappedClass mc
        end local 4 // java.lang.Object entity
        end local 3 // org.mongodb.morphia.mapping.cache.EntityCache cache
        end local 2 // com.mongodb.DBObject dbObj
        end local 1 // org.mongodb.morphia.Datastore datastore
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   19     0        this  Lorg/mongodb/morphia/mapping/Mapper;
            0   19     1   datastore  Lorg/mongodb/morphia/Datastore;
            0   19     2       dbObj  Lcom/mongodb/DBObject;
            0   19     3       cache  Lorg/mongodb/morphia/mapping/cache/EntityCache;
            0   19     4      entity  Ljava/lang/Object;
            1   19     5          mc  Lorg/mongodb/morphia/mapping/MappedClass;
            3   12     6          mf  Lorg/mongodb/morphia/mapping/MappedField;
            4   12     7  oldIdValue  Ljava/lang/Object;
            7   12     8   dbIdValue  Ljava/lang/Object;
           13   16     6           e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           2    12      12  Class java.lang.Exception
    MethodParameters:
           Name  Flags
      datastore  final
      dbObj      final
      cache      final
      entity     final

  protected org.mongodb.morphia.mapping.lazy.LazyProxyFactory getProxyFactory();
    descriptor: ()Lorg/mongodb/morphia/mapping/lazy/LazyProxyFactory;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.mapping.Mapper this
         0: .line 750
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.proxyFactory:Lorg/mongodb/morphia/mapping/lazy/LazyProxyFactory;
            areturn
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/mapping/Mapper;

  private void addConverters(org.mongodb.morphia.mapping.MappedClass);
    descriptor: (Lorg/mongodb/morphia/mapping/MappedClass;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=10, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.mapping.MappedClass mc
         0: .line 754
            aload 1 /* mc */
            ldc Lorg/mongodb/morphia/annotations/Converters;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getAnnotations:(Ljava/lang/Class;)Ljava/util/List;
            astore 2 /* convertersList */
        start local 2 // java.util.List convertersList
         1: .line 755
            aload 2 /* convertersList */
            ifnull 13
         2: .line 756
            aload 2 /* convertersList */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 4
            goto 12
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MappedClass java.util.List top java.util.Iterator
      StackMap stack:
         3: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.annotation.Annotation
            astore 3 /* a */
        start local 3 // java.lang.annotation.Annotation a
         4: .line 757
            aload 3 /* a */
            checkcast org.mongodb.morphia.annotations.Converters
            astore 5 /* c */
        start local 5 // org.mongodb.morphia.annotations.Converters c
         5: .line 758
            aload 5 /* c */
            ifnull 12
         6: .line 759
            aload 5 /* c */
            invokeinterface org.mongodb.morphia.annotations.Converters.value:()[Ljava/lang/Class;
            dup
            astore 9
            arraylength
            istore 8
            iconst_0
            istore 7
            goto 11
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MappedClass java.util.List java.lang.annotation.Annotation java.util.Iterator org.mongodb.morphia.annotations.Converters top int int java.lang.Class[]
      StackMap stack:
         7: aload 9
            iload 7
            aaload
            astore 6 /* clazz */
        start local 6 // java.lang.Class clazz
         8: .line 760
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getConverters:()Lorg/mongodb/morphia/converters/Converters;
            aload 6 /* clazz */
            invokevirtual org.mongodb.morphia.converters.Converters.isRegistered:(Ljava/lang/Class;)Z
            ifne 10
         9: .line 761
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getConverters:()Lorg/mongodb/morphia/converters/Converters;
            aload 6 /* clazz */
            invokevirtual org.mongodb.morphia.converters.Converters.addConverter:(Ljava/lang/Class;)Lorg/mongodb/morphia/converters/TypeConverter;
            pop
        end local 6 // java.lang.Class clazz
        10: .line 759
      StackMap locals:
      StackMap stack:
            iinc 7 1
      StackMap locals:
      StackMap stack:
        11: iload 7
            iload 8
            if_icmplt 7
        end local 5 // org.mongodb.morphia.annotations.Converters c
        end local 3 // java.lang.annotation.Annotation a
        12: .line 756
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MappedClass java.util.List top java.util.Iterator
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
        13: .line 768
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MappedClass java.util.List
      StackMap stack:
            return
        end local 2 // java.util.List convertersList
        end local 1 // org.mongodb.morphia.mapping.MappedClass mc
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   14     0            this  Lorg/mongodb/morphia/mapping/Mapper;
            0   14     1              mc  Lorg/mongodb/morphia/mapping/MappedClass;
            1   14     2  convertersList  Ljava/util/List<Ljava/lang/annotation/Annotation;>;
            4   12     3               a  Ljava/lang/annotation/Annotation;
            5   12     5               c  Lorg/mongodb/morphia/annotations/Converters;
            8   10     6           clazz  Ljava/lang/Class<+Lorg/mongodb/morphia/converters/TypeConverter;>;
    MethodParameters:
      Name  Flags
      mc    final

  private org.mongodb.morphia.mapping.MappedClass addMappedClass(org.mongodb.morphia.mapping.MappedClass, boolean);
    descriptor: (Lorg/mongodb/morphia/mapping/MappedClass;Z)Lorg/mongodb/morphia/mapping/MappedClass;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=5, args_size=3
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.mapping.MappedClass mc
        start local 2 // boolean validate
         0: .line 774
            aload 0 /* this */
            aload 1 /* mc */
            invokevirtual org.mongodb.morphia.mapping.Mapper.addConverters:(Lorg/mongodb/morphia/mapping/MappedClass;)V
         1: .line 776
            iload 2 /* validate */
            ifeq 3
            aload 1 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.isInterface:()Z
            ifne 3
         2: .line 777
            aload 1 /* mc */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.validate:(Lorg/mongodb/morphia/mapping/Mapper;)V
         3: .line 780
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.mappedClasses:Ljava/util/Map;
            aload 1 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getClazz:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            aload 1 /* mc */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         4: .line 782
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.mappedClassesByCollection:Ljava/util/concurrent/ConcurrentHashMap;
            aload 1 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getCollectionName:()Ljava/lang/String;
            invokevirtual java.util.concurrent.ConcurrentHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Set
            astore 3 /* mcs */
        start local 3 // java.util.Set mcs
         5: .line 783
            aload 3 /* mcs */
            ifnonnull 10
         6: .line 784
            new java.util.concurrent.CopyOnWriteArraySet
            dup
            invokespecial java.util.concurrent.CopyOnWriteArraySet.<init>:()V
            astore 3 /* mcs */
         7: .line 785
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.mappedClassesByCollection:Ljava/util/concurrent/ConcurrentHashMap;
            aload 1 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getCollectionName:()Ljava/lang/String;
            aload 3 /* mcs */
            invokevirtual java.util.concurrent.ConcurrentHashMap.putIfAbsent:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Set
            astore 4 /* temp */
        start local 4 // java.util.Set temp
         8: .line 786
            aload 4 /* temp */
            ifnull 10
         9: .line 787
            aload 4 /* temp */
            astore 3 /* mcs */
        end local 4 // java.util.Set temp
        10: .line 791
      StackMap locals: java.util.Set
      StackMap stack:
            aload 3 /* mcs */
            aload 1 /* mc */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        11: .line 793
            aload 1 /* mc */
            areturn
        end local 3 // java.util.Set mcs
        end local 2 // boolean validate
        end local 1 // org.mongodb.morphia.mapping.MappedClass mc
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   12     0      this  Lorg/mongodb/morphia/mapping/Mapper;
            0   12     1        mc  Lorg/mongodb/morphia/mapping/MappedClass;
            0   12     2  validate  Z
            5   12     3       mcs  Ljava/util/Set<Lorg/mongodb/morphia/mapping/MappedClass;>;
            8   10     4      temp  Ljava/util/Set<Lorg/mongodb/morphia/mapping/MappedClass;>;
    MethodParameters:
          Name  Flags
      mc        final
      validate  final

  private java.lang.Object extractFirstElement(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.Object value
         0: .line 797
            aload 1 /* value */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.isArray:()Z
            ifeq 1
            aload 1 /* value */
            iconst_0
            invokestatic java.lang.reflect.Array.get:(Ljava/lang/Object;I)Ljava/lang/Object;
            goto 2
      StackMap locals:
      StackMap stack:
         1: aload 1 /* value */
            checkcast java.lang.Iterable
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
      StackMap locals:
      StackMap stack: java.lang.Object
         2: areturn
        end local 1 // java.lang.Object value
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    3     0   this  Lorg/mongodb/morphia/mapping/Mapper;
            0    3     1  value  Ljava/lang/Object;
    MethodParameters:
       Name  Flags
      value  final

  private java.lang.Object getDBRefs(org.mongodb.morphia.mapping.MappedField, java.lang.Iterable);
    descriptor: (Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Iterable;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=9, args_size=3
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.mapping.MappedField field
        start local 2 // java.lang.Iterable value
         0: .line 801
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 3 /* refs */
        start local 3 // java.util.List refs
         1: .line 802
            aload 1 /* field */
            ldc Lorg/mongodb/morphia/annotations/Reference;
            invokevirtual org.mongodb.morphia.mapping.MappedField.getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
            checkcast org.mongodb.morphia.annotations.Reference
            astore 4 /* annotation */
        start local 4 // org.mongodb.morphia.annotations.Reference annotation
         2: .line 803
            aload 4 /* annotation */
            ifnull 3
            aload 4 /* annotation */
            invokeinterface org.mongodb.morphia.annotations.Reference.idOnly:()Z
            ifeq 3
            iconst_1
            goto 4
      StackMap locals: java.util.List org.mongodb.morphia.annotations.Reference
      StackMap stack:
         3: iconst_0
      StackMap locals:
      StackMap stack: int
         4: istore 5 /* idOnly */
        start local 5 // boolean idOnly
         5: .line 804
            aload 2 /* value */
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 7
            goto 13
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MappedField java.lang.Iterable java.util.List org.mongodb.morphia.annotations.Reference int top java.util.Iterator
      StackMap stack:
         6: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            astore 6 /* o */
        start local 6 // java.lang.Object o
         7: .line 805
            aload 6 /* o */
            instanceof org.mongodb.morphia.Key
            ifeq 8
            aload 6 /* o */
            checkcast org.mongodb.morphia.Key
            goto 9
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MappedField java.lang.Iterable java.util.List org.mongodb.morphia.annotations.Reference int java.lang.Object java.util.Iterator
      StackMap stack:
         8: aload 0 /* this */
            aload 6 /* o */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getKey:(Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
      StackMap locals:
      StackMap stack: org.mongodb.morphia.Key
         9: astore 8 /* key */
        start local 8 // org.mongodb.morphia.Key key
        10: .line 806
            aload 3 /* refs */
            iload 5 /* idOnly */
            ifeq 11
            aload 8 /* key */
            invokevirtual org.mongodb.morphia.Key.getId:()Ljava/lang/Object;
            goto 12
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MappedField java.lang.Iterable java.util.List org.mongodb.morphia.annotations.Reference int java.lang.Object java.util.Iterator org.mongodb.morphia.Key
      StackMap stack: java.util.List
        11: aload 0 /* this */
            aload 8 /* key */
            invokevirtual org.mongodb.morphia.mapping.Mapper.keyToDBRef:(Lorg/mongodb/morphia/Key;)Lcom/mongodb/DBRef;
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MappedField java.lang.Iterable java.util.List org.mongodb.morphia.annotations.Reference int java.lang.Object java.util.Iterator org.mongodb.morphia.Key
      StackMap stack: java.util.List java.lang.Object
        12: invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 8 // org.mongodb.morphia.Key key
        end local 6 // java.lang.Object o
        13: .line 804
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MappedField java.lang.Iterable java.util.List org.mongodb.morphia.annotations.Reference int top java.util.Iterator
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 6
        14: .line 808
            aload 3 /* refs */
            areturn
        end local 5 // boolean idOnly
        end local 4 // org.mongodb.morphia.annotations.Reference annotation
        end local 3 // java.util.List refs
        end local 2 // java.lang.Iterable value
        end local 1 // org.mongodb.morphia.mapping.MappedField field
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   15     0        this  Lorg/mongodb/morphia/mapping/Mapper;
            0   15     1       field  Lorg/mongodb/morphia/mapping/MappedField;
            0   15     2       value  Ljava/lang/Iterable;
            1   15     3        refs  Ljava/util/List<Ljava/lang/Object;>;
            2   15     4  annotation  Lorg/mongodb/morphia/annotations/Reference;
            5   15     5      idOnly  Z
            7   13     6           o  Ljava/lang/Object;
           10   13     8         key  Lorg/mongodb/morphia/Key<*>;
    MethodParameters:
       Name  Flags
      field  final
      value  final

  private java.lang.Class<? extends java.lang.annotation.Annotation> getFieldAnnotation(org.mongodb.morphia.mapping.MappedField);
    descriptor: (Lorg/mongodb/morphia/mapping/MappedField;)Ljava/lang/Class;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=7, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.mapping.MappedField mf
         0: .line 812
            aconst_null
            astore 2 /* annType */
        start local 2 // java.lang.Class annType
         1: .line 813
            iconst_4
            anewarray java.lang.Class
            dup
            iconst_0
            ldc Lorg/mongodb/morphia/annotations/Property;
            aastore
            dup
            iconst_1
            ldc Lorg/mongodb/morphia/annotations/Embedded;
            aastore
            dup
            iconst_2
            ldc Lorg/mongodb/morphia/annotations/Serialized;
            aastore
            dup
            iconst_3
            ldc Lorg/mongodb/morphia/annotations/Reference;
            aastore
            dup
            astore 6
            arraylength
            istore 5
            iconst_0
            istore 4
            goto 7
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MappedField java.lang.Class top int int java.lang.Class[]
      StackMap stack:
         2: aload 6
            iload 4
            aaload
            astore 3 /* testType */
        start local 3 // java.lang.Class testType
         3: .line 814
            aload 1 /* mf */
            aload 3 /* testType */
            invokevirtual org.mongodb.morphia.mapping.MappedField.hasAnnotation:(Ljava/lang/Class;)Z
            ifeq 6
         4: .line 815
            aload 3 /* testType */
            astore 2 /* annType */
         5: .line 816
            goto 8
        end local 3 // java.lang.Class testType
         6: .line 813
      StackMap locals:
      StackMap stack:
            iinc 4 1
      StackMap locals:
      StackMap stack:
         7: iload 4
            iload 5
            if_icmplt 2
         8: .line 819
      StackMap locals: org.mongodb.morphia.mapping.Mapper org.mongodb.morphia.mapping.MappedField java.lang.Class
      StackMap stack:
            aload 2 /* annType */
            areturn
        end local 2 // java.lang.Class annType
        end local 1 // org.mongodb.morphia.mapping.MappedField mf
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    9     0      this  Lorg/mongodb/morphia/mapping/Mapper;
            0    9     1        mf  Lorg/mongodb/morphia/mapping/MappedField;
            1    9     2   annType  Ljava/lang/Class<+Ljava/lang/annotation/Annotation;>;
            3    6     3  testType  Ljava/lang/Class<+Ljava/lang/annotation/Annotation;>;
    Signature: (Lorg/mongodb/morphia/mapping/MappedField;)Ljava/lang/Class<+Ljava/lang/annotation/Annotation;>;
    MethodParameters:
      Name  Flags
      mf    final

  private boolean isAssignable(org.mongodb.morphia.mapping.MappedField, java.lang.Object);
    descriptor: (Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Object;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.mapping.MappedField mf
        start local 2 // java.lang.Object value
         0: .line 823
            aload 1 /* mf */
            ifnull 4
         1: .line 824
            aload 1 /* mf */
            ldc Lorg/mongodb/morphia/annotations/Reference;
            invokevirtual org.mongodb.morphia.mapping.MappedField.hasAnnotation:(Ljava/lang/Class;)Z
            ifne 3
            ldc Lorg/mongodb/morphia/Key;
            aload 1 /* mf */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getType:()Ljava/lang/Class;
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifne 3
         2: .line 825
            ldc Lcom/mongodb/DBRef;
            aload 1 /* mf */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getType:()Ljava/lang/Class;
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifne 3
            aload 0 /* this */
            aload 1 /* mf */
            aload 2 /* value */
            invokevirtual org.mongodb.morphia.mapping.Mapper.isMultiValued:(Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Object;)Z
            ifeq 4
         3: .line 823
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         4: iconst_0
            ireturn
        end local 2 // java.lang.Object value
        end local 1 // org.mongodb.morphia.mapping.MappedField mf
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    5     0   this  Lorg/mongodb/morphia/mapping/Mapper;
            0    5     1     mf  Lorg/mongodb/morphia/mapping/MappedField;
            0    5     2  value  Ljava/lang/Object;
    MethodParameters:
       Name  Flags
      mf     final
      value  final

  private boolean isEntity(org.mongodb.morphia.mapping.MappedClass);
    descriptor: (Lorg/mongodb/morphia/mapping/MappedClass;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.mapping.MappedClass mc
         0: .line 830
            aload 1 /* mc */
            ifnull 1
            aload 1 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getEntityAnnotation:()Lorg/mongodb/morphia/annotations/Entity;
            ifnull 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 1 // org.mongodb.morphia.mapping.MappedClass mc
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/mongodb/morphia/mapping/Mapper;
            0    2     1    mc  Lorg/mongodb/morphia/mapping/MappedClass;
    MethodParameters:
      Name  Flags
      mc    final

  private boolean isMultiValued(org.mongodb.morphia.mapping.MappedField, java.lang.Object);
    descriptor: (Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Object;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=3
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.mapping.MappedField mf
        start local 2 // java.lang.Object value
         0: .line 834
            aload 1 /* mf */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getSubClass:()Ljava/lang/Class;
            astore 3 /* subClass */
        start local 3 // java.lang.Class subClass
         1: .line 835
            aload 2 /* value */
            instanceof java.lang.Iterable
            ifeq 5
         2: .line 836
            aload 1 /* mf */
            invokevirtual org.mongodb.morphia.mapping.MappedField.isMultipleValues:()Z
            ifeq 5
         3: .line 837
            ldc Lorg/mongodb/morphia/Key;
            aload 3 /* subClass */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifne 4
            ldc Lcom/mongodb/DBRef;
            aload 3 /* subClass */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 5
         4: .line 835
      StackMap locals: java.lang.Class
      StackMap stack:
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         5: iconst_0
            ireturn
        end local 3 // java.lang.Class subClass
        end local 2 // java.lang.Object value
        end local 1 // org.mongodb.morphia.mapping.MappedField mf
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    6     0      this  Lorg/mongodb/morphia/mapping/Mapper;
            0    6     1        mf  Lorg/mongodb/morphia/mapping/MappedField;
            0    6     2     value  Ljava/lang/Object;
            1    6     3  subClass  Ljava/lang/Class;
    MethodParameters:
       Name  Flags
      mf     final
      value  final

  private void readMappedField(org.mongodb.morphia.Datastore, org.mongodb.morphia.mapping.MappedField, java.lang.Object, org.mongodb.morphia.mapping.cache.EntityCache, com.mongodb.DBObject);
    descriptor: (Lorg/mongodb/morphia/Datastore;Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Object;Lorg/mongodb/morphia/mapping/cache/EntityCache;Lcom/mongodb/DBObject;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=6, args_size=6
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.Datastore datastore
        start local 2 // org.mongodb.morphia.mapping.MappedField mf
        start local 3 // java.lang.Object entity
        start local 4 // org.mongodb.morphia.mapping.cache.EntityCache cache
        start local 5 // com.mongodb.DBObject dbObject
         0: .line 842
            aload 2 /* mf */
            ldc Lorg/mongodb/morphia/annotations/Property;
            invokevirtual org.mongodb.morphia.mapping.MappedField.hasAnnotation:(Ljava/lang/Class;)Z
            ifne 2
            aload 2 /* mf */
            ldc Lorg/mongodb/morphia/annotations/Serialized;
            invokevirtual org.mongodb.morphia.mapping.MappedField.hasAnnotation:(Ljava/lang/Class;)Z
            ifne 2
         1: .line 843
            aload 2 /* mf */
            invokevirtual org.mongodb.morphia.mapping.MappedField.isTypeMongoCompatible:()Z
            ifne 2
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getConverters:()Lorg/mongodb/morphia/converters/Converters;
            aload 2 /* mf */
            invokevirtual org.mongodb.morphia.converters.Converters.hasSimpleValueConverter:(Lorg/mongodb/morphia/mapping/MappedField;)Z
            ifeq 4
         2: .line 844
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.opts:Lorg/mongodb/morphia/mapping/MapperOptions;
            invokevirtual org.mongodb.morphia.mapping.MapperOptions.getValueMapper:()Lorg/mongodb/morphia/mapping/CustomMapper;
            aload 1 /* datastore */
            aload 5 /* dbObject */
            aload 2 /* mf */
            aload 3 /* entity */
            aload 4 /* cache */
            aload 0 /* this */
            invokeinterface org.mongodb.morphia.mapping.CustomMapper.fromDBObject:(Lorg/mongodb/morphia/Datastore;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Object;Lorg/mongodb/morphia/mapping/cache/EntityCache;Lorg/mongodb/morphia/mapping/Mapper;)V
         3: .line 845
            goto 11
      StackMap locals:
      StackMap stack:
         4: aload 2 /* mf */
            ldc Lorg/mongodb/morphia/annotations/Embedded;
            invokevirtual org.mongodb.morphia.mapping.MappedField.hasAnnotation:(Ljava/lang/Class;)Z
            ifeq 7
         5: .line 846
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.opts:Lorg/mongodb/morphia/mapping/MapperOptions;
            invokevirtual org.mongodb.morphia.mapping.MapperOptions.getEmbeddedMapper:()Lorg/mongodb/morphia/mapping/CustomMapper;
            aload 1 /* datastore */
            aload 5 /* dbObject */
            aload 2 /* mf */
            aload 3 /* entity */
            aload 4 /* cache */
            aload 0 /* this */
            invokeinterface org.mongodb.morphia.mapping.CustomMapper.fromDBObject:(Lorg/mongodb/morphia/Datastore;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Object;Lorg/mongodb/morphia/mapping/cache/EntityCache;Lorg/mongodb/morphia/mapping/Mapper;)V
         6: .line 847
            goto 11
      StackMap locals:
      StackMap stack:
         7: aload 2 /* mf */
            ldc Lorg/mongodb/morphia/annotations/Reference;
            invokevirtual org.mongodb.morphia.mapping.MappedField.hasAnnotation:(Ljava/lang/Class;)Z
            ifeq 10
         8: .line 848
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.opts:Lorg/mongodb/morphia/mapping/MapperOptions;
            invokevirtual org.mongodb.morphia.mapping.MapperOptions.getReferenceMapper:()Lorg/mongodb/morphia/mapping/CustomMapper;
            aload 1 /* datastore */
            aload 5 /* dbObject */
            aload 2 /* mf */
            aload 3 /* entity */
            aload 4 /* cache */
            aload 0 /* this */
            invokeinterface org.mongodb.morphia.mapping.CustomMapper.fromDBObject:(Lorg/mongodb/morphia/Datastore;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Object;Lorg/mongodb/morphia/mapping/cache/EntityCache;Lorg/mongodb/morphia/mapping/Mapper;)V
         9: .line 849
            goto 11
        10: .line 850
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.opts:Lorg/mongodb/morphia/mapping/MapperOptions;
            invokevirtual org.mongodb.morphia.mapping.MapperOptions.getDefaultMapper:()Lorg/mongodb/morphia/mapping/CustomMapper;
            aload 1 /* datastore */
            aload 5 /* dbObject */
            aload 2 /* mf */
            aload 3 /* entity */
            aload 4 /* cache */
            aload 0 /* this */
            invokeinterface org.mongodb.morphia.mapping.CustomMapper.fromDBObject:(Lorg/mongodb/morphia/Datastore;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Object;Lorg/mongodb/morphia/mapping/cache/EntityCache;Lorg/mongodb/morphia/mapping/Mapper;)V
        11: .line 852
      StackMap locals:
      StackMap stack:
            return
        end local 5 // com.mongodb.DBObject dbObject
        end local 4 // org.mongodb.morphia.mapping.cache.EntityCache cache
        end local 3 // java.lang.Object entity
        end local 2 // org.mongodb.morphia.mapping.MappedField mf
        end local 1 // org.mongodb.morphia.Datastore datastore
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   12     0       this  Lorg/mongodb/morphia/mapping/Mapper;
            0   12     1  datastore  Lorg/mongodb/morphia/Datastore;
            0   12     2         mf  Lorg/mongodb/morphia/mapping/MappedField;
            0   12     3     entity  Ljava/lang/Object;
            0   12     4      cache  Lorg/mongodb/morphia/mapping/cache/EntityCache;
            0   12     5   dbObject  Lcom/mongodb/DBObject;
    MethodParameters:
           Name  Flags
      datastore  final
      mf         final
      entity     final
      cache      final
      dbObject   final

  private void writeMappedField(com.mongodb.DBObject, org.mongodb.morphia.mapping.MappedField, , java.util.Map<java.lang.Object, com.mongodb.DBObject>);
    descriptor: (Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Object;Ljava/util/Map;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=6, args_size=5
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // com.mongodb.DBObject dbObject
        start local 2 // org.mongodb.morphia.mapping.MappedField mf
        start local 3 // java.lang.Object entity
        start local 4 // java.util.Map involvedObjects
         0: .line 858
            aload 2 /* mf */
            ldc Lorg/mongodb/morphia/annotations/NotSaved;
            invokevirtual org.mongodb.morphia.mapping.MappedField.hasAnnotation:(Ljava/lang/Class;)Z
            ifeq 2
         1: .line 859
            return
         2: .line 863
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* mf */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getFieldAnnotation:(Lorg/mongodb/morphia/mapping/MappedField;)Ljava/lang/Class;
            astore 5 /* annType */
        start local 5 // java.lang.Class annType
         3: .line 865
            ldc Lorg/mongodb/morphia/annotations/Property;
            aload 5 /* annType */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifne 5
            ldc Lorg/mongodb/morphia/annotations/Serialized;
            aload 5 /* annType */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifne 5
            aload 2 /* mf */
            invokevirtual org.mongodb.morphia.mapping.MappedField.isTypeMongoCompatible:()Z
            ifne 5
         4: .line 866
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getConverters:()Lorg/mongodb/morphia/converters/Converters;
            aload 2 /* mf */
            invokevirtual org.mongodb.morphia.converters.Converters.hasSimpleValueConverter:(Lorg/mongodb/morphia/mapping/MappedField;)Z
            ifne 5
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getConverters:()Lorg/mongodb/morphia/converters/Converters;
            aload 2 /* mf */
            aload 3 /* entity */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getFieldValue:(Ljava/lang/Object;)Ljava/lang/Object;
            invokevirtual org.mongodb.morphia.converters.Converters.hasSimpleValueConverter:(Ljava/lang/Object;)Z
            ifeq 7
         5: .line 867
      StackMap locals: java.lang.Class
      StackMap stack:
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.opts:Lorg/mongodb/morphia/mapping/MapperOptions;
            invokevirtual org.mongodb.morphia.mapping.MapperOptions.getValueMapper:()Lorg/mongodb/morphia/mapping/CustomMapper;
            aload 3 /* entity */
            aload 2 /* mf */
            aload 1 /* dbObject */
            aload 4 /* involvedObjects */
            aload 0 /* this */
            invokeinterface org.mongodb.morphia.mapping.CustomMapper.toDBObject:(Ljava/lang/Object;Lorg/mongodb/morphia/mapping/MappedField;Lcom/mongodb/DBObject;Ljava/util/Map;Lorg/mongodb/morphia/mapping/Mapper;)V
         6: .line 868
            goto 16
      StackMap locals:
      StackMap stack:
         7: ldc Lorg/mongodb/morphia/annotations/Reference;
            aload 5 /* annType */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifeq 10
         8: .line 869
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.opts:Lorg/mongodb/morphia/mapping/MapperOptions;
            invokevirtual org.mongodb.morphia.mapping.MapperOptions.getReferenceMapper:()Lorg/mongodb/morphia/mapping/CustomMapper;
            aload 3 /* entity */
            aload 2 /* mf */
            aload 1 /* dbObject */
            aload 4 /* involvedObjects */
            aload 0 /* this */
            invokeinterface org.mongodb.morphia.mapping.CustomMapper.toDBObject:(Ljava/lang/Object;Lorg/mongodb/morphia/mapping/MappedField;Lcom/mongodb/DBObject;Ljava/util/Map;Lorg/mongodb/morphia/mapping/Mapper;)V
         9: .line 870
            goto 16
      StackMap locals:
      StackMap stack:
        10: ldc Lorg/mongodb/morphia/annotations/Embedded;
            aload 5 /* annType */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifeq 13
        11: .line 871
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.opts:Lorg/mongodb/morphia/mapping/MapperOptions;
            invokevirtual org.mongodb.morphia.mapping.MapperOptions.getEmbeddedMapper:()Lorg/mongodb/morphia/mapping/CustomMapper;
            aload 3 /* entity */
            aload 2 /* mf */
            aload 1 /* dbObject */
            aload 4 /* involvedObjects */
            aload 0 /* this */
            invokeinterface org.mongodb.morphia.mapping.CustomMapper.toDBObject:(Ljava/lang/Object;Lorg/mongodb/morphia/mapping/MappedField;Lcom/mongodb/DBObject;Ljava/util/Map;Lorg/mongodb/morphia/mapping/Mapper;)V
        12: .line 872
            goto 16
        13: .line 873
      StackMap locals:
      StackMap stack:
            getstatic org.mongodb.morphia.mapping.Mapper.LOG:Lorg/mongodb/morphia/logging/Logger;
            invokeinterface org.mongodb.morphia.logging.Logger.isDebugEnabled:()Z
            ifeq 15
        14: .line 874
            getstatic org.mongodb.morphia.mapping.Mapper.LOG:Lorg/mongodb/morphia/logging/Logger;
            new java.lang.StringBuilder
            dup
            ldc "No annotation was found, using default mapper "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.opts:Lorg/mongodb/morphia/mapping/MapperOptions;
            invokevirtual org.mongodb.morphia.mapping.MapperOptions.getDefaultMapper:()Lorg/mongodb/morphia/mapping/CustomMapper;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc " for "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 2 /* mf */
            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
        15: .line 876
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.mongodb.morphia.mapping.Mapper.opts:Lorg/mongodb/morphia/mapping/MapperOptions;
            invokevirtual org.mongodb.morphia.mapping.MapperOptions.getDefaultMapper:()Lorg/mongodb/morphia/mapping/CustomMapper;
            aload 3 /* entity */
            aload 2 /* mf */
            aload 1 /* dbObject */
            aload 4 /* involvedObjects */
            aload 0 /* this */
            invokeinterface org.mongodb.morphia.mapping.CustomMapper.toDBObject:(Ljava/lang/Object;Lorg/mongodb/morphia/mapping/MappedField;Lcom/mongodb/DBObject;Ljava/util/Map;Lorg/mongodb/morphia/mapping/Mapper;)V
        16: .line 879
      StackMap locals:
      StackMap stack:
            return
        end local 5 // java.lang.Class annType
        end local 4 // java.util.Map involvedObjects
        end local 3 // java.lang.Object entity
        end local 2 // org.mongodb.morphia.mapping.MappedField mf
        end local 1 // com.mongodb.DBObject dbObject
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   17     0             this  Lorg/mongodb/morphia/mapping/Mapper;
            0   17     1         dbObject  Lcom/mongodb/DBObject;
            0   17     2               mf  Lorg/mongodb/morphia/mapping/MappedField;
            0   17     3           entity  Ljava/lang/Object;
            0   17     4  involvedObjects  Ljava/util/Map<Ljava/lang/Object;Lcom/mongodb/DBObject;>;
            3   17     5          annType  Ljava/lang/Class<+Ljava/lang/annotation/Annotation;>;
    Signature: (Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Object;Ljava/util/Map<Ljava/lang/Object;Lcom/mongodb/DBObject;>;)V
    MethodParameters:
                 Name  Flags
      dbObject         final
      mf               final
      entity           final
      involvedObjects  final

  <T> org.mongodb.morphia.Key<T> manualRefToKey(java.lang.String, );
    descriptor: (Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
    flags: (0x0000) 
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Object id
         0: .line 882
            aload 2 /* id */
            ifnonnull 1
            aconst_null
            goto 2
      StackMap locals:
      StackMap stack:
         1: new org.mongodb.morphia.Key
            dup
            aload 0 /* this */
            aload 1 /* collection */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getClassFromCollection:(Ljava/lang/String;)Ljava/lang/Class;
            aload 1 /* collection */
            aload 2 /* id */
            invokespecial org.mongodb.morphia.Key.<init>:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)V
      StackMap locals:
      StackMap stack: org.mongodb.morphia.Key
         2: areturn
        end local 2 // java.lang.Object id
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    3     0        this  Lorg/mongodb/morphia/mapping/Mapper;
            0    3     1  collection  Ljava/lang/String;
            0    3     2          id  Ljava/lang/Object;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
            Name  Flags
      collection  final
      id          final

  java.lang.Object keyToId(org.mongodb.morphia.Key);
    descriptor: (Lorg/mongodb/morphia/Key;)Ljava/lang/Object;
    flags: (0x0000) 
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // org.mongodb.morphia.Key key
         0: .line 886
            aload 1 /* key */
            ifnonnull 1
            aconst_null
            goto 2
      StackMap locals:
      StackMap stack:
         1: aload 1 /* key */
            invokevirtual org.mongodb.morphia.Key.getId:()Ljava/lang/Object;
      StackMap locals:
      StackMap stack: java.lang.Object
         2: areturn
        end local 1 // org.mongodb.morphia.Key key
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/mongodb/morphia/mapping/Mapper;
            0    3     1   key  Lorg/mongodb/morphia/Key;
    MethodParameters:
      Name  Flags
      key   final

  java.lang.Object toMongoObject(java.lang.Object, boolean);
    descriptor: (Ljava/lang/Object;Z)Ljava/lang/Object;
    flags: (0x0000) 
    Code:
      stack=5, locals=15, args_size=3
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.Object javaObj
        start local 2 // boolean includeClassName
         0: .line 894
            aload 1 /* javaObj */
            ifnonnull 2
         1: .line 895
            aconst_null
            areturn
         2: .line 897
      StackMap locals:
      StackMap stack:
            aload 1 /* javaObj */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            astore 3 /* origClass */
        start local 3 // java.lang.Class origClass
         3: .line 899
            aload 3 /* origClass */
            invokevirtual java.lang.Class.isAnonymousClass:()Z
            ifeq 5
            aload 3 /* origClass */
            invokevirtual java.lang.Class.getSuperclass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.isEnum:()Z
            ifeq 5
         4: .line 900
            aload 3 /* origClass */
            invokevirtual java.lang.Class.getSuperclass:()Ljava/lang/Class;
            astore 3 /* origClass */
         5: .line 903
      StackMap locals: java.lang.Class
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getConverters:()Lorg/mongodb/morphia/converters/Converters;
            aload 3 /* origClass */
            aload 1 /* javaObj */
            invokevirtual org.mongodb.morphia.converters.Converters.encode:(Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object;
            astore 4 /* newObj */
        start local 4 // java.lang.Object newObj
         6: .line 904
            aload 4 /* newObj */
            ifnonnull 9
         7: .line 905
            getstatic org.mongodb.morphia.mapping.Mapper.LOG:Lorg/mongodb/morphia/logging/Logger;
            new java.lang.StringBuilder
            dup
            ldc "converted "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* javaObj */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc " to null"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.mongodb.morphia.logging.Logger.warning:(Ljava/lang/String;)V
         8: .line 906
            aconst_null
            areturn
         9: .line 908
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 4 /* newObj */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            astore 5 /* type */
        start local 5 // java.lang.Class type
        10: .line 909
            aload 3 /* origClass */
            aload 5 /* type */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            istore 6 /* bSameType */
        start local 6 // boolean bSameType
        11: .line 913
            iload 6 /* bSameType */
            ifne 13
            ldc Ljava/util/Map;
            aload 5 /* type */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifne 13
            ldc Ljava/lang/Iterable;
            aload 5 /* type */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifne 13
        12: .line 914
            aload 4 /* newObj */
            areturn
        13: .line 917
      StackMap locals: java.lang.Class int
      StackMap stack:
            iconst_1
            istore 7 /* isSingleValue */
        start local 7 // boolean isSingleValue
        14: .line 918
            iconst_0
            istore 8 /* isMap */
        start local 8 // boolean isMap
        15: .line 919
            aconst_null
            astore 9 /* subType */
        start local 9 // java.lang.Class subType
        16: .line 921
            aload 5 /* type */
            invokevirtual java.lang.Class.isArray:()Z
            ifne 17
            ldc Ljava/util/Map;
            aload 5 /* type */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifne 17
            ldc Ljava/lang/Iterable;
            aload 5 /* type */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 24
        17: .line 922
      StackMap locals: int int java.lang.Class
      StackMap stack:
            iconst_0
            istore 7 /* isSingleValue */
        18: .line 923
            aload 5 /* type */
            ldc Ljava/util/Map;
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.implementsInterface:(Ljava/lang/Class;Ljava/lang/Class;)Z
            istore 8 /* isMap */
        19: .line 925
            aload 5 /* type */
            invokevirtual java.lang.Class.isArray:()Z
            ifeq 20
            aload 5 /* type */
            invokevirtual java.lang.Class.getComponentType:()Ljava/lang/Class;
            goto 23
      StackMap locals:
      StackMap stack:
        20: aload 5 /* type */
            iload 8 /* isMap */
            ifeq 21
            iconst_1
            goto 22
      StackMap locals:
      StackMap stack: java.lang.Class
        21: iconst_0
      StackMap locals: org.mongodb.morphia.mapping.Mapper java.lang.Object int java.lang.Class java.lang.Object java.lang.Class int int int java.lang.Class
      StackMap stack: java.lang.Class int
        22: invokestatic org.mongodb.morphia.utils.ReflectionUtils.getParameterizedClass:(Ljava/lang/Class;I)Ljava/lang/Class;
      StackMap locals:
      StackMap stack: java.lang.Class
        23: astore 9 /* subType */
        24: .line 928
      StackMap locals:
      StackMap stack:
            iload 7 /* isSingleValue */
            ifeq 29
            aload 5 /* type */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.isPropertyType:(Ljava/lang/Class;)Z
            ifne 29
        25: .line 929
            aload 0 /* this */
            aload 4 /* newObj */
            invokevirtual org.mongodb.morphia.mapping.Mapper.toDBObject:(Ljava/lang/Object;)Lcom/mongodb/DBObject;
            astore 10 /* dbObj */
        start local 10 // com.mongodb.DBObject dbObj
        26: .line 930
            iload 2 /* includeClassName */
            ifne 28
        27: .line 931
            aload 10 /* dbObj */
            ldc "className"
            invokeinterface com.mongodb.DBObject.removeField:(Ljava/lang/String;)Ljava/lang/Object;
            pop
        28: .line 933
      StackMap locals: com.mongodb.DBObject
      StackMap stack:
            aload 10 /* dbObj */
            areturn
        end local 10 // com.mongodb.DBObject dbObj
        29: .line 934
      StackMap locals:
      StackMap stack:
            aload 4 /* newObj */
            instanceof com.mongodb.DBObject
            ifeq 31
        30: .line 935
            aload 4 /* newObj */
            areturn
        31: .line 936
      StackMap locals:
      StackMap stack:
            iload 8 /* isMap */
            ifeq 40
        32: .line 937
            aload 9 /* subType */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.isPropertyType:(Ljava/lang/Class;)Z
            ifeq 34
        33: .line 938
            aload 0 /* this */
            aload 4 /* newObj */
            invokevirtual org.mongodb.morphia.mapping.Mapper.toDBObject:(Ljava/lang/Object;)Lcom/mongodb/DBObject;
            areturn
        34: .line 940
      StackMap locals:
      StackMap stack:
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 10 /* m */
        start local 10 // java.util.HashMap m
        35: .line 941
            aload 4 /* newObj */
            checkcast java.util.Map
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 12
            goto 38
      StackMap locals: org.mongodb.morphia.mapping.Mapper java.lang.Object int java.lang.Class java.lang.Object java.lang.Class int int int java.lang.Class java.util.HashMap top java.util.Iterator
      StackMap stack:
        36: aload 12
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 11 /* e */
        start local 11 // java.util.Map$Entry e
        37: .line 942
            aload 10 /* m */
            aload 11 /* e */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            aload 0 /* this */
            aload 11 /* e */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            iload 2 /* includeClassName */
            invokevirtual org.mongodb.morphia.mapping.Mapper.toMongoObject:(Ljava/lang/Object;Z)Ljava/lang/Object;
            invokevirtual java.util.HashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 11 // java.util.Map$Entry e
        38: .line 941
      StackMap locals:
      StackMap stack:
            aload 12
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 36
        39: .line 945
            aload 10 /* m */
            areturn
        end local 10 // java.util.HashMap m
        40: .line 948
      StackMap locals: org.mongodb.morphia.mapping.Mapper java.lang.Object int java.lang.Class java.lang.Object java.lang.Class int int int java.lang.Class
      StackMap stack:
            iload 7 /* isSingleValue */
            ifne 54
            aload 9 /* subType */
            invokestatic org.mongodb.morphia.utils.ReflectionUtils.isPropertyType:(Ljava/lang/Class;)Z
            ifne 54
        41: .line 949
            new com.mongodb.BasicDBList
            dup
            invokespecial com.mongodb.BasicDBList.<init>:()V
            astore 10 /* values */
        start local 10 // java.util.List values
        42: .line 950
            aload 5 /* type */
            invokevirtual java.lang.Class.isArray:()Z
            ifeq 49
        43: .line 951
            aload 4 /* newObj */
            checkcast java.lang.Object[]
            dup
            astore 14
            arraylength
            istore 13
            iconst_0
            istore 12
            goto 47
      StackMap locals: org.mongodb.morphia.mapping.Mapper java.lang.Object int java.lang.Class java.lang.Object java.lang.Class int int int java.lang.Class java.util.List top int int java.lang.Object[]
      StackMap stack:
        44: aload 14
            iload 12
            aaload
            astore 11 /* obj */
        start local 11 // java.lang.Object obj
        45: .line 952
            aload 10 /* values */
            aload 0 /* this */
            aload 11 /* obj */
            iload 2 /* includeClassName */
            invokevirtual org.mongodb.morphia.mapping.Mapper.toMongoObject:(Ljava/lang/Object;Z)Ljava/lang/Object;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 11 // java.lang.Object obj
        46: .line 951
            iinc 12 1
      StackMap locals:
      StackMap stack:
        47: iload 12
            iload 13
            if_icmplt 44
        48: .line 954
            goto 53
        49: .line 955
      StackMap locals: org.mongodb.morphia.mapping.Mapper java.lang.Object int java.lang.Class java.lang.Object java.lang.Class int int int java.lang.Class java.util.List
      StackMap stack:
            aload 4 /* newObj */
            checkcast java.lang.Iterable
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 12
            goto 52
      StackMap locals: org.mongodb.morphia.mapping.Mapper java.lang.Object int java.lang.Class java.lang.Object java.lang.Class int int int java.lang.Class java.util.List top java.util.Iterator
      StackMap stack:
        50: aload 12
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            astore 11 /* obj */
        start local 11 // java.lang.Object obj
        51: .line 956
            aload 10 /* values */
            aload 0 /* this */
            aload 11 /* obj */
            iload 2 /* includeClassName */
            invokevirtual org.mongodb.morphia.mapping.Mapper.toMongoObject:(Ljava/lang/Object;Z)Ljava/lang/Object;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 11 // java.lang.Object obj
        52: .line 955
      StackMap locals:
      StackMap stack:
            aload 12
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 50
        53: .line 960
      StackMap locals: org.mongodb.morphia.mapping.Mapper java.lang.Object int java.lang.Class java.lang.Object java.lang.Class int int int java.lang.Class java.util.List
      StackMap stack:
            aload 10 /* values */
            areturn
        end local 10 // java.util.List values
        54: .line 962
      StackMap locals:
      StackMap stack:
            aload 4 /* newObj */
            areturn
        end local 9 // java.lang.Class subType
        end local 8 // boolean isMap
        end local 7 // boolean isSingleValue
        end local 6 // boolean bSameType
        end local 5 // java.lang.Class type
        end local 4 // java.lang.Object newObj
        end local 3 // java.lang.Class origClass
        end local 2 // boolean includeClassName
        end local 1 // java.lang.Object javaObj
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   55     0              this  Lorg/mongodb/morphia/mapping/Mapper;
            0   55     1           javaObj  Ljava/lang/Object;
            0   55     2  includeClassName  Z
            3   55     3         origClass  Ljava/lang/Class;
            6   55     4            newObj  Ljava/lang/Object;
           10   55     5              type  Ljava/lang/Class;
           11   55     6         bSameType  Z
           14   55     7     isSingleValue  Z
           15   55     8             isMap  Z
           16   55     9           subType  Ljava/lang/Class;
           26   29    10             dbObj  Lcom/mongodb/DBObject;
           35   40    10                 m  Ljava/util/HashMap;
           37   38    11                 e  Ljava/util/Map$Entry;
           42   54    10            values  Ljava/util/List<Ljava/lang/Object;>;
           45   46    11               obj  Ljava/lang/Object;
           51   52    11               obj  Ljava/lang/Object;
    MethodParameters:
                  Name  Flags
      javaObj           final
      includeClassName  final

  com.mongodb.DBObject toDBObject(, java.util.Map<java.lang.Object, com.mongodb.DBObject>, boolean);
    descriptor: (Ljava/lang/Object;Ljava/util/Map;Z)Lcom/mongodb/DBObject;
    flags: (0x0000) 
    Code:
      stack=5, locals=9, args_size=4
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.Object entity
        start local 2 // java.util.Map involvedObjects
        start local 3 // boolean lifecycle
         0: .line 969
            new com.mongodb.BasicDBObject
            dup
            invokespecial com.mongodb.BasicDBObject.<init>:()V
            astore 4 /* dbObject */
        start local 4 // com.mongodb.DBObject dbObject
         1: .line 970
            aload 0 /* this */
            aload 1 /* entity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            astore 5 /* mc */
        start local 5 // org.mongodb.morphia.mapping.MappedClass mc
         2: .line 972
            aload 5 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getEntityAnnotation:()Lorg/mongodb/morphia/annotations/Entity;
            ifnull 3
            aload 5 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getEntityAnnotation:()Lorg/mongodb/morphia/annotations/Entity;
            invokeinterface org.mongodb.morphia.annotations.Entity.noClassnameStored:()Z
            ifne 4
         3: .line 973
      StackMap locals: com.mongodb.DBObject org.mongodb.morphia.mapping.MappedClass
      StackMap stack:
            aload 4 /* dbObject */
            ldc "className"
            aload 1 /* entity */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokeinterface com.mongodb.DBObject.put:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         4: .line 976
      StackMap locals:
      StackMap stack:
            iload 3 /* lifecycle */
            ifeq 6
         5: .line 977
            aload 5 /* mc */
            ldc Lorg/mongodb/morphia/annotations/PrePersist;
            aload 1 /* entity */
            aload 4 /* dbObject */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.callLifecycleMethods:(Ljava/lang/Class;Ljava/lang/Object;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/Mapper;)Lcom/mongodb/DBObject;
            astore 4 /* dbObject */
         6: .line 980
      StackMap locals:
      StackMap stack:
            aload 5 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getPersistenceFields:()Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 7
            goto 12
      StackMap locals: org.mongodb.morphia.mapping.Mapper java.lang.Object java.util.Map int com.mongodb.DBObject org.mongodb.morphia.mapping.MappedClass top java.util.Iterator
      StackMap stack:
         7: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.mongodb.morphia.mapping.MappedField
            astore 6 /* mf */
        start local 6 // org.mongodb.morphia.mapping.MappedField mf
         8: .line 982
            aload 0 /* this */
            aload 4 /* dbObject */
            aload 6 /* mf */
            aload 1 /* entity */
            aload 2 /* involvedObjects */
            invokevirtual org.mongodb.morphia.mapping.Mapper.writeMappedField:(Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/MappedField;Ljava/lang/Object;Ljava/util/Map;)V
         9: .line 983
            goto 12
      StackMap locals: org.mongodb.morphia.mapping.Mapper java.lang.Object java.util.Map int com.mongodb.DBObject org.mongodb.morphia.mapping.MappedClass org.mongodb.morphia.mapping.MappedField java.util.Iterator
      StackMap stack: java.lang.Exception
        10: astore 8 /* e */
        start local 8 // java.lang.Exception e
        11: .line 984
            new org.mongodb.morphia.mapping.MappingException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Error mapping field:"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 6 /* mf */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getFullName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 8 /* e */
            invokespecial org.mongodb.morphia.mapping.MappingException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 8 // java.lang.Exception e
        end local 6 // org.mongodb.morphia.mapping.MappedField mf
        12: .line 980
      StackMap locals: org.mongodb.morphia.mapping.Mapper java.lang.Object java.util.Map int com.mongodb.DBObject org.mongodb.morphia.mapping.MappedClass top java.util.Iterator
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 7
        13: .line 987
            aload 2 /* involvedObjects */
            ifnull 15
        14: .line 988
            aload 2 /* involvedObjects */
            aload 1 /* entity */
            aload 4 /* dbObject */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        15: .line 991
      StackMap locals: org.mongodb.morphia.mapping.Mapper java.lang.Object java.util.Map int com.mongodb.DBObject org.mongodb.morphia.mapping.MappedClass
      StackMap stack:
            iload 3 /* lifecycle */
            ifeq 17
        16: .line 992
            aload 5 /* mc */
            ldc Lorg/mongodb/morphia/annotations/PreSave;
            aload 1 /* entity */
            aload 4 /* dbObject */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.callLifecycleMethods:(Ljava/lang/Class;Ljava/lang/Object;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/Mapper;)Lcom/mongodb/DBObject;
            pop
        17: .line 995
      StackMap locals:
      StackMap stack:
            aload 4 /* dbObject */
            areturn
        end local 5 // org.mongodb.morphia.mapping.MappedClass mc
        end local 4 // com.mongodb.DBObject dbObject
        end local 3 // boolean lifecycle
        end local 2 // java.util.Map involvedObjects
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   18     0             this  Lorg/mongodb/morphia/mapping/Mapper;
            0   18     1           entity  Ljava/lang/Object;
            0   18     2  involvedObjects  Ljava/util/Map<Ljava/lang/Object;Lcom/mongodb/DBObject;>;
            0   18     3        lifecycle  Z
            1   18     4         dbObject  Lcom/mongodb/DBObject;
            2   18     5               mc  Lorg/mongodb/morphia/mapping/MappedClass;
            8   12     6               mf  Lorg/mongodb/morphia/mapping/MappedField;
           11   12     8                e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           8     9      10  Class java.lang.Exception
    Signature: (Ljava/lang/Object;Ljava/util/Map<Ljava/lang/Object;Lcom/mongodb/DBObject;>;Z)Lcom/mongodb/DBObject;
    MethodParameters:
                 Name  Flags
      entity           final
      involvedObjects  final
      lifecycle        final

  <T> org.mongodb.morphia.Key<T> createKey(java.lang.Class<T>, java.io.Serializable);
    descriptor: (Ljava/lang/Class;Ljava/io/Serializable;)Lorg/mongodb/morphia/Key;
    flags: (0x0000) 
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.Class clazz
        start local 2 // java.io.Serializable id
         0: .line 999
            new org.mongodb.morphia.Key
            dup
            aload 1 /* clazz */
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getCollectionName:(Ljava/lang/Object;)Ljava/lang/String;
            aload 2 /* id */
            invokespecial org.mongodb.morphia.Key.<init>:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)V
            areturn
        end local 2 // java.io.Serializable id
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/mapping/Mapper;
            0    1     1  clazz  Ljava/lang/Class<TT;>;
            0    1     2     id  Ljava/io/Serializable;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/io/Serializable;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
       Name  Flags
      clazz  final
      id     final

  <T> org.mongodb.morphia.Key<T> createKey(java.lang.Class<T>, );
    descriptor: (Ljava/lang/Class;Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
    flags: (0x0000) 
    Code:
      stack=7, locals=4, args_size=3
        start local 0 // org.mongodb.morphia.mapping.Mapper this
        start local 1 // java.lang.Class clazz
        start local 2 // java.lang.Object id
         0: .line 1003
            aload 2 /* id */
            instanceof java.io.Serializable
            ifeq 2
         1: .line 1004
            aload 0 /* this */
            aload 1 /* clazz */
            aload 2 /* id */
            checkcast java.io.Serializable
            invokevirtual org.mongodb.morphia.mapping.Mapper.createKey:(Ljava/lang/Class;Ljava/io/Serializable;)Lorg/mongodb/morphia/Key;
            areturn
         2: .line 1008
      StackMap locals:
      StackMap stack:
            new org.bson.BasicBSONEncoder
            dup
            invokespecial org.bson.BasicBSONEncoder.<init>:()V
            astore 3 /* enc */
        start local 3 // org.bson.BSONEncoder enc
         3: .line 1009
            new org.mongodb.morphia.Key
            dup
            aload 1 /* clazz */
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getCollectionName:(Ljava/lang/Object;)Ljava/lang/String;
            aload 3 /* enc */
            aload 0 /* this */
            aload 2 /* id */
            invokevirtual org.mongodb.morphia.mapping.Mapper.toDBObject:(Ljava/lang/Object;)Lcom/mongodb/DBObject;
            invokeinterface org.bson.BSONEncoder.encode:(Lorg/bson/BSONObject;)[B
            invokespecial org.mongodb.morphia.Key.<init>:(Ljava/lang/Class;Ljava/lang/String;[B)V
            areturn
        end local 3 // org.bson.BSONEncoder enc
        end local 2 // java.lang.Object id
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.mapping.Mapper this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    4     0   this  Lorg/mongodb/morphia/mapping/Mapper;
            0    4     1  clazz  Ljava/lang/Class<TT;>;
            0    4     2     id  Ljava/lang/Object;
            3    4     3    enc  Lorg/bson/BSONEncoder;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/Object;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
       Name  Flags
      clazz  final
      id     final
}
SourceFile: "Mapper.java"
InnerClasses:
  public abstract Entry = java.util.Map$Entry of java.util.Map