package Ġio . gitlab . art urb os ch . de te kt . rules . exceptions Ċ Ċ import Ġio . gitlab . art urb os ch . de te kt . api . Code S mell Ċ import Ġio . gitlab . art urb os ch . de te kt . api . Config Ċ import Ġio . gitlab . art urb os ch . de te kt . api . De bt Ċ import Ġio . gitlab . art urb os ch . de te kt . api . Entity Ċ import Ġio . gitlab . art urb os ch . de te kt . api . Issue Ċ import Ġio . gitlab . art urb os ch . de te kt . api . Rule Ċ import Ġio . gitlab . art urb os ch . de te kt . api . Severity Ċ import Ġorg . jetbrains . kotlin . psi . Kt Call Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Catch Clause Ċ import Ġorg . jetbrains . kotlin . psi . Kt Name Reference Expression Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . forEach Desc endant OfType Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Call Name Expression Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Receiver Expression Ċ Ċ /** Ċ Ġ* ĠThis Ġrule Ġreports Ġcode Ġthat Ġtries Ġto Ġprint Ġthe Ġstack trace Ġof Ġan Ġexception . ĠInstead Ġof Ġsimply Ġprinting Ġa Ġstack trace Ċ Ġ* Ġa Ġbetter Ġlogging Ġsolution Ġshould Ġbe Ġused . Ċ Ġ* Ċ Ġ* Ġ< non comp liant > Ċ Ġ* Ġfun Ġfoo () Ġ{ Ċ Ġ* ĠĠĠĠ ĠThread . dump Stack () Ċ Ġ* Ġ} Ċ Ġ* Ċ Ġ* Ġfun Ġbar () Ġ{ Ċ Ġ* ĠĠĠĠ Ġtry Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ// Ġ... Ċ Ġ* ĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġe . printStackTrace () Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ġ</ non comp liant > Ċ Ġ* Ċ Ġ* Ġ< comp liant > Ċ Ġ* Ġval ĠLOGGER Ġ= ĠLogger . getLogger () Ċ Ġ* Ċ Ġ* Ġfun Ġbar () Ġ{ Ċ Ġ* ĠĠĠĠ Ġtry Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ// Ġ... Ċ Ġ* ĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ ĠLOGGER . info ( e ) Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ġ</ comp liant > Ċ Ġ* Ċ Ġ* Ġ@ active Ġsince Ġv 1 . 1 6 . 0 Ċ Ġ*/ Ċ class ĠPrint StackTrace ( config : ĠConfig Ġ= ĠConfig . empty ) Ġ: ĠRule ( config ) Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġissue Ġ= ĠIssue (" Print StackTrace ", ĠSeverity . Code S mell , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Do Ġnot Ġprint Ġan Ġstack Ġtrace . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" These Ġdebug Ġstatements Ġshould Ġbe Ġreplaced Ġwith Ġa Ġlogger Ġor Ġremoved .", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDeb t . TW ENT Y _ MIN S ) ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Call Expression ( expression : ĠK t Call Expression ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcall Name Expression Ġ= Ġexpression . get Call Name Expression () ĊĠĠĠĠĠĠĠ Ġif Ġ( call Name Expression ?. text Ġ== Ġ" dump Stack " Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Name Expression . get Receiver Expression ()?. text Ġ== Ġ" Thread ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( Code S mell ( issue , ĠEntity . from ( expression ), Ġissue . description )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Catch Section ( catch Clause : ĠK t Catch Clause ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcatch Clause . catch Body ?. forEach Desc endant OfType < Kt Name Reference Expression > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . text Ġ== Ġcatch Clause . catch Parameter ?. name Ġ&& Ġhas Print Stack trace Call Expression ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( Code S mell ( issue , ĠEntity . from ( it ), Ġissue . description )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Print Stack trace Call Expression ( expression : ĠK t Name Reference Expression ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Call Ġ= Ġexpression . next Sibling ?. next Sibling ĊĠĠĠĠĠĠĠ Ġreturn Ġmethod Call Ġis ĠK t Call Expression Ġ&& Ġmethod Call . text . startsWith (" printStackTrace (" ) ĊĠĠĠ Ġ} Ċ } Ċ