package Ġj at yc . core . cfg Ċ Ċ import Ġorg . checker framework . org . pl ume lib . util . Weak Identity HashMap Ċ import Ġjava . util .* Ċ Ċ // ĠAdapt ed Ġfrom Ġorg . checker framework . data flow . analysis . Analysis . Work list Ċ Ċ class ĠWork list Ġ{ ĊĠ Ġprivate Ġval Ġdepth First Order : ĠIdentity HashMap < Simple Node , ĠInt > Ġ= ĠIdentity HashMap () ĊĊĠ Ġinner Ġclass ĠD FO Comparator Ġ: ĠComparator < Simple Node > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcompare ( b 1 : ĠSimple Node , Ġb 2 : ĠSimple Node ): ĠInt Ġ{ ĊĠĠĠĠĠ Ġreturn Ġdepth First Order [ b 1 ] !! Ġ- Ġdepth First Order [ b 2 ] !! ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġqueue : ĠTree Set < Simple Node > Ġ= ĠTree Set ( D FO Comparator ()) ĊĊĠ Ġprivate Ġval Ġorder Cache Ġ= ĠWeak Identity HashMap < Simple CFG , ĠList < Simple Node >>() ĊĠ Ġprivate Ġfun Ġorder ( cfg : ĠSimple CFG ): ĠList < Simple Node > Ġ{ ĊĠĠĠ Ġreturn Ġorder Cache . compute If Absent ( cfg ) Ġ{ Ġget Depth First Ordered Nodes ( it ) Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġprocess ( cfg : ĠSimple CFG ) Ġ{ ĊĠĠĠ Ġdepth First Order . clear () ĊĠĠĠ Ġqueue . clear () ĊĊĠĠĠ Ġvar Ġcount Ġ= Ġ 1 ĊĠĠĠ Ġfor Ġ( node Ġin Ġorder ( cfg )) Ġ{ ĊĠĠĠĠĠ Ġdepth First Order [ node ] Ġ= Ġcount ++ ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġadd ( node : ĠSimple Node ) Ġ{ ĊĠĠĠ Ġqueue . add ( node ) ĊĠ Ġ} ĊĊĠ Ġfun Ġpoll (): ĠSimple Node ? Ġ= Ġqueue . poll First () ĊĊĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" Work list ($ queue )" Ċ } Ċ