/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 , ĠF ra un ho fer ĠAI SEC . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ $$$$ $\ Ġ Ġ$ $$$$ $$ \ ĠĠ Ġ$ $$$$ $\ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$$ Ġ Ġ__ $$ \ Ġ$$ Ġ Ġ__ $$ \ Ġ$$ Ġ Ġ__ $$ \ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$$ Ġ/ Ġ Ġ\ __| $$ Ġ| Ġ Ġ$$ Ġ| $$ Ġ/ Ġ Ġ\ __| Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$$ Ġ| ĠĠĠĠĠ Ġ$ $$$$ $$ Ġ Ġ| $$ Ġ| $$$$ \ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$$ Ġ| ĠĠĠĠĠ Ġ$$ Ġ Ġ__ __/ Ġ$$ Ġ| \_ $$ Ġ| Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$$ Ġ| Ġ Ġ$$\ Ġ$$ Ġ| ĠĠĠĠĠ Ġ$$ Ġ| Ġ Ġ$$ Ġ| Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ\ $$$$ $ ĠĠ Ġ| $$ Ġ| ĠĠĠĠĠ Ġ\ $$$$ $ ĠĠ Ġ| Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ\ ____ __/ Ġ\ __| ĠĠĠĠĠĠ Ġ\ ____ __/ Ċ Ġ* Ċ Ġ*/ Ċ package Ġde . f ra un ho fer . aise c . cp g . passes Ċ Ċ import Ġde . f ra un ho fer . aise c . cp g . TestUtils Ċ import Ġde . f ra un ho fer . aise c . cp g . Translation Manager Ċ import Ġde . f ra un ho fer . aise c . cp g . front ends . java . Java Language Frontend Ċ import Ġde . f ra un ho fer . aise c . cp g . graph . declarations . Function Declaration Ċ import Ġde . f ra un ho fer . aise c . cp g . graph . declarations . Record Declaration Ċ import Ġde . f ra un ho fer . aise c . cp g . graph . declarations . Translation Unit Declaration Ċ import Ġde . f ra un ho fer . aise c . cp g . graph . edge . Properties Ċ import Ġde . f ra un ho fer . aise c . cp g . graph . statements . Compound Statement Ċ import Ġde . f ra un ho fer . aise c . cp g . graph . statements . If Statement Ċ import Ġde . f ra un ho fer . aise c . cp g . graph . statements . While Statement Ċ import Ġjava . nio . file . Path Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertTrue Ċ import Ġorg . junit . jupiter . api . Before All Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . Test Instance Ċ Ċ @ Test Instance ( Test Instance . Lifecycle . PER _ CLASS ) Ċ class ĠUn reachable EO G Pass Test Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtu : ĠTranslation Unit Declaration ĊĊĠĠĠ Ġ@ Before All ĊĠĠĠ Ġfun Ġbefore All () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtop Level Ġ= ĠPath . of (" src ", Ġ" test ", Ġ" resources ", Ġ" passes ", Ġ" unreachable ") ĊĠĠĠĠĠĠĠ ĠTranslation Manager . builder (). build (). analyze () ĊĠĠĠĠĠĠĠ Ġtu Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTestUtils . analyze AndGet First TU ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( top Level . resolve (" Un reach ability . java "). to File ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Level , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . register Language ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Language Frontend :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Language Frontend . JAVA _ EXTENSION S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Pass ( Un reachable EO G Pass ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If Both Possible () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Declarations ByName (" TestClass ", ĠRecord Declaration :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . declarations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull Ġ{ Ġd Ġ-> Ġd . name Ġ== Ġ" if Both Possible " Ġ} Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Declaration ? ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( method ) ĊĊĠĠĠĠĠĠĠ Ġval Ġif Statement Ġ= Ġ( method . body Ġas ĠCompound Statement ). statements [ 2 ] Ġas ? ĠIf Statement ĊĠĠĠĠĠĠĠ ĠassertNotNull ( if Statement ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( edge Ġin Ġif Statement . next EO G Edges ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( edge . getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If True () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Declarations ByName (" TestClass ", ĠRecord Declaration :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . declarations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull Ġ{ Ġd Ġ-> Ġd . name Ġ== Ġ" if True " Ġ} Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Declaration ? ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( method ) ĊĊĠĠĠĠĠĠĠ Ġval Ġif Statement Ġ= Ġ( method . body Ġas ĠCompound Statement ). statements [ 2 ] Ġas ? ĠIf Statement ĊĠĠĠĠĠĠĠ ĠassertNotNull ( if Statement ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( if Statement . next EO G Edges [ 0 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( if Statement . next EO G Edges [ 1 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If False () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Declarations ByName (" TestClass ", ĠRecord Declaration :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . declarations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull Ġ{ Ġd Ġ-> Ġd . name Ġ== Ġ" if False " Ġ} Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Declaration ? ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( method ) ĊĊĠĠĠĠĠĠĠ Ġval Ġif Statement Ġ= Ġ( method . body Ġas ĠCompound Statement ). statements [ 2 ] Ġas ? ĠIf Statement ĊĠĠĠĠĠĠĠ ĠassertNotNull ( if Statement ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( if Statement . next EO G Edges [ 1 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( if Statement . next EO G Edges [ 0 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If True Computed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Declarations ByName (" TestClass ", ĠRecord Declaration :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . declarations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull Ġ{ Ġd Ġ-> Ġd . name Ġ== Ġ" if True Computed " Ġ} Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Declaration ? ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( method ) ĊĊĠĠĠĠĠĠĠ Ġval Ġif Statement Ġ= Ġ( method . body Ġas ĠCompound Statement ). statements [ 2 ] Ġas ? ĠIf Statement ĊĠĠĠĠĠĠĠ ĠassertNotNull ( if Statement ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( if Statement . next EO G Edges [ 0 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( if Statement . next EO G Edges [ 1 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If False Computed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Declarations ByName (" TestClass ", ĠRecord Declaration :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . declarations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull Ġ{ Ġd Ġ-> Ġd . name Ġ== Ġ" if False Computed " Ġ} Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Declaration ? ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( method ) ĊĊĠĠĠĠĠĠĠ Ġval Ġif Statement Ġ= Ġ( method . body Ġas ĠCompound Statement ). statements [ 2 ] Ġas ? ĠIf Statement ĊĠĠĠĠĠĠĠ ĠassertNotNull ( if Statement ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( if Statement . next EO G Edges [ 1 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( if Statement . next EO G Edges [ 0 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest While True End less () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Declarations ByName (" TestClass ", ĠRecord Declaration :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . declarations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull Ġ{ Ġd Ġ-> Ġd . name Ġ== Ġ" while True End less " Ġ} Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Declaration ? ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( method ) ĊĊĠĠĠĠĠĠĠ Ġval Ġwhile Statement Ġ= Ġ( method . body Ġas ĠCompound Statement ). statements [ 1 ] Ġas ? ĠWhile Statement ĊĠĠĠĠĠĠĠ ĠassertNotNull ( while Statement ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( while Statement . next EO G Edges [ 0 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( while Statement . next EO G Edges [ 1 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest While True () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Declarations ByName (" TestClass ", ĠRecord Declaration :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . declarations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull Ġ{ Ġd Ġ-> Ġd . name Ġ== Ġ" while True " Ġ} Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Declaration ? ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( method ) ĊĊĠĠĠĠĠĠĠ Ġval Ġwhile Statement Ġ= Ġ( method . body Ġas ĠCompound Statement ). statements [ 1 ] Ġas ? ĠWhile Statement ĊĠĠĠĠĠĠĠ ĠassertNotNull ( while Statement ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( while Statement . next EO G Edges [ 0 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( while Statement . next EO G Edges [ 1 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest While Computed True () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Declarations ByName (" TestClass ", ĠRecord Declaration :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . declarations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull Ġ{ Ġd Ġ-> Ġd . name Ġ== Ġ" while Computed True " Ġ} Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Declaration ? ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( method ) ĊĊĠĠĠĠĠĠĠ Ġval Ġwhile Statement Ġ= Ġ( method . body Ġas ĠCompound Statement ). statements [ 1 ] Ġas ? ĠWhile Statement ĊĠĠĠĠĠĠĠ ĠassertNotNull ( while Statement ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( while Statement . next EO G Edges [ 0 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( while Statement . next EO G Edges [ 1 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest While False () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Declarations ByName (" TestClass ", ĠRecord Declaration :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . declarations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull Ġ{ Ġd Ġ-> Ġd . name Ġ== Ġ" while False " Ġ} Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Declaration ? ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( method ) ĊĊĠĠĠĠĠĠĠ Ġval Ġwhile Statement Ġ= Ġ( method . body Ġas ĠCompound Statement ). statements [ 0 ] Ġas ? ĠWhile Statement ĊĠĠĠĠĠĠĠ ĠassertNotNull ( while Statement ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( while Statement . next EO G Edges [ 1 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( while Statement . next EO G Edges [ 0 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest While Computed False () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Declarations ByName (" TestClass ", ĠRecord Declaration :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . declarations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull Ġ{ Ġd Ġ-> Ġd . name Ġ== Ġ" while Computed False " Ġ} Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Declaration ? ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( method ) ĊĊĠĠĠĠĠĠĠ Ġval Ġwhile Statement Ġ= Ġ( method . body Ġas ĠCompound Statement ). statements [ 1 ] Ġas ? ĠWhile Statement ĊĠĠĠĠĠĠĠ ĠassertNotNull ( while Statement ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( while Statement . next EO G Edges [ 1 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( while Statement . next EO G Edges [ 0 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest While Unknown () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Declarations ByName (" TestClass ", ĠRecord Declaration :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . declarations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull Ġ{ Ġd Ġ-> Ġd . name Ġ== Ġ" while Unknown " Ġ} Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Declaration ? ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( method ) ĊĊĠĠĠĠĠĠĠ Ġval Ġwhile Statement Ġ= Ġ( method . body Ġas ĠCompound Statement ). statements [ 1 ] Ġas ? ĠWhile Statement ĊĠĠĠĠĠĠĠ ĠassertNotNull ( while Statement ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( while Statement . next EO G Edges [ 1 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( while Statement . next EO G Edges [ 0 ]. getProperty ( Properties . UN RE ACH ABLE ) Ġas ĠBoolean ) ĊĠĠĠ Ġ} Ċ } Ċ