/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠMar cin ĠBu k ow ie ck i . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġcom . bu k ow ie ck i . w ee vil . evaluator Ċ Ċ import Ġcom . intellij . debugger . engine . Suspend Context Impl Ċ import Ġcom . intellij . debugger . engine . evaluation . Evaluate Exception Ċ import Ġcom . intellij . debugger . engine . evaluation . Evaluation Context Impl Ċ import Ġcom . intellij . debugger . engine . evaluation . expression . Evaluator Ċ import Ġcom . intellij . debugger . engine . evaluation . expression . Identity Evaluator Ċ import Ġcom . intellij . debugger . engine . evaluation . expression . Method Evaluator Ċ import Ġcom . sun . j di . Boolean Value Ċ import Ġcom . sun . j di . Object Reference Ċ import Ġcom . sun . j di . Value Ċ Ċ /** Ċ Ġ* Ġ@ author ĠMar cin ĠBu k ow ie ck i Ċ Ġ*/ Ċ class ĠMap Evaluator ( private Ġval Ġref : ĠObject Reference ) Ġ: ĠEvalu ator Ġ{ ĊĊĠĠĠ Ġfun Ġevaluate ( sus pension Context : ĠS uspend Context Impl ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeval Context Ġ= ĠEvaluation Context Impl ( sus pension Context , Ġsus pension Context . frame Proxy , Ġref ) ĊĠĠĠĠĠĠĠ Ġreturn Ġevaluate ( eval Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġevaluate ( context : ĠEvaluation Context Impl ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġidentity Evaluator Ġ= ĠIdentity Evaluator ( ref ) ĊĠĠĠĠĠĠĠ Ġvar Ġme Ġ= ĠMethod Evaluator ( identity Evaluator , Ġnull , Ġ" isEmpty ", Ġnull , ĠarrayOf Null s ( 0 )) ĊĊĠĠĠĠĠĠĠ Ġval Ġeval Result Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġme . evaluate ( context ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠEvaluate Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEval Error (" Exception Ġwhile Ġevaluating ĠMap ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( eval Result Ġis ĠBoolean Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġboolean Value Ġ= Ġeval Result . value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( boolean Value ) Ġreturn Ġempty Map < String , ĠAny ?> () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġme Ġ= ĠMethod Evaluator ( identity Evaluator , Ġnull , Ġ" keySet ", Ġnull , ĠarrayOf Null s ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Set Result Ġ= Ġme . evaluate ( context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Set Result Evaluator Ġ= ĠIdentity Evaluator ( keySet Result Ġas ĠObject Reference ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġme Ġ= ĠMethod Evaluator ( keySet Result Evaluator , Ġnull , Ġ" iterator ", Ġnull , ĠarrayOf Null s ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiterator Reference Ġ= Ġme . evaluate ( context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiterator Reference Evaluator Ġ= ĠIdentity Evaluator ( iterator Reference Ġas ĠObject Reference ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġme Ġ= ĠMethod Evaluator ( iterator Reference Evaluator , Ġnull , Ġ" hasNext ", Ġnull , ĠarrayOf Null s ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhas Next Ġ= Ġme . evaluate ( context ) Ġas ĠBoolean Value ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable Map Of < Value , ĠValue >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( hasNext . value ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġme Ġ= ĠMethod Evaluator ( iterator Reference Evaluator , Ġnull , Ġ" next ", Ġnull , ĠarrayOf Null s ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Reference Ġ= Ġme . evaluate ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġnext Reference Ġas ĠObject Reference ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġme Ġ= ĠMethod Evaluator ( Identity Evaluator ( ref ), Ġnull , Ġ" get ", Ġnull , ĠarrayOf ( Identity Evaluator ( key ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ref Ġ= Ġme . evaluate ( context ) Ġas ĠValue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ key ] Ġ= Ġvalue Ref ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġme Ġ= ĠMethod Evaluator ( iterator Reference Evaluator , Ġnull , Ġ" hasNext ", Ġnull , ĠarrayOf Null s ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Next Ġ= Ġme . evaluate ( context ) Ġas ĠBoolean Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEval Error (" Exception Ġwhile Ġevaluating ĠMap . ĠExpected Ġboolean Ġfor ĠisEmpty Ġmethod ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }