public class org.hibernate.engine.internal.ForeignKeys$Nullifier
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.hibernate.engine.internal.ForeignKeys$Nullifier
  super_class: java.lang.Object
{
  private final boolean isDelete;
    descriptor: Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final boolean isEarlyInsert;
    descriptor: Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.hibernate.engine.spi.SharedSessionContractImplementor session;
    descriptor: Lorg/hibernate/engine/spi/SharedSessionContractImplementor;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

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

  public void <init>(java.lang.Object, boolean, boolean, org.hibernate.engine.spi.SharedSessionContractImplementor);
    descriptor: (Ljava/lang/Object;ZZLorg/hibernate/engine/spi/SharedSessionContractImplementor;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=5, args_size=5
        start local 0 // org.hibernate.engine.internal.ForeignKeys$Nullifier this
        start local 1 // java.lang.Object self
        start local 2 // boolean isDelete
        start local 3 // boolean isEarlyInsert
        start local 4 // org.hibernate.engine.spi.SharedSessionContractImplementor session
         0: .line 48
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 49
            aload 0 /* this */
            iload 2 /* isDelete */
            putfield org.hibernate.engine.internal.ForeignKeys$Nullifier.isDelete:Z
         2: .line 50
            aload 0 /* this */
            iload 3 /* isEarlyInsert */
            putfield org.hibernate.engine.internal.ForeignKeys$Nullifier.isEarlyInsert:Z
         3: .line 51
            aload 0 /* this */
            aload 4 /* session */
            putfield org.hibernate.engine.internal.ForeignKeys$Nullifier.session:Lorg/hibernate/engine/spi/SharedSessionContractImplementor;
         4: .line 52
            aload 0 /* this */
            aload 1 /* self */
            putfield org.hibernate.engine.internal.ForeignKeys$Nullifier.self:Ljava/lang/Object;
         5: .line 53
            return
        end local 4 // org.hibernate.engine.spi.SharedSessionContractImplementor session
        end local 3 // boolean isEarlyInsert
        end local 2 // boolean isDelete
        end local 1 // java.lang.Object self
        end local 0 // org.hibernate.engine.internal.ForeignKeys$Nullifier this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    6     0           this  Lorg/hibernate/engine/internal/ForeignKeys$Nullifier;
            0    6     1           self  Ljava/lang/Object;
            0    6     2       isDelete  Z
            0    6     3  isEarlyInsert  Z
            0    6     4        session  Lorg/hibernate/engine/spi/SharedSessionContractImplementor;
    MethodParameters:
               Name  Flags
      self           
      isDelete       
      isEarlyInsert  
      session        

  public void nullifyTransientReferences(java.lang.Object[], org.hibernate.type.Type[]);
    descriptor: ([Ljava/lang/Object;[Lorg/hibernate/type/Type;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=4, args_size=3
        start local 0 // org.hibernate.engine.internal.ForeignKeys$Nullifier this
        start local 1 // java.lang.Object[] values
        start local 2 // org.hibernate.type.Type[] types
         0: .line 63
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         1: goto 4
         2: .line 64
      StackMap locals: int
      StackMap stack:
            aload 1 /* values */
            iload 3 /* i */
            aload 0 /* this */
            aload 1 /* values */
            iload 3 /* i */
            aaload
            aload 2 /* types */
            iload 3 /* i */
            aaload
            invokevirtual org.hibernate.engine.internal.ForeignKeys$Nullifier.nullifyTransientReferences:(Ljava/lang/Object;Lorg/hibernate/type/Type;)Ljava/lang/Object;
            aastore
         3: .line 63
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
         4: iload 3 /* i */
            aload 2 /* types */
            arraylength
            if_icmplt 2
        end local 3 // int i
         5: .line 66
            return
        end local 2 // org.hibernate.type.Type[] types
        end local 1 // java.lang.Object[] values
        end local 0 // org.hibernate.engine.internal.ForeignKeys$Nullifier this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    6     0    this  Lorg/hibernate/engine/internal/ForeignKeys$Nullifier;
            0    6     1  values  [Ljava/lang/Object;
            0    6     2   types  [Lorg/hibernate/type/Type;
            1    5     3       i  I
    MethodParameters:
        Name  Flags
      values  final
      types   final

  private java.lang.Object nullifyTransientReferences(java.lang.Object, org.hibernate.type.Type);
    descriptor: (Ljava/lang/Object;Lorg/hibernate/type/Type;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=9, args_size=3
        start local 0 // org.hibernate.engine.internal.ForeignKeys$Nullifier this
        start local 1 // java.lang.Object value
        start local 2 // org.hibernate.type.Type type
         0: .line 78
            aload 1 /* value */
            ifnonnull 2
         1: .line 79
            aconst_null
            areturn
         2: .line 81
      StackMap locals:
      StackMap stack:
            aload 2 /* type */
            invokeinterface org.hibernate.type.Type.isEntityType:()Z
            ifeq 10
         3: .line 82
            aload 2 /* type */
            checkcast org.hibernate.type.EntityType
            astore 3 /* entityType */
        start local 3 // org.hibernate.type.EntityType entityType
         4: .line 83
            aload 3 /* entityType */
            invokevirtual org.hibernate.type.EntityType.isOneToOne:()Z
            ifeq 6
         5: .line 84
            aload 1 /* value */
            areturn
         6: .line 87
      StackMap locals: org.hibernate.type.EntityType
      StackMap stack:
            aload 3 /* entityType */
            invokevirtual org.hibernate.type.EntityType.getAssociatedEntityName:()Ljava/lang/String;
            astore 4 /* entityName */
        start local 4 // java.lang.String entityName
         7: .line 88
            aload 0 /* this */
            aload 4 /* entityName */
            aload 1 /* value */
            invokevirtual org.hibernate.engine.internal.ForeignKeys$Nullifier.isNullifiable:(Ljava/lang/String;Ljava/lang/Object;)Z
            ifeq 8
            aconst_null
            goto 9
      StackMap locals: java.lang.String
      StackMap stack:
         8: aload 1 /* value */
      StackMap locals:
      StackMap stack: java.lang.Object
         9: areturn
        end local 4 // java.lang.String entityName
        end local 3 // org.hibernate.type.EntityType entityType
        10: .line 91
      StackMap locals:
      StackMap stack:
            aload 2 /* type */
            invokeinterface org.hibernate.type.Type.isAnyType:()Z
            ifeq 14
        11: .line 92
            aload 0 /* this */
            aconst_null
            aload 1 /* value */
            invokevirtual org.hibernate.engine.internal.ForeignKeys$Nullifier.isNullifiable:(Ljava/lang/String;Ljava/lang/Object;)Z
            ifeq 12
            aconst_null
            goto 13
      StackMap locals:
      StackMap stack:
        12: aload 1 /* value */
      StackMap locals:
      StackMap stack: java.lang.Object
        13: areturn
        14: .line 94
      StackMap locals:
      StackMap stack:
            aload 2 /* type */
            invokeinterface org.hibernate.type.Type.isComponentType:()Z
            ifeq 30
        15: .line 95
            aload 2 /* type */
            checkcast org.hibernate.type.CompositeType
            astore 3 /* actype */
        start local 3 // org.hibernate.type.CompositeType actype
        16: .line 96
            aload 3 /* actype */
            aload 1 /* value */
            aload 0 /* this */
            getfield org.hibernate.engine.internal.ForeignKeys$Nullifier.session:Lorg/hibernate/engine/spi/SharedSessionContractImplementor;
            invokeinterface org.hibernate.type.CompositeType.getPropertyValues:(Ljava/lang/Object;Lorg/hibernate/engine/spi/SharedSessionContractImplementor;)[Ljava/lang/Object;
            astore 4 /* subvalues */
        start local 4 // java.lang.Object[] subvalues
        17: .line 97
            aload 3 /* actype */
            invokeinterface org.hibernate.type.CompositeType.getSubtypes:()[Lorg/hibernate/type/Type;
            astore 5 /* subtypes */
        start local 5 // org.hibernate.type.Type[] subtypes
        18: .line 98
            iconst_0
            istore 6 /* substitute */
        start local 6 // boolean substitute
        19: .line 99
            iconst_0
            istore 7 /* i */
        start local 7 // int i
        20: goto 26
        21: .line 100
      StackMap locals: org.hibernate.engine.internal.ForeignKeys$Nullifier java.lang.Object org.hibernate.type.Type org.hibernate.type.CompositeType java.lang.Object[] org.hibernate.type.Type[] int int
      StackMap stack:
            aload 0 /* this */
            aload 4 /* subvalues */
            iload 7 /* i */
            aaload
            aload 5 /* subtypes */
            iload 7 /* i */
            aaload
            invokevirtual org.hibernate.engine.internal.ForeignKeys$Nullifier.nullifyTransientReferences:(Ljava/lang/Object;Lorg/hibernate/type/Type;)Ljava/lang/Object;
            astore 8 /* replacement */
        start local 8 // java.lang.Object replacement
        22: .line 101
            aload 8 /* replacement */
            aload 4 /* subvalues */
            iload 7 /* i */
            aaload
            if_acmpeq 25
        23: .line 102
            iconst_1
            istore 6 /* substitute */
        24: .line 103
            aload 4 /* subvalues */
            iload 7 /* i */
            aload 8 /* replacement */
            aastore
        end local 8 // java.lang.Object replacement
        25: .line 99
      StackMap locals:
      StackMap stack:
            iinc 7 /* i */ 1
      StackMap locals:
      StackMap stack:
        26: iload 7 /* i */
            aload 4 /* subvalues */
            arraylength
            if_icmplt 21
        end local 7 // int i
        27: .line 106
            iload 6 /* substitute */
            ifeq 29
        28: .line 108
            aload 3 /* actype */
            aload 1 /* value */
            aload 4 /* subvalues */
            getstatic org.hibernate.EntityMode.POJO:Lorg/hibernate/EntityMode;
            invokeinterface org.hibernate.type.CompositeType.setPropertyValues:(Ljava/lang/Object;[Ljava/lang/Object;Lorg/hibernate/EntityMode;)V
        29: .line 110
      StackMap locals:
      StackMap stack:
            aload 1 /* value */
            areturn
        end local 6 // boolean substitute
        end local 5 // org.hibernate.type.Type[] subtypes
        end local 4 // java.lang.Object[] subvalues
        end local 3 // org.hibernate.type.CompositeType actype
        30: .line 113
      StackMap locals: org.hibernate.engine.internal.ForeignKeys$Nullifier java.lang.Object org.hibernate.type.Type
      StackMap stack:
            aload 1 /* value */
            areturn
        end local 2 // org.hibernate.type.Type type
        end local 1 // java.lang.Object value
        end local 0 // org.hibernate.engine.internal.ForeignKeys$Nullifier this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   31     0         this  Lorg/hibernate/engine/internal/ForeignKeys$Nullifier;
            0   31     1        value  Ljava/lang/Object;
            0   31     2         type  Lorg/hibernate/type/Type;
            4   10     3   entityType  Lorg/hibernate/type/EntityType;
            7   10     4   entityName  Ljava/lang/String;
           16   30     3       actype  Lorg/hibernate/type/CompositeType;
           17   30     4    subvalues  [Ljava/lang/Object;
           18   30     5     subtypes  [Lorg/hibernate/type/Type;
           19   30     6   substitute  Z
           20   27     7            i  I
           22   25     8  replacement  Ljava/lang/Object;
    MethodParameters:
       Name  Flags
      value  final
      type   final

  private boolean isNullifiable(java.lang.String, java.lang.Object);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // org.hibernate.engine.internal.ForeignKeys$Nullifier this
        start local 1 // java.lang.String entityName
        start local 2 // java.lang.Object object
         0: .line 126
            aload 2 /* object */
            getstatic org.hibernate.bytecode.enhance.spi.LazyPropertyInitializer.UNFETCHED_PROPERTY:Ljava/io/Serializable;
            if_acmpne 2
         1: .line 128
            iconst_0
            ireturn
         2: .line 131
      StackMap locals:
      StackMap stack:
            aload 2 /* object */
            instanceof org.hibernate.proxy.HibernateProxy
            ifeq 7
         3: .line 133
            aload 2 /* object */
            checkcast org.hibernate.proxy.HibernateProxy
            invokeinterface org.hibernate.proxy.HibernateProxy.getHibernateLazyInitializer:()Lorg/hibernate/proxy/LazyInitializer;
            astore 3 /* li */
        start local 3 // org.hibernate.proxy.LazyInitializer li
         4: .line 134
            aload 3 /* li */
            aload 0 /* this */
            getfield org.hibernate.engine.internal.ForeignKeys$Nullifier.session:Lorg/hibernate/engine/spi/SharedSessionContractImplementor;
            invokeinterface org.hibernate.proxy.LazyInitializer.getImplementation:(Lorg/hibernate/engine/spi/SharedSessionContractImplementor;)Ljava/lang/Object;
            ifnonnull 6
         5: .line 135
            iconst_0
            ireturn
         6: .line 141
      StackMap locals: org.hibernate.proxy.LazyInitializer
      StackMap stack:
            aload 3 /* li */
            aload 0 /* this */
            getfield org.hibernate.engine.internal.ForeignKeys$Nullifier.session:Lorg/hibernate/engine/spi/SharedSessionContractImplementor;
            invokeinterface org.hibernate.proxy.LazyInitializer.getImplementation:(Lorg/hibernate/engine/spi/SharedSessionContractImplementor;)Ljava/lang/Object;
            astore 2 /* object */
        end local 3 // org.hibernate.proxy.LazyInitializer li
         7: .line 148
      StackMap locals:
      StackMap stack:
            aload 2 /* object */
            aload 0 /* this */
            getfield org.hibernate.engine.internal.ForeignKeys$Nullifier.self:Ljava/lang/Object;
            if_acmpne 12
         8: .line 149
            aload 0 /* this */
            getfield org.hibernate.engine.internal.ForeignKeys$Nullifier.isEarlyInsert:Z
            ifne 11
         9: .line 150
            aload 0 /* this */
            getfield org.hibernate.engine.internal.ForeignKeys$Nullifier.isDelete:Z
            ifeq 10
            aload 0 /* this */
            getfield org.hibernate.engine.internal.ForeignKeys$Nullifier.session:Lorg/hibernate/engine/spi/SharedSessionContractImplementor;
            invokeinterface org.hibernate.engine.spi.SharedSessionContractImplementor.getFactory:()Lorg/hibernate/engine/spi/SessionFactoryImplementor;
            invokeinterface org.hibernate.engine.spi.SessionFactoryImplementor.getDialect:()Lorg/hibernate/dialect/Dialect;
            invokevirtual org.hibernate.dialect.Dialect.hasSelfReferentialForeignKeyBug:()Z
            ifne 11
        10: .line 149
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
      StackMap locals:
      StackMap stack:
        11: iconst_1
            ireturn
        12: .line 158
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.hibernate.engine.internal.ForeignKeys$Nullifier.session:Lorg/hibernate/engine/spi/SharedSessionContractImplementor;
            invokeinterface org.hibernate.engine.spi.SharedSessionContractImplementor.getPersistenceContext:()Lorg/hibernate/engine/spi/PersistenceContext;
            aload 2 /* object */
            invokeinterface org.hibernate.engine.spi.PersistenceContext.getEntry:(Ljava/lang/Object;)Lorg/hibernate/engine/spi/EntityEntry;
            astore 3 /* entityEntry */
        start local 3 // org.hibernate.engine.spi.EntityEntry entityEntry
        13: .line 159
            aload 3 /* entityEntry */
            ifnonnull 15
        14: .line 160
            aload 1 /* entityName */
            aload 2 /* object */
            aconst_null
            aload 0 /* this */
            getfield org.hibernate.engine.internal.ForeignKeys$Nullifier.session:Lorg/hibernate/engine/spi/SharedSessionContractImplementor;
            invokestatic org.hibernate.engine.internal.ForeignKeys.isTransient:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Boolean;Lorg/hibernate/engine/spi/SharedSessionContractImplementor;)Z
            ireturn
        15: .line 163
      StackMap locals: org.hibernate.engine.spi.EntityEntry
      StackMap stack:
            aload 3 /* entityEntry */
            aload 0 /* this */
            getfield org.hibernate.engine.internal.ForeignKeys$Nullifier.isEarlyInsert:Z
            aload 0 /* this */
            getfield org.hibernate.engine.internal.ForeignKeys$Nullifier.session:Lorg/hibernate/engine/spi/SharedSessionContractImplementor;
            invokeinterface org.hibernate.engine.spi.EntityEntry.isNullifiable:(ZLorg/hibernate/engine/spi/SharedSessionContractImplementor;)Z
            ireturn
        end local 3 // org.hibernate.engine.spi.EntityEntry entityEntry
        end local 2 // java.lang.Object object
        end local 1 // java.lang.String entityName
        end local 0 // org.hibernate.engine.internal.ForeignKeys$Nullifier this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   16     0         this  Lorg/hibernate/engine/internal/ForeignKeys$Nullifier;
            0   16     1   entityName  Ljava/lang/String;
            0   16     2       object  Ljava/lang/Object;
            4    7     3           li  Lorg/hibernate/proxy/LazyInitializer;
           13   16     3  entityEntry  Lorg/hibernate/engine/spi/EntityEntry;
    Exceptions:
      throws org.hibernate.HibernateException
    MethodParameters:
            Name  Flags
      entityName  final
      object      
}
SourceFile: "ForeignKeys.java"
NestHost: org.hibernate.engine.internal.ForeignKeys
InnerClasses:
  public Nullifier = org.hibernate.engine.internal.ForeignKeys$Nullifier of org.hibernate.engine.internal.ForeignKeys