/* Ċ Ġ* ĠDesign ed Ġand Ġdeveloped Ġby Ġ 2 0 1 9 Ġsky do ves Ġ( Ja ew o ong ĠE um ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" unused ") Ċ @ file : Jvm Name (" What If ") Ċ @ file : Jvm Mult if ile Class Ċ Ċ package Ġcom . sky do ves . what if Ċ Ċ import Ġkotlin . contracts . Invocation Kind Ċ import Ġkotlin . contracts . contract Ċ Ċ /** Ċ Ġ* ĠWhat If Ġis Ġkotlin Ġextensions Ġfor Ġexpress ing Ġa Ġsingle Ġif - else Ġstatement , Ġnullable Ġand Ġboolean . Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġ[ given ] Ġboolean Ġis Ġtrue . Ċ Ġ* Ċ Ġ* Ġ@ param Ġgiven ĠA Ġgiven Ġcondition Ġfor Ġexecuting Ġthe Ġ[ what If ] Ġlambda . Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġfunction Ġif Ġthe Ġ[ given ] Ġcondition Ġpass . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġoriginal Ġtarget Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< T > ĠT . what If ( ĊĠ Ġgiven : Ġ( T ) Ġ-> ĠBoolean ?, ĊĠ Ġwhat If : Ġ() Ġ-> ĠUnit Ċ ): ĠT Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġif Ġ( given ( this ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠ Ġwhat If () ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġ[ given ] Ġboolean Ġis Ġtrue . Ċ Ġ* ĠIf Ġthe Ġ[ given ] Ġboolean Ġis Ġfalse , Ġ[ what IfNot ] Ġwill Ġbe Ġinvoked Ġinstead Ġof Ġthe Ġ[ what If ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġgiven ĠA Ġgiven Ġcondition Ġfor Ġexecuting Ġthe Ġ[ what If ] Ġor Ġ[ what IfNot ] Ġlambda . Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġif Ġthe Ġ[ given ] Ġcondition Ġpass . Ċ Ġ* Ġ@ param Ġwhat IfNot ĠAn Ġexecutable Ġlambda Ġfunction Ġif Ġthe Ġ[ given ] Ġcondition Ġwould Ġnot Ġpass . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġoriginal Ġtarget Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< T > ĠT . what If ( ĊĠ Ġgiven : Ġ( T ) Ġ-> ĠBoolean ?, ĊĠ Ġwhat If : Ġ() Ġ-> ĠUnit , ĊĠ Ġwhat IfNot : Ġ() Ġ-> ĠUnit Ċ ): ĠT Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠĠĠ Ġcalls In Place ( what IfNot , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġif Ġ( given ( this ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠ Ġwhat If () ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġwhat IfNot () ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġ[ given ] Ġboolean Ġis Ġtrue . Ċ Ġ* ĠSo Ġit Ġis Ġuseful Ġwhen Ġusing Ġwith Ġa Ġchaining Ġfunction Ġlike Ġbuilder Ġpattern Ġor Ġ[ apply ] Ġexpression Ġin Ġkotlin . Ċ Ġ* Ċ Ġ* Ġ@ param Ġgiven ĠA Ġgiven Ġcondition Ġfor Ġexecuting Ġthe Ġ[ what If ] Ġlambda . Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġif Ġthe Ġ[ given ] Ġcondition Ġpass . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġoriginal Ġtarget Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< T > ĠT . what If ( ĊĠ Ġgiven : ĠBoolean ?, ĊĠ Ġwhat If : ĠT . () Ġ-> ĠUnit Ċ ): ĠT Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġif Ġ( given Ġ== Ġtrue ) Ġ{ ĊĠĠĠ Ġthis . apply Ġ{ Ġwhat If () Ġ} ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġ[ given ] Ġboolean Ġis Ġtrue . Ċ Ġ* ĠIf Ġthe Ġ[ given ] Ġboolean Ġis Ġfalse , Ġ[ what IfNot ] Ġwill Ġbe Ġinvoked Ġinstead Ġof Ġthe Ġ[ what If ]. Ċ Ġ* ĠSo Ġit Ġis Ġuseful Ġwhen Ġusing Ġwith Ġa Ġchaining Ġfunction Ġlike Ġbuilder Ġpattern Ġor Ġ[ apply ] Ġexpression Ġin Ġkotlin . Ċ Ġ* Ċ Ġ* Ġ@ param Ġgiven ĠA Ġgiven Ġcondition Ġfor Ġexecuting Ġthe Ġ[ what If ] Ġor Ġ[ what IfNot ] Ġlambda . Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġif Ġthe Ġ[ given ] Ġcondition Ġpass . Ċ Ġ* Ġ@ param Ġwhat IfNot ĠAn Ġexecutable Ġlambda Ġfunction Ġif Ġthe Ġ[ given ] Ġcondition Ġwould Ġnot Ġpass . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġoriginal Ġtarget Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< T > ĠT . what If ( ĊĠ Ġgiven : ĠBoolean ?, ĊĠ Ġwhat If : ĠT . () Ġ-> ĠUnit , ĊĠ Ġwhat IfNot : ĠT . () Ġ-> ĠUnit Ċ ): ĠT Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠĠĠ Ġcalls In Place ( what IfNot , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġif Ġ( given Ġ== Ġtrue ) Ġ{ ĊĠĠĠ Ġthis . apply Ġ{ Ġwhat If () Ġ} ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġthis . apply Ġ{ Ġwhat IfNot () Ġ} ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġ[ given ] Ġlambda 's Ġreturn Ġvalue Ġis Ġtrue . Ċ Ġ* ĠSo Ġit Ġis Ġuseful Ġwhen Ġusing Ġwith Ġa Ġchaining Ġfunction Ġlike Ġbuilder Ġpattern Ġor Ġ[ apply ] Ġexpression Ġin Ġkotlin . Ċ Ġ* Ċ Ġ* Ġ@ param Ġgiven ĠA Ġgiven Ġcondition Ġfor Ġexecuting Ġthe Ġ[ what If Do ] Ġlambda . Ċ Ġ* Ġ@ param Ġwhat If Do ĠAn Ġexecutable Ġlambda Ġif Ġthe Ġ[ given ] Ġcondition Ġpass . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġoriginal Ġtarget Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< T > ĠT . what If ( ĊĠ Ġgiven : Ġ() Ġ-> ĠBoolean ?, ĊĠ Ġwhat If Do : ĠT . () Ġ-> ĠUnit Ċ ): ĠT Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If Do , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġreturn Ġthis . what If ( ĊĠĠĠ Ġgiven Ġ= Ġgiven , ĊĠĠĠ Ġwhat If Do Ġ= Ġwhat If Do , ĊĠĠĠ Ġwhat IfNot Ġ= Ġ{ Ġ} ĊĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġ[ given ] Ġlambda 's Ġreturn Ġvalue Ġis Ġtrue . Ċ Ġ* ĠIf Ġthe Ġ[ given ] Ġboolean Ġis Ġfalse , Ġ[ what IfNot ] Ġwill Ġbe Ġinvoked Ġinstead Ġof Ġthe Ġ[ what If Do ]. Ċ Ġ* ĠSo Ġit Ġis Ġuseful Ġwhen Ġusing Ġwith Ġa Ġchaining Ġfunction Ġlike Ġbuilder Ġpattern Ġor Ġ[ apply ] Ġexpression Ġin Ġkotlin . Ċ Ġ* Ċ Ġ* Ġ@ param Ġgiven ĠA Ġgiven Ġcondition Ġfor Ġexecuting Ġthe Ġ[ what If Do ] Ġor Ġ[ what IfNot ] Ġlambda . Ċ Ġ* Ġ@ param Ġwhat If Do ĠAn Ġexecutable Ġlambda Ġif Ġthe Ġ[ given ] Ġcondition Ġpass . Ċ Ġ* Ġ@ param Ġwhat IfNot ĠAn Ġexecutable Ġlambda Ġfunction Ġif Ġthe Ġ[ given ] Ġcondition Ġwould Ġnot Ġpass . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġoriginal Ġtarget Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< T > ĠT . what If ( ĊĠ Ġgiven : Ġ() Ġ-> ĠBoolean ?, ĊĠ Ġwhat If Do : ĠT . () Ġ-> ĠUnit , ĊĠ Ġwhat IfNot : ĠT . () Ġ-> ĠUnit Ċ ): ĠT Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If Do , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠĠĠ Ġcalls In Place ( what IfNot , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġif Ġ( given () Ġ== Ġtrue ) Ġ{ ĊĠĠĠ Ġthis . what If Do () ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġthis . what IfNot () ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġ[ T ] Ġtarget Ġobject Ġis Ġnot Ġnull . Ċ Ġ* ĠIt Ġis Ġuseful Ġwhen Ġthe Ġreceiver Ġ[ T ] Ġand Ġthe Ġresult Ġ[ R ] Ġshould Ġbe Ġdifferent . Ċ Ġ* Ċ Ġ* Ġ@ param Ġdefault ĠAn Ġexecutable Ġdefault Ġvalue Ġif Ġthe Ġ[ T ] Ġtarget Ġobject Ġis Ġnot Ġnull . Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġif Ġthe Ġ[ T ] Ġtarget Ġobject Ġis Ġnot Ġnull . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġdesired Ġtype Ġof Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< T , ĠR > ĠT . what If Map ( ĊĠ Ġdefault : ĠR , ĊĠ Ġwhat If : Ġ( T ) Ġ-> ĠR Ċ ): ĠR Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġreturn Ġthis . what If Map ( ĊĠĠĠ Ġwhat If Ġ= Ġwhat If , ĊĠĠĠ Ġwhat IfNot Ġ= Ġ{ Ġdefault Ġ} ĊĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġ[ T ] Ġtarget Ġobject Ġis Ġnot Ġnull . Ċ Ġ* ĠIt Ġis Ġuseful Ġwhen Ġthe Ġreceiver Ġ[ T ] Ġand Ġthe Ġresult Ġ[ R ] Ġshould Ġbe Ġdifferent . Ċ Ġ* Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġif Ġthe Ġ[ T ] Ġtarget Ġobject Ġis Ġnot Ġnull . Ċ Ġ* Ġ@ param Ġwhat IfNot ĠAn Ġexecutable Ġlambda Ġfunction Ġif Ġthe Ġ[ T ] Ġtarget Ġobject Ġis Ġnull . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġdesired Ġtype Ġof Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< T , ĠR > ĠT . what If Map ( ĊĠ Ġwhat If : Ġ( T ) Ġ-> ĠR , ĊĠ Ġwhat IfNot : Ġ( T ) Ġ-> ĠR Ċ ): ĠR Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠĠĠ Ġcalls In Place ( what IfNot , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġif Ġ( this Ġ!= Ġnull ) Ġ{ ĊĠĠĠ Ġreturn Ġwhat If ( this ) ĊĠ Ġ} ĊĠ Ġreturn Ġwhat IfNot ( this ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġ[ given ] Ġboolean Ġvalue . Ċ Ġ* ĠIf Ġthe Ġ[ given ] Ġboolean Ġvalue Ġis Ġfalse , Ġthe Ġresult Ġvalue Ġis Ġthe Ġ[ default ]. Ċ Ġ* ĠIt Ġis Ġuseful Ġwhen Ġthe Ġreceiver Ġ[ T ] Ġand Ġthe Ġresult Ġ[ R ] Ġshould Ġbe Ġdifferent . Ċ Ġ* Ċ Ġ* Ġ@ param Ġgiven ĠA Ġgiven Ġcondition Ġfor Ġexecuting Ġthe Ġ[ what If ] Ġlambda . Ċ Ġ* Ġ@ param Ġdefault ĠAn Ġexecutable Ġdefault Ġvalue Ġif Ġthe Ġ[ given ] Ġcondition Ġwould Ġnot Ġpass . Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġif Ġthe Ġ[ given ] Ġcondition Ġpass . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġdesired Ġtype Ġof Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< T , ĠR > ĠT . what If Map ( ĊĠ Ġgiven : ĠBoolean ?, ĊĠ Ġdefault : ĠR , ĊĠ Ġwhat If : Ġ( T ) Ġ-> ĠR Ċ ): ĠR Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġreturn Ġthis . what If Map ( ĊĠĠĠ Ġgiven Ġ= Ġgiven , ĊĠĠĠ Ġwhat If Ġ= Ġwhat If , ĊĠĠĠ Ġwhat IfNot Ġ= Ġ{ Ġdefault Ġ} ĊĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġ[ given ] Ġboolean Ġvalue . Ċ Ġ* ĠIf Ġthe Ġ[ given ] Ġboolean Ġis Ġfalse , Ġ[ what IfNot ] Ġwill Ġbe Ġinvoked Ġinstead Ġof Ġthe Ġ[ what If ]. Ċ Ġ* ĠIt Ġis Ġuseful Ġwhen Ġthe Ġreceiver Ġ[ T ] Ġand Ġthe Ġresult Ġ[ R ] Ġshould Ġbe Ġdifferent . Ċ Ġ* Ċ Ġ* Ġ@ param Ġgiven ĠA Ġgiven Ġcondition Ġfor Ġexecuting Ġthe Ġ[ what If ] Ġlambda . Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġif Ġthe Ġ[ given ] Ġcondition Ġpass . Ċ Ġ* Ġ@ param Ġwhat IfNot ĠAn Ġexecutable Ġlambda Ġfunction Ġif Ġthe Ġ[ given ] Ġcondition Ġwould Ġnot Ġpass . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġdesired Ġtype Ġof Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< T , ĠR > ĠT . what If Map ( ĊĠ Ġgiven : ĠBoolean ?, ĊĠ Ġwhat If : Ġ( T ) Ġ-> ĠR , ĊĠ Ġwhat IfNot : Ġ( T ) Ġ-> ĠR Ċ ): ĠR Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠĠĠ Ġcalls In Place ( what IfNot , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġif Ġ( given Ġ== Ġtrue ) Ġ{ ĊĠĠĠ Ġreturn Ġwhat If ( this ) ĊĠ Ġ} ĊĠ Ġreturn Ġwhat IfNot ( this ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġ[ given ] Ġboolean Ġvalue . Ċ Ġ* ĠIf Ġthe Ġ[ given ] Ġboolean Ġvalue Ġis Ġfalse , Ġthe Ġresult Ġvalue Ġis Ġthe Ġ[ default ]. Ċ Ġ* ĠIt Ġis Ġuseful Ġwhen Ġthe Ġreceiver Ġ[ T ] Ġand Ġthe Ġresult Ġ[ R ] Ġshould Ġbe Ġdifferent . Ċ Ġ* Ċ Ġ* Ġ@ param Ġgiven ĠA Ġgiven Ġcondition Ġfor Ġexecuting Ġthe Ġ[ what If ] Ġlambda . Ċ Ġ* Ġ@ param Ġdefault ĠAn Ġexecutable Ġdefault Ġvalue Ġif Ġthe Ġ[ given ] Ġcondition Ġwould Ġnot Ġpass . Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġif Ġthe Ġ[ given ] Ġcondition Ġpass . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġdesired Ġtype Ġof Ġobject . Ċ Ġ*/ Ċ @ Deprecated ( ĊĠ Ġmessage Ġ= Ġ" use Ġwhat If Map Ġinstead .", ĊĠ Ġreplace With Ġ= ĠReplace With ( ĊĠĠĠ Ġ" what If Map ( given , Ġdefault , Ġwhat If )", ĊĠĠĠ Ġimports Ġ= Ġ[" com . sky do ves . what If . what If Map "] ĊĠ Ġ) Ċ ) Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< T , ĠR > ĠT . what If Let ( ĊĠ Ġgiven : ĠBoolean ?, ĊĠ Ġdefault : ĠR , ĊĠ Ġwhat If : Ġ( T ) Ġ-> ĠR Ċ ): ĠR Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġif Ġ( given Ġ== Ġtrue ) Ġ{ ĊĠĠĠ Ġreturn Ġwhat If ( this ) ĊĠ Ġ} ĊĠ Ġreturn Ġdefault Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġ[ given ] Ġboolean Ġvalue . Ċ Ġ* ĠIf Ġthe Ġ[ given ] Ġboolean Ġis Ġfalse , Ġ[ what IfNot ] Ġwill Ġbe Ġinvoked Ġinstead Ġof Ġthe Ġ[ what If ]. Ċ Ġ* ĠIt Ġis Ġuseful Ġwhen Ġthe Ġreceiver Ġ[ T ] Ġand Ġthe Ġresult Ġ[ R ] Ġshould Ġbe Ġdifferent . Ċ Ġ* Ċ Ġ* Ġ@ param Ġgiven ĠA Ġgiven Ġcondition Ġfor Ġexecuting Ġthe Ġ[ what If ] Ġlambda . Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġif Ġthe Ġ[ given ] Ġcondition Ġpass . Ċ Ġ* Ġ@ param Ġwhat IfNot ĠAn Ġexecutable Ġlambda Ġfunction Ġif Ġthe Ġ[ given ] Ġcondition Ġwould Ġnot Ġpass . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġdesired Ġtype Ġof Ġobject . Ċ Ġ*/ Ċ @ Deprecated ( ĊĠ Ġmessage Ġ= Ġ" use Ġwhat If Map Ġinstead .", ĊĠ Ġreplace With Ġ= ĠReplace With ( ĊĠĠĠ Ġ" what If Map ( given , Ġdefault , Ġwhat If , Ġwhat IfNot )", ĊĠĠĠ Ġimports Ġ= Ġ[" com . sky do ves . what If . what If Map "] ĊĠ Ġ) Ċ ) Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< T , ĠR > ĠT . what If Let ( ĊĠ Ġgiven : ĠBoolean ?, ĊĠ Ġwhat If : Ġ( T ) Ġ-> ĠR , ĊĠ Ġwhat IfNot : Ġ( T ) Ġ-> ĠR Ċ ): ĠR Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠĠĠ Ġcalls In Place ( what IfNot , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġif Ġ( given Ġ== Ġtrue ) Ġ{ ĊĠĠĠ Ġreturn Ġwhat If ( this ) ĊĠ Ġ} ĊĠ Ġreturn Ġwhat IfNot ( this ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġ[ T ] Ġtarget Ġobject Ġis Ġnot Ġnull . Ċ Ġ* Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġif Ġa Ġtarget Ġobject Ġis Ġnot Ġnull . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġdesired Ġtype Ġof Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< T > ĠT ?. what If NotNull ( ĊĠ Ġwhat If : Ġ( T ) Ġ-> ĠUnit Ċ ): ĠT ? Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġreturn Ġthis . what If NotNull ( ĊĠĠĠ Ġwhat If Ġ= Ġwhat If , ĊĠĠĠ Ġwhat IfNot Ġ= Ġ{ Ġ} ĊĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġ[ T ] Ġtarget Ġobject Ġis Ġnot Ġnull . Ċ Ġ* ĠIf Ġthe Ġ[ T ] Ġtarget Ġis Ġnull , Ġ[ what IfNot ] Ġwill Ġbe Ġinvoked Ġinstead Ġof Ġthe Ġ[ what If ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġif Ġa Ġtarget Ġobject Ġis Ġnot Ġnull . Ċ Ġ* Ġ@ param Ġwhat IfNot ĠAn Ġexecutable Ġlambda Ġif Ġa Ġtarget Ġobject Ġis Ġnull . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġdesired Ġtype Ġof Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< T > ĠT ?. what If NotNull ( ĊĠ Ġwhat If : Ġ( T ) Ġ-> ĠUnit , ĊĠ Ġwhat IfNot : Ġ() Ġ-> ĠUnit Ċ ): ĠT ? Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠĠĠ Ġcalls In Place ( what IfNot , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġif Ġ( this Ġ!= Ġnull ) Ġ{ ĊĠĠĠ Ġwhat If ( this ) ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĠ Ġwhat IfNot () ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġtarget Ġobject Ġis Ġnot Ġnull . Ċ Ġ* ĠIf Ġthe Ġtarget Ġis Ġnot Ġnull Ġand Ġthe Ġtarget Ġcan Ġbe Ġcast Ġby Ġthe Ġdesired Ġtype Ġ[ R ], Ċ Ġ* Ġthe Ġreceiver Ġwill Ġget Ġa Ġcast ed Ġ[ R ] Ġtype . Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġparcel able . what If NotNull As < Post er > Ġ{ Ġposter Ġ-> Ċ Ġ* Ġ Ġlog ( poster . name ) Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġwill Ġreceive Ġa Ġcast ed Ġ[ R ] Ċ Ġ* Ġif Ġa Ġtarget Ġobject Ġis Ġnot Ġnull Ġand Ġthe Ġtarget Ġcan Ġbe Ġcast Ġby Ġthe Ġdesired Ġtype Ġ[ R ]. Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġdesired Ġtype Ġof Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< re ified ĠR > ĠAny ?. what If NotNull As ( ĊĠ Ġwhat If : Ġ( R ) Ġ-> ĠUnit Ċ ): ĠAny ? Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġreturn Ġwhat If NotNull As ( ĊĠĠĠ Ġwhat If Ġ= Ġwhat If , ĊĠĠĠ Ġwhat IfNot Ġ= Ġ{ Ġ} ĊĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġtarget Ġobject Ġis Ġnot Ġnull . Ċ Ġ* ĠIf Ġthe Ġtarget Ġis Ġnot Ġnull Ġand Ġthe Ġtarget Ġcan Ġbe Ġcast Ġby Ġthe Ġdesired Ġtype Ġ[ R ], Ċ Ġ* Ġthe Ġreceiver Ġwill Ġget Ġa Ġcast ed Ġ[ R ] Ġtype . Ċ Ġ* ĠIf Ġthe Ġtarget Ġis Ġnull , Ġ[ what IfNot ] Ġwill Ġbe Ġinvoked Ġinstead Ġof Ġthe Ġ[ what If ] Ġwithout Ġcasting . Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġ Ġserial izable . what If NotNull As < Post er >( Ċ Ġ* Ġ Ġwhat If Ġ= Ġ{ Ġposter Ġ-> Ġlog ( poster . name ) Ġ}, Ċ Ġ* Ġ Ġwhat IfNot Ġ= Ġ{ Ċ Ġ* ĠĠĠ Ġ// Ġdo Ġsomething Ċ Ġ* Ġ Ġ}) Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ@ param Ġwhat If Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġwill Ġreceive Ġa Ġcast ed Ġ[ R ] Ċ Ġ* Ġif Ġa Ġtarget Ġobject Ġis Ġnot Ġnull Ġand Ġthe Ġtarget Ġcan Ġbe Ġcast Ġby Ġthe Ġdesired Ġtype Ġ[ R ]. Ċ Ġ* Ġ@ param Ġwhat IfNot ĠAn Ġexecutable Ġlambda Ġif Ġa Ġtarget Ġobject Ġis Ġnull Ġor Ġcan Ġnot Ġbe Ġcast Ġby Ġthe Ġdesired Ġtype Ġ[ R ]. Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġdesired Ġtype Ġof Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< re ified ĠR > ĠAny ?. what If NotNull As ( ĊĠ Ġwhat If : Ġ( R ) Ġ-> ĠUnit , ĊĠ Ġwhat IfNot : Ġ() Ġ-> ĠUnit Ċ ): ĠAny ? Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠĠĠ Ġcalls In Place ( what IfNot , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġif Ġ( this Ġ!= Ġnull Ġ&& Ġthis Ġis ĠR ) Ġ{ ĊĠĠĠ Ġwhat If ( this Ġas ĠR ) ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĠ Ġwhat IfNot () ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġ[ T ] Ġtarget Ġobject Ġis Ġnot Ġnull . Ċ Ġ* ĠIf Ġthe Ġ[ T ] Ġtarget Ġis Ġnull , Ġ[ what IfNot ] Ġwill Ġbe Ġinvoked Ġinstead Ġof Ġthe Ġ[ what If ]. Ċ Ġ* ĠIt Ġis Ġuseful Ġwhen Ġthe Ġreceiver Ġ[ T ] Ġand Ġthe Ġresult Ġ[ R ] Ġshould Ġbe Ġdifferent . Ċ Ġ* Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġif Ġa Ġtarget Ġobject Ġis Ġnot Ġnull Ġand Ġreturns Ġa Ġdifferent Ġtype Ġ[ R ]. Ċ Ġ* Ġ@ param Ġwhat IfNot ĠAn Ġexecutable Ġlambda Ġif Ġa Ġtarget Ġobject Ġis Ġnull Ġand Ġreturns Ġa Ġdifferent Ġtype Ġ[ R ]. Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġdesired Ġtype Ġof Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun Ġ< T , ĠR > ĠT ?. what If NotNull With ( ĊĠ Ġwhat If : Ġ( T ) Ġ-> ĠR , ĊĠ Ġwhat IfNot : Ġ( T ?) Ġ-> ĠR Ċ ): ĠR Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠĠĠ Ġcalls In Place ( what IfNot , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġif Ġ( this Ġ!= Ġnull ) Ġ{ ĊĠĠĠ Ġreturn Ġwhat If ( this ) ĊĠ Ġ} ĊĠ Ġreturn Ġwhat IfNot ( this ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġtarget Ġ[ Boolean ] Ġis Ġnot Ġnull Ġand Ġtrue . Ċ Ġ* Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġfunction Ġif Ġthe Ġ[ Boolean ] Ġis Ġnot Ġnull Ġand Ġtrue . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġdesired Ġtype Ġof Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun ĠBoolean ?. what If ( ĊĠ Ġwhat If : Ġ() Ġ-> ĠUnit Ċ ): ĠBoolean ? Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġreturn Ġthis . what If ( ĊĠĠĠ Ġwhat If Ġ= Ġwhat If , ĊĠĠĠ Ġwhat IfNot Ġ= Ġ{ Ġ} ĊĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġtarget Ġobject Ġis Ġnot Ġnull Ġand Ġtrue . Ċ Ġ* ĠIf Ġthe Ġtarget Ġis Ġnull Ġor Ġfalse , Ġ[ what IfNot ] Ġwill Ġbe Ġinvoked Ġinstead Ġof Ġthe Ġ[ what If ]. \ Ċ Ġ* Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġfunction Ġif Ġthe Ġ[ Boolean ] Ġis Ġnot Ġnull Ġand Ġtrue . Ċ Ġ* Ġ@ param Ġwhat IfNot ĠAn Ġexecutable Ġlambda Ġfunction Ġif Ġthe Ġ[ Boolean ] Ġis Ġnull Ġor Ġfalse . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġdesired Ġtype Ġof Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun ĠBoolean ?. what If ( ĊĠ Ġwhat If : Ġ() Ġ-> ĠUnit , ĊĠ Ġwhat IfNot : Ġ() Ġ-> ĠUnit Ċ ): ĠBoolean ? Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠĠĠ Ġcalls In Place ( what IfNot , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġif Ġ( this Ġ== Ġtrue ) Ġ{ ĊĠĠĠ Ġwhat If () ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġwhat IfNot () ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġtarget Ġobject Ġis Ġnot Ġnull Ġand Ġfalse . Ċ Ġ* Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġfunction Ġif Ġthe Ġ[ Boolean ] Ġis Ġnull Ġor Ġfalse . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġdesired Ġtype Ġof Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun ĠBoolean ?. what If Else ( ĊĠ Ġwhat If : Ġ() Ġ-> ĠUnit Ċ ): ĠBoolean ? Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġif Ġ( this Ġ== Ġfalse ) Ġ{ ĊĠĠĠ Ġwhat If () ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġtarget ĠBoolean Ġis Ġtrue Ġand Ġthe Ġ[ predicate ] Ġis Ġalso Ġtrue . Ċ Ġ* Ċ Ġ* Ġ@ param Ġpredicate ĠA Ġpredicate Ġvalue Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġfunction Ġif Ġthe Ġ[ Boolean ] Ġand Ġpredicate Ġare Ġboth Ġnot Ġnull Ġand Ġtrue . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġdesired Ġtype Ġof Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun ĠBoolean ?. what If And ( ĊĠ Ġpredicate : ĠBoolean ?, ĊĠ Ġwhat If : Ġ() Ġ-> ĠUnit Ċ ): ĠBoolean ? Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġif Ġ( this Ġ== Ġtrue Ġ&& Ġpredicate Ġ== Ġtrue ) Ġ{ ĊĠĠĠ Ġwhat If () ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġexpression Ġfor Ġinvoking Ġ[ what If ] Ġwhen Ġthe Ġtarget ĠBoolean Ġis Ġtrue Ġor Ġthe Ġ[ predicate ] Ġis Ġtrue . Ċ Ġ* Ċ Ġ* Ġ@ param Ġpredicate ĠA Ġpredicate Ġvalue . Ċ Ġ* Ġ@ param Ġwhat If ĠAn Ġexecutable Ġlambda Ġfunction Ġif Ġthe Ġ[ Boolean ] Ġor Ġpredicate Ġis Ġnot Ġnull Ġand Ġtrue . Ċ Ġ* Ċ Ġ* Ġ@ return ĠReturns Ġthe Ġdesired Ġtype Ġof Ġobject . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ What If Inline Only Ċ public Ġinline Ġfun ĠBoolean ?. what If Or ( ĊĠ Ġpredicate : ĠBoolean ?, ĊĠ Ġwhat If : Ġ() Ġ-> ĠUnit Ċ ): ĠBoolean ? Ġ{ ĊĠ Ġcontract Ġ{ ĊĠĠĠ Ġcalls In Place ( what If , ĠInvocation Kind . AT _ MO ST _ ON CE ) ĊĠ Ġ} ĊĠ Ġif Ġ( this Ġ== Ġtrue Ġ|| Ġpredicate Ġ== Ġtrue ) Ġ{ ĊĠĠĠ Ġwhat If () ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ