public final class org.hibernate.engine.internal.Nullability
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: org.hibernate.engine.internal.Nullability
  super_class: java.lang.Object
{
  private final org.hibernate.engine.spi.SharedSessionContractImplementor session;
    descriptor: Lorg/hibernate/engine/spi/SharedSessionContractImplementor;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

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

  public void <init>(org.hibernate.engine.spi.SharedSessionContractImplementor);
    descriptor: (Lorg/hibernate/engine/spi/SharedSessionContractImplementor;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.hibernate.engine.internal.Nullability this
        start local 1 // org.hibernate.engine.spi.SharedSessionContractImplementor session
         0: .line 38
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 39
            aload 0 /* this */
            aload 1 /* session */
            putfield org.hibernate.engine.internal.Nullability.session:Lorg/hibernate/engine/spi/SharedSessionContractImplementor;
         2: .line 40
            aload 0 /* this */
            aload 1 /* session */
            invokeinterface org.hibernate.engine.spi.SharedSessionContractImplementor.getFactory:()Lorg/hibernate/engine/spi/SessionFactoryImplementor;
            invokeinterface org.hibernate.engine.spi.SessionFactoryImplementor.getSessionFactoryOptions:()Lorg/hibernate/boot/spi/SessionFactoryOptions;
            invokeinterface org.hibernate.boot.spi.SessionFactoryOptions.isCheckNullability:()Z
            putfield org.hibernate.engine.internal.Nullability.checkNullability:Z
         3: .line 41
            return
        end local 1 // org.hibernate.engine.spi.SharedSessionContractImplementor session
        end local 0 // org.hibernate.engine.internal.Nullability this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Lorg/hibernate/engine/internal/Nullability;
            0    4     1  session  Lorg/hibernate/engine/spi/SharedSessionContractImplementor;
    MethodParameters:
         Name  Flags
      session  

  public void checkNullability(java.lang.Object[], org.hibernate.persister.entity.EntityPersister, boolean);
    descriptor: ([Ljava/lang/Object;Lorg/hibernate/persister/entity/EntityPersister;Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.hibernate.engine.internal.Nullability this
        start local 1 // java.lang.Object[] values
        start local 2 // org.hibernate.persister.entity.EntityPersister persister
        start local 3 // boolean isUpdate
         0: .line 56
            aload 0 /* this */
            aload 1 /* values */
            aload 2 /* persister */
            iload 3 /* isUpdate */
            ifeq 1
            getstatic org.hibernate.engine.internal.Nullability$NullabilityCheckType.UPDATE:Lorg/hibernate/engine/internal/Nullability$NullabilityCheckType;
            goto 2
      StackMap locals: org.hibernate.engine.internal.Nullability java.lang.Object[] org.hibernate.persister.entity.EntityPersister int
      StackMap stack: org.hibernate.engine.internal.Nullability java.lang.Object[] org.hibernate.persister.entity.EntityPersister
         1: getstatic org.hibernate.engine.internal.Nullability$NullabilityCheckType.CREATE:Lorg/hibernate/engine/internal/Nullability$NullabilityCheckType;
      StackMap locals: org.hibernate.engine.internal.Nullability java.lang.Object[] org.hibernate.persister.entity.EntityPersister int
      StackMap stack: org.hibernate.engine.internal.Nullability java.lang.Object[] org.hibernate.persister.entity.EntityPersister org.hibernate.engine.internal.Nullability$NullabilityCheckType
         2: invokevirtual org.hibernate.engine.internal.Nullability.checkNullability:([Ljava/lang/Object;Lorg/hibernate/persister/entity/EntityPersister;Lorg/hibernate/engine/internal/Nullability$NullabilityCheckType;)V
         3: .line 57
            return
        end local 3 // boolean isUpdate
        end local 2 // org.hibernate.persister.entity.EntityPersister persister
        end local 1 // java.lang.Object[] values
        end local 0 // org.hibernate.engine.internal.Nullability this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    4     0       this  Lorg/hibernate/engine/internal/Nullability;
            0    4     1     values  [Ljava/lang/Object;
            0    4     2  persister  Lorg/hibernate/persister/entity/EntityPersister;
            0    4     3   isUpdate  Z
    MethodParameters:
           Name  Flags
      values     final
      persister  final
      isUpdate   final

  public void checkNullability(java.lang.Object[], org.hibernate.persister.entity.EntityPersister, org.hibernate.engine.internal.Nullability$NullabilityCheckType);
    descriptor: ([Ljava/lang/Object;Lorg/hibernate/persister/entity/EntityPersister;Lorg/hibernate/engine/internal/Nullability$NullabilityCheckType;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=10, args_size=4
        start local 0 // org.hibernate.engine.internal.Nullability this
        start local 1 // java.lang.Object[] values
        start local 2 // org.hibernate.persister.entity.EntityPersister persister
        start local 3 // org.hibernate.engine.internal.Nullability$NullabilityCheckType checkType
         0: .line 74
            aload 0 /* this */
            getfield org.hibernate.engine.internal.Nullability.checkNullability:Z
            ifeq 27
         1: .line 93
            aload 2 /* persister */
            invokeinterface org.hibernate.persister.entity.EntityPersister.getPropertyNullability:()[Z
            astore 4 /* nullability */
        start local 4 // boolean[] nullability
         2: .line 94
            aload 3 /* checkType */
            getstatic org.hibernate.engine.internal.Nullability$NullabilityCheckType.CREATE:Lorg/hibernate/engine/internal/Nullability$NullabilityCheckType;
            if_acmpne 4
         3: .line 95
            aload 2 /* persister */
            invokeinterface org.hibernate.persister.entity.EntityPersister.getPropertyInsertability:()[Z
            goto 5
         4: .line 96
      StackMap locals: boolean[]
      StackMap stack:
            aload 2 /* persister */
            invokeinterface org.hibernate.persister.entity.EntityPersister.getPropertyUpdateability:()[Z
         5: .line 94
      StackMap locals:
      StackMap stack: boolean[]
            astore 5 /* checkability */
        start local 5 // boolean[] checkability
         6: .line 97
            aload 2 /* persister */
            invokeinterface org.hibernate.persister.entity.EntityPersister.getPropertyTypes:()[Lorg/hibernate/type/Type;
            astore 6 /* propertyTypes */
        start local 6 // org.hibernate.type.Type[] propertyTypes
         7: .line 99
            iconst_0
            istore 7 /* i */
        start local 7 // int i
         8: goto 26
         9: .line 101
      StackMap locals: boolean[] org.hibernate.type.Type[] int
      StackMap stack:
            aload 5 /* checkability */
            iload 7 /* i */
            baload
            ifeq 25
            aload 1 /* values */
            iload 7 /* i */
            aaload
            getstatic org.hibernate.bytecode.enhance.spi.LazyPropertyInitializer.UNFETCHED_PROPERTY:Ljava/io/Serializable;
            if_acmpeq 25
        10: .line 102
            aload 1 /* values */
            iload 7 /* i */
            aaload
            astore 8 /* value */
        start local 8 // java.lang.Object value
        11: .line 103
            aload 4 /* nullability */
            iload 7 /* i */
            baload
            ifne 17
            aload 8 /* value */
            ifnonnull 17
        12: .line 105
            new org.hibernate.PropertyValueException
            dup
        13: .line 106
            ldc "not-null property references a null or transient value"
        14: .line 107
            aload 2 /* persister */
            invokeinterface org.hibernate.persister.entity.EntityPersister.getEntityName:()Ljava/lang/String;
        15: .line 108
            aload 2 /* persister */
            invokeinterface org.hibernate.persister.entity.EntityPersister.getPropertyNames:()[Ljava/lang/String;
            iload 7 /* i */
            aaload
        16: .line 105
            invokespecial org.hibernate.PropertyValueException.<init>:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
            athrow
        17: .line 112
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 8 /* value */
            ifnull 25
        18: .line 114
            aload 0 /* this */
            aload 6 /* propertyTypes */
            iload 7 /* i */
            aaload
            aload 8 /* value */
            invokevirtual org.hibernate.engine.internal.Nullability.checkSubElementsNullability:(Lorg/hibernate/type/Type;Ljava/lang/Object;)Ljava/lang/String;
            astore 9 /* breakProperties */
        start local 9 // java.lang.String breakProperties
        19: .line 115
            aload 9 /* breakProperties */
            ifnull 25
        20: .line 116
            new org.hibernate.PropertyValueException
            dup
        21: .line 117
            ldc "not-null property references a null or transient value"
        22: .line 118
            aload 2 /* persister */
            invokeinterface org.hibernate.persister.entity.EntityPersister.getEntityName:()Ljava/lang/String;
        23: .line 119
            aload 2 /* persister */
            invokeinterface org.hibernate.persister.entity.EntityPersister.getPropertyNames:()[Ljava/lang/String;
            iload 7 /* i */
            aaload
            aload 9 /* breakProperties */
            invokestatic org.hibernate.engine.internal.Nullability.buildPropertyPath:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
        24: .line 116
            invokespecial org.hibernate.PropertyValueException.<init>:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
            athrow
        end local 9 // java.lang.String breakProperties
        end local 8 // java.lang.Object value
        25: .line 99
      StackMap locals:
      StackMap stack:
            iinc 7 /* i */ 1
      StackMap locals:
      StackMap stack:
        26: iload 7 /* i */
            aload 1 /* values */
            arraylength
            if_icmplt 9
        end local 7 // int i
        end local 6 // org.hibernate.type.Type[] propertyTypes
        end local 5 // boolean[] checkability
        end local 4 // boolean[] nullability
        27: .line 128
      StackMap locals: org.hibernate.engine.internal.Nullability java.lang.Object[] org.hibernate.persister.entity.EntityPersister org.hibernate.engine.internal.Nullability$NullabilityCheckType
      StackMap stack:
            return
        end local 3 // org.hibernate.engine.internal.Nullability$NullabilityCheckType checkType
        end local 2 // org.hibernate.persister.entity.EntityPersister persister
        end local 1 // java.lang.Object[] values
        end local 0 // org.hibernate.engine.internal.Nullability this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   28     0             this  Lorg/hibernate/engine/internal/Nullability;
            0   28     1           values  [Ljava/lang/Object;
            0   28     2        persister  Lorg/hibernate/persister/entity/EntityPersister;
            0   28     3        checkType  Lorg/hibernate/engine/internal/Nullability$NullabilityCheckType;
            2   27     4      nullability  [Z
            6   27     5     checkability  [Z
            7   27     6    propertyTypes  [Lorg/hibernate/type/Type;
            8   27     7                i  I
           11   25     8            value  Ljava/lang/Object;
           19   25     9  breakProperties  Ljava/lang/String;
    MethodParameters:
           Name  Flags
      values     final
      persister  final
      checkType  final

  private java.lang.String checkSubElementsNullability(org.hibernate.type.Type, java.lang.Object);
    descriptor: (Lorg/hibernate/type/Type;Ljava/lang/Object;)Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=8, args_size=3
        start local 0 // org.hibernate.engine.internal.Nullability this
        start local 1 // org.hibernate.type.Type propertyType
        start local 2 // java.lang.Object value
         0: .line 141
            aload 1 /* propertyType */
            invokeinterface org.hibernate.type.Type.isComponentType:()Z
            ifeq 2
         1: .line 142
            aload 0 /* this */
            aload 2 /* value */
            aload 1 /* propertyType */
            checkcast org.hibernate.type.CompositeType
            invokevirtual org.hibernate.engine.internal.Nullability.checkComponentNullability:(Ljava/lang/Object;Lorg/hibernate/type/CompositeType;)Ljava/lang/String;
            areturn
         2: .line 145
      StackMap locals:
      StackMap stack:
            aload 1 /* propertyType */
            invokeinterface org.hibernate.type.Type.isCollectionType:()Z
            ifeq 13
         3: .line 147
            aload 1 /* propertyType */
            checkcast org.hibernate.type.CollectionType
            astore 3 /* collectionType */
        start local 3 // org.hibernate.type.CollectionType collectionType
         4: .line 148
            aload 3 /* collectionType */
            aload 0 /* this */
            getfield org.hibernate.engine.internal.Nullability.session:Lorg/hibernate/engine/spi/SharedSessionContractImplementor;
            invokeinterface org.hibernate.engine.spi.SharedSessionContractImplementor.getFactory:()Lorg/hibernate/engine/spi/SessionFactoryImplementor;
            invokevirtual org.hibernate.type.CollectionType.getElementType:(Lorg/hibernate/engine/spi/SessionFactoryImplementor;)Lorg/hibernate/type/Type;
            astore 4 /* collectionElementType */
        start local 4 // org.hibernate.type.Type collectionElementType
         5: .line 150
            aload 4 /* collectionElementType */
            invokeinterface org.hibernate.type.Type.isComponentType:()Z
            ifeq 13
         6: .line 152
            aload 4 /* collectionElementType */
            checkcast org.hibernate.type.CompositeType
            astore 5 /* componentType */
        start local 5 // org.hibernate.type.CompositeType componentType
         7: .line 153
            aload 0 /* this */
            getfield org.hibernate.engine.internal.Nullability.session:Lorg/hibernate/engine/spi/SharedSessionContractImplementor;
            aload 3 /* collectionType */
            aload 2 /* value */
            invokestatic org.hibernate.engine.spi.CascadingActions.getLoadedElementsIterator:(Lorg/hibernate/engine/spi/SharedSessionContractImplementor;Lorg/hibernate/type/CollectionType;Ljava/lang/Object;)Ljava/util/Iterator;
            astore 6 /* itr */
        start local 6 // java.util.Iterator itr
         8: .line 154
            goto 12
         9: .line 155
      StackMap locals: org.hibernate.engine.internal.Nullability org.hibernate.type.Type java.lang.Object org.hibernate.type.CollectionType org.hibernate.type.Type org.hibernate.type.CompositeType java.util.Iterator
      StackMap stack:
            aload 6 /* itr */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            astore 7 /* compositeElement */
        start local 7 // java.lang.Object compositeElement
        10: .line 156
            aload 7 /* compositeElement */
            ifnull 12
        11: .line 157
            aload 0 /* this */
            aload 7 /* compositeElement */
            aload 5 /* componentType */
            invokevirtual org.hibernate.engine.internal.Nullability.checkComponentNullability:(Ljava/lang/Object;Lorg/hibernate/type/CompositeType;)Ljava/lang/String;
            areturn
        end local 7 // java.lang.Object compositeElement
        12: .line 154
      StackMap locals:
      StackMap stack:
            aload 6 /* itr */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 9
        end local 6 // java.util.Iterator itr
        end local 5 // org.hibernate.type.CompositeType componentType
        end local 4 // org.hibernate.type.Type collectionElementType
        end local 3 // org.hibernate.type.CollectionType collectionType
        13: .line 163
      StackMap locals: org.hibernate.engine.internal.Nullability org.hibernate.type.Type java.lang.Object
      StackMap stack:
            aconst_null
            areturn
        end local 2 // java.lang.Object value
        end local 1 // org.hibernate.type.Type propertyType
        end local 0 // org.hibernate.engine.internal.Nullability this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   14     0                   this  Lorg/hibernate/engine/internal/Nullability;
            0   14     1           propertyType  Lorg/hibernate/type/Type;
            0   14     2                  value  Ljava/lang/Object;
            4   13     3         collectionType  Lorg/hibernate/type/CollectionType;
            5   13     4  collectionElementType  Lorg/hibernate/type/Type;
            7   13     5          componentType  Lorg/hibernate/type/CompositeType;
            8   13     6                    itr  Ljava/util/Iterator;
           10   12     7       compositeElement  Ljava/lang/Object;
    Exceptions:
      throws org.hibernate.HibernateException
    MethodParameters:
              Name  Flags
      propertyType  
      value         

  private java.lang.String checkComponentNullability(java.lang.Object, org.hibernate.type.CompositeType);
    descriptor: (Ljava/lang/Object;Lorg/hibernate/type/CompositeType;)Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=9, args_size=3
        start local 0 // org.hibernate.engine.internal.Nullability this
        start local 1 // java.lang.Object value
        start local 2 // org.hibernate.type.CompositeType compositeType
         0: .line 186
            aload 2 /* compositeType */
            invokeinterface org.hibernate.type.CompositeType.isAnyType:()Z
            ifeq 2
         1: .line 187
            aconst_null
            areturn
         2: .line 190
      StackMap locals:
      StackMap stack:
            aload 2 /* compositeType */
            invokeinterface org.hibernate.type.CompositeType.getPropertyNullability:()[Z
            astore 3 /* nullability */
        start local 3 // boolean[] nullability
         3: .line 191
            aload 3 /* nullability */
            ifnull 17
         4: .line 193
            aload 2 /* compositeType */
            aload 1 /* value */
            aload 0 /* this */
            getfield org.hibernate.engine.internal.Nullability.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
         5: .line 194
            aload 2 /* compositeType */
            invokeinterface org.hibernate.type.CompositeType.getSubtypes:()[Lorg/hibernate/type/Type;
            astore 5 /* propertyTypes */
        start local 5 // org.hibernate.type.Type[] propertyTypes
         6: .line 195
            iconst_0
            istore 6 /* i */
        start local 6 // int i
         7: goto 16
         8: .line 196
      StackMap locals: org.hibernate.engine.internal.Nullability java.lang.Object org.hibernate.type.CompositeType boolean[] java.lang.Object[] org.hibernate.type.Type[] int
      StackMap stack:
            aload 4 /* subValues */
            iload 6 /* i */
            aaload
            astore 7 /* subValue */
        start local 7 // java.lang.Object subValue
         9: .line 197
            aload 3 /* nullability */
            iload 6 /* i */
            baload
            ifne 11
            aload 7 /* subValue */
            ifnonnull 11
        10: .line 198
            aload 2 /* compositeType */
            invokeinterface org.hibernate.type.CompositeType.getPropertyNames:()[Ljava/lang/String;
            iload 6 /* i */
            aaload
            areturn
        11: .line 200
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 7 /* subValue */
            ifnull 15
        12: .line 201
            aload 0 /* this */
            aload 5 /* propertyTypes */
            iload 6 /* i */
            aaload
            aload 7 /* subValue */
            invokevirtual org.hibernate.engine.internal.Nullability.checkSubElementsNullability:(Lorg/hibernate/type/Type;Ljava/lang/Object;)Ljava/lang/String;
            astore 8 /* breakProperties */
        start local 8 // java.lang.String breakProperties
        13: .line 202
            aload 8 /* breakProperties */
            ifnull 15
        14: .line 203
            aload 2 /* compositeType */
            invokeinterface org.hibernate.type.CompositeType.getPropertyNames:()[Ljava/lang/String;
            iload 6 /* i */
            aaload
            aload 8 /* breakProperties */
            invokestatic org.hibernate.engine.internal.Nullability.buildPropertyPath:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
            areturn
        end local 8 // java.lang.String breakProperties
        end local 7 // java.lang.Object subValue
        15: .line 195
      StackMap locals:
      StackMap stack:
            iinc 6 /* i */ 1
      StackMap locals:
      StackMap stack:
        16: iload 6 /* i */
            aload 4 /* subValues */
            arraylength
            if_icmplt 8
        end local 6 // int i
        end local 5 // org.hibernate.type.Type[] propertyTypes
        end local 4 // java.lang.Object[] subValues
        17: .line 208
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 3 // boolean[] nullability
        end local 2 // org.hibernate.type.CompositeType compositeType
        end local 1 // java.lang.Object value
        end local 0 // org.hibernate.engine.internal.Nullability this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   18     0             this  Lorg/hibernate/engine/internal/Nullability;
            0   18     1            value  Ljava/lang/Object;
            0   18     2    compositeType  Lorg/hibernate/type/CompositeType;
            3   18     3      nullability  [Z
            5   17     4        subValues  [Ljava/lang/Object;
            6   17     5    propertyTypes  [Lorg/hibernate/type/Type;
            7   17     6                i  I
            9   15     7         subValue  Ljava/lang/Object;
           13   15     8  breakProperties  Ljava/lang/String;
    Exceptions:
      throws org.hibernate.HibernateException
    MethodParameters:
               Name  Flags
      value          
      compositeType  

  private static java.lang.String buildPropertyPath(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // java.lang.String parent
        start local 1 // java.lang.String child
         0: .line 220
            new java.lang.StringBuilder
            dup
            aload 0 /* parent */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            bipush 46
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            aload 1 /* child */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 1 // java.lang.String child
        end local 0 // java.lang.String parent
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0  parent  Ljava/lang/String;
            0    1     1   child  Ljava/lang/String;
    MethodParameters:
        Name  Flags
      parent  
      child   
}
SourceFile: "Nullability.java"
NestMembers:
  org.hibernate.engine.internal.Nullability$NullabilityCheckType
InnerClasses:
  public final NullabilityCheckType = org.hibernate.engine.internal.Nullability$NullabilityCheckType of org.hibernate.engine.internal.Nullability