package Ġdb prefs . lint Ċ Ċ import Ġcom . android . tools . lint . detector . api .* Ċ import Ġcom . intellij . psi . Psi Method Ċ import Ġorg . jetbrains . u ast . U Call Expression Ċ import Ġjava . util .* Ċ Ċ class ĠDB Prefs Usage Detector Ġ: ĠDetector (), ĠDetector . U ast Scanner Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Applicable Method Names (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠArrays . asList (" get SharedPreferences ") Ġ// " edit ", ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Method ( context : ĠJava Context , Ġcall : ĠU Call Expression , Ġmethod : ĠPsi Method ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġcall . methodName ĊĠĠĠĠĠĠĠ Ġval Ġevaluator Ġ= Ġcontext . evaluator ĊĊĠĠĠĠĠĠĠ Ġif Ġ( evaluator . is Member In Class ( method , Ġ" android . content . Context Wrapper ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println (" lint Ġfound Ġ$ method ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfix Ġ= Ġquick Fix Issue Log ( call ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . report ( ISSUE _ SHARED _ PRE FS , Ġcall , Ġcontext . getLocation ( call ), Ġ" Using Ġ' SharedPreferences ' Ġinstead Ġof Ġ' DB Prefs '", Ġfix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println (" lint Ġnot Ġfound Ġ$ method ") ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġif Ġ( evaluator . is Member In Class ( method , Ġ" android . content . SharedPreferences ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ ĠL int Fix Ġfix Ġ= Ġquick Fix Issue Log ( call ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . report ( ISSUE _ SHARED _ PRE FS , Ġcall , Ġcontext . getLocation ( call ), Ġ" Using Ġ' SharedPreferences ' Ġinstead Ġof Ġ' DB Prefs '", Ġfix ); ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ; ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġquick Fix Issue Log ( log Call : ĠU Call Expression ): ĠL int Fix Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfix Source 2 Ġ= Ġ" DB Prefs ()" ĊĊĠĠĠĠĠĠĠ Ġval Ġlog Call Source Ġ= Ġlog Call . as Source String () ĊĠĠĠĠĠĠĠ Ġval Ġfix Group er Ġ= Ġfix (). group () ĊĠĠĠĠĠĠĠ Ġfix Group er . add ( fix (). replace (). text ( log Call Source ). short en Names (). re format ( true ). with ( fix Source 2 ). build ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġfix Group er . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġissues : ĠArray < Issue > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠarrayOf ( ISSUE _ SHARED _ PRE FS ) ĊĊĠĠĠĠĠĠĠ Ġval ĠISS UE _ SHARED _ PRE FS Ġ= ĠIssue . create (" Shared Prefs Usage ", Ġ" SharedPreferences Ġare Ġused , Ġuse ĠDB Prefs Ġinstead ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Since ĠSharedPreferences Ġare Ġused Ġin Ġthe Ġproject , Ġit Ġis Ġlikely Ġthat Ġcalls Ġto ĠPreferences Ġshould Ġinstead Ġbe Ġgoing Ġto ĠDB Prefs .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory . US ABILITY , Ġ 5 , ĠSeverity . WARNING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImplementation ( DB Prefs Usage Detector :: class . java , ĠScope . JAVA _ FILE _ SCOPE )) ĊĠĠĠ Ġ} Ċ } Ċ