package Ġdev . nam hy un . java . analyzer Ċ Ċ import Ġdev . nam hy un . java . analyzer . model . Exception Frame Ċ import Ġdev . nam hy un . java . analyzer . model . Frame Ċ import Ġdev . nam hy un . java . analyzer . model . Step Frame Ċ import Ġjava . io . PrintWriter Ċ Ċ abstract Ġclass ĠResult Writer ( protected Ġval Ġwriter : ĠPrintWriter ) Ġ{ ĊĊĠĠĠ Ġabstract Ġfun Ġwrite ( output : ĠString , Ġframes : ĠList < Frame >, Ġreferences Count : ĠMap < Int , ĠInt >) Ċ } Ċ Ċ class ĠDefault Writer ( writer : ĠPrintWriter ) Ġ: ĠResult Writer ( writer ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġwrite ( ĊĠĠĠĠĠĠĠ Ġoutput : ĠString , ĊĠĠĠĠĠĠĠ Ġframes : ĠList < Frame >, ĊĠĠĠĠĠĠĠ Ġreferences Count : ĠMap < Int , ĠInt > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter . println (" === ĠOutput Ġ=== \ n ") ĊĠĠĠĠĠĠĠ Ġwriter . println ( output ) ĊĊĠĠĠĠĠĠĠ Ġwriter . println (" === ĠAn alyze Ġframes Ġ( size : Ġ${ frames . size }) Ġ=== \ n ") ĊĠĠĠĠĠĠĠ Ġframes . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . println ("${ it . methodName }:${ it . line }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠStep Frame ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . variables . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . println ("\ t $ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it Ġis ĠException Frame ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . println ("\ t ${ it . exception Name }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . println ("\ t $ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . println () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwriter . println ("\ n === ĠReferences Ġper Ġline Ġ=== \ n ") ĊĠĠĠĠĠĠĠ Ġreferences Count . forEach Ġ{ Ġ( line , Ġreference Count ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . println ("\ t $ line : Ġ$ reference Count ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwriter . flush () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠJson Writer ( writer : ĠPrintWriter ) Ġ: ĠResult Writer ( writer ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġwrite ( ĊĠĠĠĠĠĠĠ Ġoutput : ĠString , ĊĠĠĠĠĠĠĠ Ġframes : ĠList < Frame >, ĊĠĠĠĠĠĠĠ Ġreferences Count : ĠMap < Int , ĠInt > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Map Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" output " Ġto Ġoutput , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" frames " Ġto Ġframes , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" references Count " Ġto Ġreferences Count ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠGson Adapter Builder (). build (). toJson ( json Map ) ĊĠĠĠĠĠĠĠ Ġwriter . write ( json ) ĊĠĠĠĠĠĠĠ Ġwriter . flush () ĊĠĠĠ Ġ} Ċ }