package Ġcom . ome gar . lint . checks . detector . code _ guidelines . kotlin _ rules . exception Ċ Ċ import Ġcom . android . tools . lint . client . api . U Element Handler Ċ import Ġcom . android . tools . lint . detector . api .* Ċ import Ġorg . jetbrains . u ast . UC atch Clause Ċ import Ġorg . jetbrains . u ast . U Element Ċ Ċ @ Suppress (" Un stable Api Usage ") Ċ class ĠException Catch Detector Ġ: ĠDetector (), ĠDetector . U ast Scanner Ġ{ Ċ ĉ comp anion Ġobject Ġ{ Ċĉ ĉ /** ĠIssue Ġdescribing Ġthe Ġproblem Ġand Ġpointing Ġto Ġthe Ġdetector Ġimplementation Ġ*/ Ċĉ ĉ @ Jvm Field Ċĉ ĉ val ĠISS UE : ĠIssue Ġ= ĠIssue . create ( ĊĊĉĉ ĉ id Ġ= Ġ" O ME GA _ NOT _ IGNORE _ EXCEPTION S ", Ċĉĉ ĉ brief Description Ġ= Ġ" Catch Ġbody Ġis Ġempty , Ġit Ġnot Ġmatch Ġthe Ġcoding Ġconvention ", Ċĉĉ ĉ explanation Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCatch Ġbody Ġis Ġempty . ĠAdd Ġexception Ġhandling . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhttp :// wiki . omega - r . club / dev - android - code # rec 2 2 6 4 4 9 8 6 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", Ċĉĉ ĉ category Ġ= ĠCategory . CORRECT NESS , Ċĉĉ ĉ priority Ġ= Ġ 7 , Ċĉĉ ĉ severity Ġ= ĠSeverity . WARNING , Ċĉĉ ĉ implementation Ġ= ĠImplementation ( Ċĉĉĉ ĉ Exception Catch Detector :: class . java , Ċĉĉĉ ĉ Scope . JAVA _ FILE _ SCOPE Ċĉĉ ĉ ) Ċĉ ĉ ) ĊĊĉ ĉ private Ġval ĠEMPTY _ BODY _ REGEX Ġ= ĠRegex (""" \ {\ s *} """) ĊĊĉ ĉ private Ġconst Ġval ĠGENER AL IZED _ EXCEPTION _ VAL Ġ= Ġ" java . lang . Exception " Ċĉ ĉ private Ġconst Ġval ĠTHROW _ VAL Ġ= Ġ" throw " Ċĉ ĉ private Ġconst Ġval ĠGENER AL IZED _ EXCEPTION _ MESSAGE Ġ= Ġ""" Catch Ġgeneral ized Ġexception . Ċĉĉĉ ĠShould Ġthrow Ġspecific Ġexception Ġin Ġcatch Ġbody . ĠĊĉĉ ĉ http :// wiki . omega - r . club / dev - android - code # rec 2 2 6 4 5 4 3 6 4 Ċĉĉ ĉ """ Ċ ĉ } ĊĊ ĉ override Ġfun Ġget Applicable U ast Types (): ĠList < Class < out ĠU Element ? >> Ġ= ĠlistOf ( UC atch Clause :: class . java ) ĊĊ ĉ override Ġfun Ġcreate U ast Handler ( context : ĠJava Context ): ĠU Element Handler Ġ{ Ċĉ ĉ return Ġobject Ġ: ĠU Element Handler () Ġ{ Ċĉĉ ĉ override Ġfun Ġvisit Catch Clause ( node : ĠU Catch Clause ) Ġ{ Ċĉĉĉ ĉ val Ġbody Ġ= Ġnode . body Ċĉĉĉ ĉ val Ġstring Ġ= Ġbody . as Render String () ĊĊĉĉĉ ĉ if Ġ( string . matches ( EMPTY _ BODY _ REGEX )) Ġ{ Ċĉĉĉĉ ĉ context . report ( Ċĉĉĉĉĉ ĉ ISSUE , Ċĉĉĉĉĉ ĉ body , Ċĉĉĉĉĉ ĉ context . getName Location ( body ), Ċĉĉĉĉĉ ĉ ISSUE . get Explanation ( Text Format . TEXT ), Ċĉĉĉĉĉ ĉ create Empty Body Fix () Ċĉĉĉĉ ĉ ) Ċĉĉĉ ĉ } Ċĉĉĉ ĉ val Ġparameters Ġ= Ġnode . parameters Ċĉĉĉ ĉ parameters . forEach Ġ{ Ċĉĉĉĉ ĉ if Ġ( it . type . canonical Text Ġ== ĠGENER AL IZED _ EXCEPTION _ VAL ) Ġ{ Ċĉĉĉĉĉ ĉ if Ġ(! string . contains ( THROW _ VAL )) Ġ{ Ċĉĉĉĉĉĉ ĉ context . report ( Ċĉĉĉĉĉĉĉ ĉ ISSUE , Ċĉĉĉĉĉĉĉ ĉ body , Ċĉĉĉĉĉĉĉ ĉ context . getLocation ( it Ġas ĠU Element ), Ċĉĉĉĉĉĉĉ ĉ GENERAL IZED _ EXCEPTION _ MESSAGE , Ċĉĉĉĉĉĉĉ ĉ create Empty Body Fix () Ċĉĉĉĉĉĉ ĉ ) Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ private Ġfun Ġcreate Empty Body Fix (): ĠL int Fix Ġ{ Ċĉ ĉ return ĠL int Fix . create () Ċĉĉ ĉ . replace () Ċĉĉ ĉ . text (" }") Ċĉĉ ĉ . with (" ĉ throw Ġ// something \ n ĉ ĉ }") Ċĉĉ ĉ . build () Ċ ĉ } Ċ Ċ } Ċ