package Ġs ib w af . k awa Ċ Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġs ib w af . k awa . constraints . Null ability Ċ import Ġs ib w af . k awa . constraints . Reference Constraint Ċ import Ġstri kt . api . expect That Ċ import Ġstri kt . assertions . is A Ċ import Ġstri kt . assertions . isEqualTo Ċ import Ġstri kt . assertions . isNotNull Ċ import Ġkotlin . test . Test Ċ Ċ class ĠNull Mer ging Test Ġ: ĠMethod Analyzer TestBase () Ġ{ ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` Test Ġ' if ' Ġpossible Ġnull Ġmerging Ġsingle - branch `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġparse Method ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvoid Ġtest ( boolean Ġcondition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava . util . List < String > Ġlist Ġ= Ġnew Ġjava . util . ArrayList <>(); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( condition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= Ġnull ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġflow Ġ= Ġrun Blocking Ġ{ Ġanalyze ( method ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġvariables Ġ= Ġmethod . extract Variables () ĊĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġflow . end Frame Ġas ĠRe ach able Frame ĊĊĠĠĠĠĠĠĠ Ġexpect That ( frame . get Constraint ( variables . getValue (" list "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. described As (" list Ġconstraint ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNotNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. is A < Reference Constraint >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Ġ{ Ġnull ability Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( Null ability . PO SS IBLE _ NULL ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` Test Ġ' if ' Ġpossible Ġnull Ġmerging Ġmulti - branch `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġparse Method ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvoid Ġtest ( boolean Ġcondition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava . util . List < String > Ġlist ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( condition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= Ġnull ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= Ġnew Ġjava . util . ArrayList <>(); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġflow Ġ= Ġrun Blocking Ġ{ Ġanalyze ( method ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġvariables Ġ= Ġmethod . extract Variables () ĊĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġflow . end Frame Ġas ĠRe ach able Frame ĊĊĠĠĠĠĠĠĠ Ġexpect That ( frame . get Constraint ( variables . getValue (" list "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. described As (" list Ġconstraint ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNotNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. is A < Reference Constraint >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Ġ{ Ġnull ability Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( Null ability . PO SS IBLE _ NULL ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` Test Ġ' if Ġ( x Ġ== Ġnull ) Ġ{ Ġx Ġ= Ġnot - null Ġ}' Ġmerging `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġparse Method ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvoid Ġtest ( boolean Ġcondition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava . util . List < String > Ġlist Ġ= Ġnew Ġjava . util . ArrayList <>(); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( condition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= Ġnull ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= Ġnew Ġjava . util . ArrayList <>(); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġflow Ġ= Ġrun Blocking Ġ{ Ġanalyze ( method ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġvariables Ġ= Ġmethod . extract Variables () ĊĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġflow . end Frame Ġas ĠRe ach able Frame // . previous !! ĊĊĠĠĠĠĠĠĠ Ġexpect That ( frame . get Constraint ( variables . getValue (" list "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. described As (" list Ġconstraint ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNotNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. is A < Reference Constraint >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Ġ{ Ġnull ability Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( Null ability . NE VER _ NULL ) ĊĠĠĠ Ġ} Ċ }