package Ġes . j tp . k term . logger Ċ Ċ import Ġes . j tp . k term .* Ċ import Ġes . j tp . k term . utils .* Ċ Ċ /** Ċ Ġ* ĠA Ġstack Ġmessage Ġfor Ġlogs . Ċ Ġ*/ Ċ class ĠStack Trace Logger Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġclass Ġname Ġwhere Ġthe Ġstack Ġtrace Ġis Ġproduced . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar ĠclassName : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ?. stringify () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġmethod Ġname Ġwhere Ġthe Ġstack Ġtrace Ġis Ġproduced . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar ĠmethodName : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ?. stringify () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġmessage Ġto Ġshow . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġmessage : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ?. stringify () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġfile Ġname Ġwhere Ġthe Ġstack Ġtrace Ġis Ġproduced . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġlocation FilePath : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġline Ġof Ġthe Ġfile Ġwhere Ġthe Ġstack Ġtrace Ġis Ġproduced . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġlocation Line : ĠInt ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġcolumn Ġof Ġthe Ġfile Ġwhere Ġthe Ġstack Ġtrace Ġis Ġproduced . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġlocation Column : ĠInt ? ĊĊĠĠĠ Ġ// ĠCON STRUCT ORS Ġ------------------------------------------------ ----------- ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ StackTrace Logger ] Ġwith Ġa Ġfile Ġpath Ġto Ġthe Ġlog Ġstack . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( filePath : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . location FilePath Ġ= ĠfilePath . stringify () ĊĠĠĠĠĠĠĠ Ġlocation Line Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġlocation Column Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ StackTrace Logger ] Ġwith Ġa Ġfile Ġpath Ġand Ġthe Ġline Ġof Ġthe Ġexecuted Ġcode Ġto Ġthe Ġlog Ġstack . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( filePath : ĠString , Ġline : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( line Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠK Term Exception (" The Ġ' line ' Ġparameter Ġcan 't Ġbe Ġlower Ġthan Ġ 1 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . location FilePath Ġ= ĠfilePath . stringify () ĊĠĠĠĠĠĠĠ Ġthis . location Line Ġ= Ġline ĊĠĠĠĠĠĠĠ Ġlocation Column Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ StackTrace Logger ] Ġwith Ġa Ġfile Ġpath Ġand Ġthe Ġline Ġand Ġcolumn Ġof Ġthe Ġexecuted Ġcode Ġto Ġthe Ġlog Ġstack . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( filePath : ĠString , Ġline : ĠInt , Ġcolumn : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( line Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠK Term Exception (" The Ġ' line ' Ġparameter Ġcan 't Ġbe Ġlower Ġthan Ġ 1 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( column Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠK Term Exception (" The Ġ' column ' Ġparameter Ġcan 't Ġbe Ġlower Ġthan Ġ 1 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . location FilePath Ġ= ĠfilePath . stringify () ĊĠĠĠĠĠĠĠ Ġthis . location Line Ġ= Ġline ĊĠĠĠĠĠĠĠ Ġthis . location Column Ġ= Ġcolumn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠMETHO DS Ġ---------------------------------------------------------------- ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġstack Ġtrace Ġas Ġa Ġstring Ġformatted Ġto Ġbe Ġwritten Ġinto Ġan ĠANSI Ġinterpreter . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠThe Ġrelative Ġposition Ġof Ġthe Ġstack Ġtrace . ĊĠĠĠĠ Ġ* Ġ@ param Ġmax Position Digits ĠThe Ġnumber Ġof Ġdigits Ġof Ġthe Ġindex Ġof Ġthe Ġlast Ġstack Ġtrace . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġto Unix String ( level : ĠLogLevel , Ġshow Stack Numbers : ĠBoolean , Ġposition : ĠInt , Ġmax Position Digits : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġvar Ġinner Indent Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġsb . append ( level . color . bold And Color Text ("| ")) ĊĠĠĠĠĠĠĠ Ġsb . append (' Ġ') ĊĊĠĠĠĠĠĠĠ Ġif Ġ( show Stack Numbers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Indent Ġ+= Ġmax Position Digits Ġ+ Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( Ansi Color . bold Text (" [" )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( level . color . bold And Color Text ( position . toString (). pad Start ( max Position Digits , Ġ' Ġ' ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( Ansi Color . bold Text (" ] ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (' Ġ') ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( className Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Indent Ġ+= ĠclassName !!. length Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( className ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ('.') ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( methodName Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Indent Ġ+= ĠmethodName !!. length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( level . color . color Text ( methodName !! )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinner Indent Ġ+= Ġlocation FilePath . length Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠ Ġsb . append (' (' ) ĊĠĠĠĠĠĠĠ Ġsb . append ( location FilePath ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( location Line Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġ": $ location Line " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Indent Ġ+= Ġtext . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( location Column Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ": $ location Column " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinner Indent Ġ+= Ġtext . length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsb . append (' )') ĊĊĠĠĠĠĠĠĠ Ġif Ġ( message Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( Indent . indent Text ( message !! , Ġ"${ level . color . bold And Color Text ("| ") }${ " Ġ". repeat ( inner Indent Ġ- Ġ 1 )} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAn si Color . Companion :: bold Text )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsb . append ('\ n ') ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġstack Ġtrace Ġas Ġa Ġstring . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠThe Ġrelative Ġposition Ġof Ġthe Ġstack Ġtrace . ĊĠĠĠĠ Ġ* Ġ@ param Ġmax Position Digits ĠThe Ġnumber Ġof Ġdigits Ġof Ġthe Ġindex Ġof Ġthe Ġlast Ġstack Ġtrace . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠtoString ( show Stack Numbers : ĠBoolean , Ġposition : ĠInt , Ġmax Position Digits : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġvar Ġinner Indent Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġsb . append ("| Ġ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( show Stack Numbers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Indent Ġ+= Ġmax Position Digits Ġ+ Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ('[ ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( position . toString (). pad Start ( max Position Digits , Ġ' Ġ')) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" ] Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( className Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Indent Ġ+= ĠclassName !!. length Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( className ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ('.') ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( methodName Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Indent Ġ+= ĠmethodName !!. length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( methodName !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinner Indent Ġ+= Ġlocation FilePath . length Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠ Ġsb . append (' (' ) ĊĠĠĠĠĠĠĠ Ġsb . append ( location FilePath ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( location Line Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġ": $ location Line " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Indent Ġ+= Ġtext . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( location Column Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ": $ location Column " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinner Indent Ġ+= Ġtext . length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsb . append (' )') ĊĊĠĠĠĠĠĠĠ Ġif Ġ( message Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( Indent . indent Text ( message !! , Ġ"| ${ " Ġ". repeat ( inner Indent Ġ- Ġ 1 )} ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsb . append ('\ n ') ĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" StackTrace Logger ( className =$ className , ĠmethodName =$ methodName , Ġmessage =$ message , Ġlocation FilePath =$ location FilePath , Ġlocation Line =$ location Line , Ġlocation Column =$ location Column )" ĊĠĠĠ Ġ} Ċ } Ċ