//////////////////////////////////////////////////////////////////////////// / Ċ // Ċ // ĠProject ĠProject Forge ĠCommunity ĠEdition Ċ // ĠĠĠĠĠĠĠĠ Ġwww . project forge . org Ċ // Ċ // ĠCopyright Ġ( C ) Ġ 2 0 0 1 - 2 0 2 1 ĠM ic rom ata ĠGmbH , ĠGermany Ġ( www . mic rom ata . com ) Ċ // Ċ // ĠProject Forge Ġis Ġdual - license d . Ċ // Ċ // ĠThis Ġcommunity Ġedition Ġis Ġfree Ġsoftware ; Ġyou Ġcan Ġredistribute Ġit Ġand / or Ċ // Ġmodify Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ċ // Ġby Ġthe ĠFree ĠSoftware ĠFoundation ; Ġversion Ġ 3 Ġof Ġthe ĠLicense . Ċ // Ċ // ĠThis Ġcommunity Ġedition Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ċ // Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof Ċ // ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . ĠSee Ġthe ĠGNU ĠGeneral Ċ // ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ // Ċ // ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġalong Ċ // Ġwith Ġthis Ġprogram ; Ġif Ġnot , Ġsee Ġhttp :// www . gnu . org / licenses /. Ċ // Ċ //////////////////////////////////////////////////////////////////////////// / Ċ Ċ package Ġde . mic rom ata . b org but ler . server . rest Ċ Ċ /** Ċ Ġ* ĠPrints Ġstack - trace Ġwithout Ġforeign Ġpackages Ġin Ġmuch Ġshorter Ġform Ġthan Ġlog . error ( ex . message , Ġex ) Ġdoes . Ċ Ġ* Ġ@ author ĠK ai ĠRe in hard Ġ( k . re in hard @ mic rom ata . de ) Ċ Ġ*/ Ċ object ĠException StackTrace Printer Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġshow Exception Message ĠIf Ġtrue , Ġthe Ġexception Ġmessage Ġitself Ġwill Ġbe Ġpre pended Ġto Ġstack Ġtrace . ĊĠĠĠĠ Ġ* Ġ@ param Ġstop Before Foreign Packages ĠIf Ġtrue , Ġafter Ġshowing Ġstack Ġtrace Ġelements Ġof Ġown Ġpackage Ġ' org . project forge ' Ġany Ġfurther Ġelement Ġis Ġhidden Ġif Ġforeign Ġstack Ġelement Ġis Ġreached . ĊĠĠĠĠ Ġ* Ġ@ param Ġdepth ĠMaximum Ġdepth Ġof Ġstack Ġtrace Ġelements Ġto Ġshow Ġ( default Ġis Ġ 1 0 ). ĊĠĠĠĠ Ġ* Ġ@ param Ġshow Packages Only ĠOnly Ġstack Ġelements Ġstarted Ġwith Ġone Ġof Ġthese Ġstring Ġis Ġclass ified Ġas Ġown Ġpackage Ġto Ġprint . ĠIf Ġnothing Ġgiven , Ġall Ġ' org . project forge ' Ġclasses Ġare ĊĠĠĠĠ Ġ* Ġclass ified Ġas Ġown Ġpackages . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun ĠtoString ( ex : ĠException , Ġshow Exception Message : ĠBoolean Ġ= Ġtrue , Ġstop Before Foreign Packages : ĠBoolean Ġ= Ġtrue , Ġdepth : ĠInt Ġ= Ġ 1 0 , Ġvar arg Ġshow Packages Only : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġif Ġ( show Exception Message ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( ex :: class . java . name ). append (": "). append ( ex . message ). append ("\ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġcounter Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġshow Packages Ġ= Ġif Ġ( show Packages Only . isEmpty ()) ĠO WN _ PACK AGES Ġelse Ġshow Packages Only ĊĠĠĠĠĠĠĠ Ġvar Ġplace Holder Print ed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġown Stack elements Print ed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġex . stack Trace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! show Packages . any Ġ{ Ġelement . className . startsWith ( it ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( own Stack elements Print ed Ġ&& Ġstop Before Foreign Packages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" ... following Ġforeign Ġpackages Ġare Ġhidden ...\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! place Holder Print ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" ... ( foreign Ġpackages Ġare Ġhidden ) ...\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace Holder Print ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue Ġ// ĠDon 't Ġshow Ġforeign Ġclass Ġentries . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġown Stack elements Print ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" at Ġ${ element . className }.${ element . methodName } Ġ(${ element . fileName }:${ element . line Number })\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(++ counter Ġ>= Ġdepth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠO WN _ PACK AGES Ġ= ĠarrayOf (" de . mic rom ata . b org but ler ") Ċ } Ċ