/* Ċ Ġ* Ġ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 Ċ Ċ 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 Ġcom . uber . lint checks . android . create Implementation Ċ import Ġorg . jetbrains . u ast . U Call Expression Ċ Ċ /** Ċ Ġ* ĠPrevent Ġusage Ġof ĠSystem . currentTimeMillis . Ċ Ġ*/ Ċ class ĠSystem Current Time Millis Detector Ġ: ĠDetector (), ĠSource Code Scanner Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠISS UE _ ID Ġ= Ġ" System Current Time Millis " ĊĠĠĠ Ġprivate Ġconst Ġval ĠBR IE F _ DESCRIPTION Ġ= Ġ" Don 't Ġuse ĠSystem . currentTimeMillis " ĊĠĠĠ Ġconst Ġval ĠL INT _ ERROR _ MESSAGE Ġ= Ġ""" Don 't Ġuse ĠSystem . currentTimeMillis . ĊĠĠĠĠĠ ĠPlease Ġprefer Ġan Ġabstraction Ġlike ĠClock , Ġas Ġthis Ġis Ġeasily Ġmocked , Ġinjected , Ġand Ġtested .""" ĊĠĠĠ Ġval ĠISS UE Ġ= ĠIssue . create ( ĊĠĠĠĠĠĠĠ Ġid Ġ= ĠISS UE _ ID , ĊĠĠĠĠĠĠĠ Ġbrief Description Ġ= ĠBR IE F _ DESCRIPTION , ĊĠĠĠĠĠĠĠ Ġexplanation Ġ= ĠL INT _ ERROR _ MESSAGE , ĊĠĠĠĠĠĠĠ Ġcategory Ġ= ĠCategory . CORRECT NESS , ĊĠĠĠĠĠĠĠ Ġpriority Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠ Ġseverity Ġ= ĠSeverity . ERROR , ĊĠĠĠĠĠĠĠ Ġimplementation Ġ= Ġcreate Implementation < System Current Time Millis Detector >()) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvisit MethodCall ( context : ĠJava Context , Ġnode : ĠU Call Expression , Ġmethod : ĠPsi Method ) Ġ{ ĊĠĠĠ Ġif Ġ(! get Applicable Method Names (). contains ( node . methodName )) Ġreturn ĊĊĠĠĠ Ġval Ġevaluator Ġ= Ġcontext . evaluator ĊĠĠĠ Ġif Ġ( node . methodName Ġ== Ġ" currentTimeMillis " Ġ&& Ġis System Type ( evaluator , Ġnode )) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . report ( ISSUE , Ġcontext . getLocation ( node ), ĠL INT _ ERROR _ MESSAGE ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġis System Type ( evaluator : ĠJava Evaluator , Ġnode : ĠU Call Expression ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġevaluator . is Member In Class ( node . resolve (), Ġ" java . lang . System ") ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Applicable Method Names (): ĠList < String > Ġ= ĠlistOf (" currentTimeMillis ") Ċ } Ċ