// ĠCopyright Ġ 2 0 0 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġcom . intellij . debugger . memory . agent . parsers Ċ Ċ import Ġcom . intellij . debugger . memory . agent . Unexpected Value FormatException Ċ import Ġcom . sun . j di .* Ċ import Ġjava . util .* Ċ Ċ object ĠBoolean Parser Ġ: ĠResult Parser < Boolean > Ġ{ ĊĠ Ġoverride Ġfun Ġparse ( value : ĠValue ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġ( value Ġas ? ĠBoolean Value )?. value () Ġ?: Ġfalse ĊĠ Ġ} Ċ } Ċ Ċ object ĠLong Value Parser Ġ: ĠResult Parser < Long > Ġ{ ĊĠ Ġoverride Ġfun Ġparse ( value : ĠValue ): ĠLong Ġ{ ĊĠĠĠ Ġif Ġ( value Ġis ĠPrimitive Value ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġvalue . longValue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġthrow ĠUnexpected Value FormatException (" Primitive Ġvalue Ġis Ġexpected ") ĊĠ Ġ} Ċ } Ċ Ċ object ĠObject References Parser Ġ: ĠResult Parser < List < Object Reference >> Ġ{ ĊĠ Ġoverride Ġfun Ġparse ( value : ĠValue ): ĠList < Object Reference > Ġ{ ĊĠĠĠ Ġif Ġ( value Ġis ĠArray Reference ) Ġ{ ĊĠĠĠĠĠ Ġval Ġresult Ġ= ĠArrayList < Object Reference >() ĊĠĠĠĠĠ Ġfor Ġ( item Ġin Ġvalue . values ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item Ġ! is ĠObject Reference ) Ġbreak ĊĠĠĠĠĠĠĠ Ġresult . add ( item ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ( result . size Ġ!= Ġvalue . length ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUnexpected Value FormatException ( ĊĠĠĠĠĠĠĠĠĠ Ġ" All Ġvalues Ġshould Ġbe Ġobject Ġreferences Ġbut Ġsome Ġof Ġthem Ġare Ġnot ") ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġthrow ĠUnexpected Value FormatException (" Array Ġwith Ġobject Ġreferences Ġexpected ") ĊĠ Ġ} Ċ } Ċ Ċ object ĠBack ward References Parser Ġ: ĠResult Parser < List < List < Int >>> Ġ{ ĊĠ Ġoverride Ġfun Ġparse ( value : ĠValue ): ĠList < List < Int >> Ġ{ ĊĠĠĠ Ġif Ġ( value Ġ! is ĠArray Reference ) Ġthrow ĠUnexpected Value FormatException (" Array Ġwith Ġnested Ġarrays Ġexpected ") ĊĊĠĠĠ Ġval Ġresult Ġ= ĠArrayList < List < Int >>() ĊĠĠĠ Ġfor Ġ( links Info Ġin Ġvalue . values ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( links Info Ġ! is ĠArray Reference ) Ġthrow ĠUnexpected Value FormatException (" Object Ġreferences Ġinformation Ġshould Ġbe Ġrepresented Ġby Ġarray ") ĊĠĠĠĠĠ Ġval Ġindices Ġ= ĠInt Array Parser . parse ( links Info . getValue ( 0 )) ĊĠĠĠĠĠĠĠ Ġ. distinct () Ġ// Ġdrop Ġduplicates ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ!= Ġ- 1 Ġ} Ġ// Ġdrop Ġgc Ġroots ĊĠĠĠĠĠ Ġ// ĠTODO : Ġparse Ġkinds Ġand Ġinfos Ġas Ġwell ĊĊĠĠĠĠĠ Ġresult . add ( indices ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} Ċ } Ċ Ċ object ĠInt Array Parser Ġ: ĠResult Parser < List < Int >> Ġ{ ĊĠ Ġoverride Ġfun Ġparse ( value : ĠValue ): ĠList < Int > Ġ{ ĊĠĠĠ Ġif Ġ( value Ġ! is ĠArray Reference ) Ġthrow ĠUnexpected Value FormatException (" Array Ġexpected ") ĊĠĠĠ Ġval Ġitems Ġ= Ġvalue . values ĊĠĠĠ Ġif Ġ( items . isEmpty ()) Ġreturn Ġempty List () ĊĠĠĠ Ġif Ġ( items [ 0 ] Ġ! is ĠInteger Value ) Ġthrow ĠUnexpected Value FormatException (" array Ġelements Ġshould Ġbe Ġintegers ") ĊĠĠĠ Ġreturn Ġitems . map Ġ{ Ġit Ġas ĠInteger Value Ġ}. map ( Integer Value :: value ) ĊĠ Ġ} Ċ } Ċ Ċ object ĠLong Array Parser Ġ: ĠResult Parser < List < Long >> Ġ{ ĊĠ Ġoverride Ġfun Ġparse ( value : ĠValue ): ĠList < Long > Ġ{ ĊĠĠĠ Ġif Ġ( value Ġ! is ĠArray Reference ) Ġthrow ĠUnexpected Value FormatException (" Array Ġexpected ") ĊĠĠĠ Ġreturn Ġvalue . values . map ( Long Value Parser :: parse ) ĊĠ Ġ} Ċ }