/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 . ĠU ber ĠTechnologies Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . uber . lint checks . android Ċ Ċ import Ġcom . android . tools . lint . client . api . Java Evaluator Ċ import Ġcom . android . tools . lint . detector . api . Category Ċ import Ġcom . android . tools . lint . detector . api . Detector Ċ import Ġcom . android . tools . lint . detector . api . Issue Ċ import Ġcom . android . tools . lint . detector . api . Java Context Ċ import Ġcom . android . tools . lint . detector . api . Severity Ċ import Ġcom . android . tools . lint . detector . api . Source Code Scanner Ċ import Ġcom . intellij . psi . Psi Method Ċ import Ġorg . jetbrains . u ast . U Call Expression Ċ Ċ /** Ċ Ġ* ĠDetector Ġto Ġcheck Ġfor Ġusage s Ġof Ġ` Resources Compat . get Drawable ` Ġor Ġ` Context Compat . get Drawable `. Ċ Ġ*/ Ċ class ĠGet Drawable Detector Ġ: ĠDetector (), ĠSource Code Scanner Ġ{ ĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠISS UE _ ID Ġ= Ġ" Get Drawable " ĊĠĠĠ Ġconst Ġval ĠL INT _ ERROR _ MESSAGE Ġ= Ġ" Don 't Ġuse ĠContext Compat # get Drawable ( Context , int ), Ġinstead Ġuse Ġ" Ġ+ ĊĠĠĠĠĠĠĠ Ġ" AppCompat Resources # get Drawable ( Context , Ġint ) Ġsince Ġit Ġunderstand s Ġhow Ġto Ġprocess Ġvector Ġdraw ables ." ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval ĠISS UE Ġ= ĠIssue . create ( ĊĠĠĠĠĠĠĠ Ġid Ġ= ĠISS UE _ ID , ĊĠĠĠĠĠĠĠ Ġbrief Description Ġ= Ġ" Use ĠAppCompat Resources # get Drawable ( Context , Ġint )", ĊĠĠĠĠĠĠĠ Ġexplanation Ġ= ĠL INT _ ERROR _ MESSAGE , ĊĠĠĠĠĠĠĠ Ġcategory Ġ= ĠCategory . CORRECT NESS , ĊĠĠĠĠĠĠĠ Ġpriority Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠ Ġseverity Ġ= ĠSeverity . ERROR , ĊĠĠĠĠĠĠĠ Ġimplementation Ġ= Ġcreate Implementation < Get Drawable Detector >()) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvisit MethodCall ( ĊĠĠĠ Ġcontext : ĠJava Context , ĊĠĠĠ Ġnode : ĠU Call Expression , ĊĠĠĠ Ġmethod : ĠPsi Method ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġif Ġ(! get Applicable Method Names (). contains ( node . methodName )) Ġreturn ĊĊĠĠĠ Ġif Ġ( node . methodName Ġ== Ġ" get Drawable " Ġ&& Ġis Black listed ( context . evaluator , Ġnode )) Ġ{ ĊĠĠĠĠĠ Ġcontext . report ( ISSUE , Ġcontext . getLocation ( node ), ĠL INT _ ERROR _ MESSAGE ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġis Black listed ( evaluator : ĠJava Evaluator , Ġnode : ĠU Call Expression ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġevaluator . is Member In Class ( node . resolve (), Ġ" android x . core . content . Context Compat ") Ġ|| ĊĠĠĠĠĠĠĠ Ġevaluator . is Member In Class ( node . resolve (), Ġ" android x . core . content . res . Resources Compat ") ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Applicable Method Names (): ĠList < String > Ġ= ĠlistOf (" get Drawable ") Ċ } Ċ