// ĠIG NORE _ BACKEND : ĠJS _ IR Ċ // ĠEXPECT ED _ RE ACH ABLE _ NODES : Ġ 1 3 3 6 Ċ // ĠMODULE : Ġlib Ċ // ĠFILE : Ġlib . kt Ċ open Ġclass ĠA Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġa : ĠAny ĊĠĠĠ Ġopen Ġlateinit Ġvar Ġc : ĠAny ĊĊĠĠĠ Ġfun Ġuse A () Ġ= Ġa ĊĠĠĠ Ġfun Ġuse C () Ġ= Ġc ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġb : ĠAny ĊĊĠĠĠĠĠĠĠ Ġfun Ġuse B () Ġ= Ġb ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠO Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġo : ĠAny ĊĊĠĠĠ Ġfun Ġuse O () Ġ= Ġo Ċ } Ċ Ċ fun Ġ< T > Ġcheck Exception ( propertyName : ĠString , Ġf : Ġ() Ġ-> ĠT ) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġf () ĊĠĠĠ Ġ} ĊĠĠĠ Ġcatch Ġ( e : Ġkotlin . Un initialized Property AccessException ) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( e . message , Ġ" late init Ġproperty Ġ${ propertyName } Ġhas Ġnot Ġbeen Ġinitialized ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġrun Checks () Ġ{ ĊĠĠĠ Ġcheck Exception (" a ") Ġ{ ĠA (). use A () Ġ} ĊĠĠĠ Ġcheck Exception (" b ") Ġ{ ĠA . b Ġ} ĊĠĠĠ Ġcheck Exception (" b ") Ġ{ ĠA . use B () Ġ} ĊĠĠĠ Ġcheck Exception (" o ") Ġ{ ĠO . o Ġ} ĊĠĠĠ Ġcheck Exception (" o ") Ġ{ ĠO . use O () Ġ} Ċ } Ċ Ċ // ĠMODULE : Ġmain ( lib ) Ċ // ĠFILE : Ġmain . kt Ċ Ċ class ĠC : ĠA () Ġ{ ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġc : ĠAny Ċ } Ċ Ċ fun Ġbox (): ĠString Ġ{ ĊĠĠĠ Ġrun Checks () ĊĊĠĠĠ Ġcheck Exception (" a ") Ġ{ ĠA (). use A () Ġ} ĊĠĠĠ Ġcheck Exception (" b ") Ġ{ ĠA . b Ġ} ĊĠĠĠ Ġcheck Exception (" b ") Ġ{ ĠA . use B () Ġ} ĊĠĠĠ Ġcheck Exception (" o ") Ġ{ ĠO . o Ġ} ĊĠĠĠ Ġcheck Exception (" o ") Ġ{ ĠO . use O () Ġ} ĊĊĠĠĠ Ġcheck Exception (" a ") Ġ{ ĠC (). use A () Ġ} ĊĠĠĠ Ġcheck Exception (" c ") Ġ{ ĠC (). c Ġ} ĊĠĠĠ Ġcheck Exception (" c ") Ġ{ ĠC (). use C () Ġ} ĊĊĠĠĠ Ġreturn Ġ" OK " Ċ }