public class org.mongodb.morphia.converters.KeyConverter extends org.mongodb.morphia.converters.TypeConverter
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.mongodb.morphia.converters.KeyConverter
  super_class: org.mongodb.morphia.converters.TypeConverter
{
  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.converters.KeyConverter this
         0: .line 17
            aload 0 /* this */
            iconst_1
            anewarray java.lang.Class
            dup
            iconst_0
            ldc Lorg/mongodb/morphia/Key;
            aastore
            invokespecial org.mongodb.morphia.converters.TypeConverter.<init>:([Ljava/lang/Class;)V
         1: .line 18
            return
        end local 0 // org.mongodb.morphia.converters.KeyConverter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/mongodb/morphia/converters/KeyConverter;

  public java.lang.Object decode(java.lang.Class, java.lang.Object, org.mongodb.morphia.mapping.MappedField);
    descriptor: (Ljava/lang/Class;Ljava/lang/Object;Lorg/mongodb/morphia/mapping/MappedField;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=8, args_size=4
        start local 0 // org.mongodb.morphia.converters.KeyConverter this
        start local 1 // java.lang.Class targetClass
        start local 2 // java.lang.Object o
        start local 3 // org.mongodb.morphia.mapping.MappedField optionalExtraInfo
         0: .line 22
            aload 2 /* o */
            ifnonnull 2
         1: .line 23
            aconst_null
            areturn
         2: .line 25
      StackMap locals:
      StackMap stack:
            aload 2 /* o */
            instanceof com.mongodb.DBRef
            ifne 4
         3: .line 26
            new org.mongodb.morphia.converters.ConverterException
            dup
            ldc "cannot convert %s to Key because it isn't a DBRef"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* o */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial org.mongodb.morphia.converters.ConverterException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 30
      StackMap locals:
      StackMap stack:
            aload 2 /* o */
            checkcast com.mongodb.DBRef
            astore 4 /* ref */
        start local 4 // com.mongodb.DBRef ref
         5: .line 32
            aload 0 /* this */
            aload 3 /* optionalExtraInfo */
            invokevirtual org.mongodb.morphia.converters.KeyConverter.getActualType:(Lorg/mongodb/morphia/mapping/MappedField;)Lorg/mongodb/morphia/mapping/MappedField;
            astore 5 /* actualType */
        start local 5 // org.mongodb.morphia.mapping.MappedField actualType
         6: .line 35
            aload 5 /* actualType */
            ifnull 8
         7: .line 36
            aload 5 /* actualType */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getConcreteType:()Ljava/lang/Class;
            goto 9
         8: .line 37
      StackMap locals: com.mongodb.DBRef org.mongodb.morphia.mapping.MappedField
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.converters.KeyConverter.getMapper:()Lorg/mongodb/morphia/mapping/Mapper;
            aload 4 /* ref */
            invokevirtual com.mongodb.DBRef.getCollectionName:()Ljava/lang/String;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getClassFromCollection:(Ljava/lang/String;)Ljava/lang/Class;
         9: .line 35
      StackMap locals:
      StackMap stack: java.lang.Class
            astore 6 /* keyType */
        start local 6 // java.lang.Class keyType
        10: .line 39
            new org.mongodb.morphia.Key
            dup
            aload 6 /* keyType */
            aload 4 /* ref */
            invokevirtual com.mongodb.DBRef.getCollectionName:()Ljava/lang/String;
            aload 4 /* 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
            astore 7 /* key */
        start local 7 // org.mongodb.morphia.Key key
        11: .line 41
            aload 7 /* key */
            areturn
        end local 7 // org.mongodb.morphia.Key key
        end local 6 // java.lang.Class keyType
        end local 5 // org.mongodb.morphia.mapping.MappedField actualType
        end local 4 // com.mongodb.DBRef ref
        end local 3 // org.mongodb.morphia.mapping.MappedField optionalExtraInfo
        end local 2 // java.lang.Object o
        end local 1 // java.lang.Class targetClass
        end local 0 // org.mongodb.morphia.converters.KeyConverter this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   12     0               this  Lorg/mongodb/morphia/converters/KeyConverter;
            0   12     1        targetClass  Ljava/lang/Class;
            0   12     2                  o  Ljava/lang/Object;
            0   12     3  optionalExtraInfo  Lorg/mongodb/morphia/mapping/MappedField;
            5   12     4                ref  Lcom/mongodb/DBRef;
            6   12     5         actualType  Lorg/mongodb/morphia/mapping/MappedField;
           10   12     6            keyType  Ljava/lang/Class<*>;
           11   12     7                key  Lorg/mongodb/morphia/Key<*>;
    MethodParameters:
                   Name  Flags
      targetClass        final
      o                  final
      optionalExtraInfo  final

  private org.mongodb.morphia.mapping.MappedField getActualType(org.mongodb.morphia.mapping.MappedField);
    descriptor: (Lorg/mongodb/morphia/mapping/MappedField;)Lorg/mongodb/morphia/mapping/MappedField;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // org.mongodb.morphia.converters.KeyConverter this
        start local 1 // org.mongodb.morphia.mapping.MappedField field
         0: .line 45
            aload 1 /* field */
            ifnonnull 2
         1: .line 46
            aconst_null
            areturn
         2: .line 48
      StackMap locals:
      StackMap stack:
            aload 1 /* field */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getTypeParameters:()Ljava/util/List;
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast org.mongodb.morphia.mapping.MappedField
            astore 2 /* mappedField */
        start local 2 // org.mongodb.morphia.mapping.MappedField mappedField
         3: .line 49
            aload 2 /* mappedField */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getTypeParameters:()Ljava/util/List;
            invokeinterface java.util.List.size:()I
            ifeq 5
         4: .line 50
            aload 0 /* this */
            aload 2 /* mappedField */
            invokevirtual org.mongodb.morphia.converters.KeyConverter.getActualType:(Lorg/mongodb/morphia/mapping/MappedField;)Lorg/mongodb/morphia/mapping/MappedField;
            astore 2 /* mappedField */
         5: .line 52
      StackMap locals: org.mongodb.morphia.mapping.MappedField
      StackMap stack:
            aload 2 /* mappedField */
            areturn
        end local 2 // org.mongodb.morphia.mapping.MappedField mappedField
        end local 1 // org.mongodb.morphia.mapping.MappedField field
        end local 0 // org.mongodb.morphia.converters.KeyConverter this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    6     0         this  Lorg/mongodb/morphia/converters/KeyConverter;
            0    6     1        field  Lorg/mongodb/morphia/mapping/MappedField;
            3    6     2  mappedField  Lorg/mongodb/morphia/mapping/MappedField;
    MethodParameters:
       Name  Flags
      field  final

  public java.lang.Object encode(java.lang.Object, org.mongodb.morphia.mapping.MappedField);
    descriptor: (Ljava/lang/Object;Lorg/mongodb/morphia/mapping/MappedField;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.converters.KeyConverter this
        start local 1 // java.lang.Object t
        start local 2 // org.mongodb.morphia.mapping.MappedField optionalExtraInfo
         0: .line 57
            aload 1 /* t */
            ifnonnull 2
         1: .line 58
            aconst_null
            areturn
         2: .line 60
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.converters.KeyConverter.getMapper:()Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* t */
            checkcast org.mongodb.morphia.Key
            invokevirtual org.mongodb.morphia.mapping.Mapper.keyToDBRef:(Lorg/mongodb/morphia/Key;)Lcom/mongodb/DBRef;
            areturn
        end local 2 // org.mongodb.morphia.mapping.MappedField optionalExtraInfo
        end local 1 // java.lang.Object t
        end local 0 // org.mongodb.morphia.converters.KeyConverter this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    3     0               this  Lorg/mongodb/morphia/converters/KeyConverter;
            0    3     1                  t  Ljava/lang/Object;
            0    3     2  optionalExtraInfo  Lorg/mongodb/morphia/mapping/MappedField;
    MethodParameters:
                   Name  Flags
      t                  final
      optionalExtraInfo  final
}
SourceFile: "KeyConverter.java"