/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" Un stable Api Usage ") Ċ Ċ package Ġandroidx . compose . runtime . lint Ċ Ċ import Ġandroidx . compose . lint . Names Ċ import Ġcom . android . tools . lint . client . api . U Element Handler Ċ import Ġcom . android . tools . lint . detector . api . Category Ċ import Ġcom . android . tools . lint . detector . api . Detector Ċ import Ġcom . android . tools . lint . detector . api . Implementation Ċ import Ġcom . android . tools . lint . detector . api . Issue Ċ import Ġcom . android . tools . lint . detector . api . Java Context Ċ import Ġcom . android . tools . lint . detector . api . Scope Ċ import Ġcom . android . tools . lint . detector . api . Severity Ċ import Ġcom . android . tools . lint . detector . api . Source Code Scanner Ċ import Ġcom . intellij . psi . util . Inheritance Util Ċ import Ġorg . jetbrains . kotlin . psi . Kt Parameter Ċ import Ġorg . jetbrains . kotlin . psi . Kt Property Ċ import Ġorg . jetbrains . u ast . U Element Ċ import Ġorg . jetbrains . u ast . U Parameter Ċ import Ġorg . jetbrains . u ast . U Variable Ċ import Ġjava . util . Enum Set Ċ Ċ /** Ċ Ġ* Ġ[ Detector ] Ġthat Ġchecks Ġthe Ġnaming Ġof ĠComp osition Local Ġproperties Ġfor Ġconsistency Ġwith Ġguidelines . Ċ Ġ* Ċ Ġ* ĠComp osition Local Ġproperties Ġshould Ġbe Ġprefixed Ġwith Ġ` Local ` Ġto Ġmake Ġit Ġclear Ġthat Ġtheir Ġvalue Ċ Ġ* Ġis Ġlocal Ġto Ġthe Ġcurrent Ġcomposition . Ċ Ġ*/ Ċ class ĠComp osition Local Naming Detector Ġ: ĠDetector (), ĠSource Code Scanner Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Applicable U ast Types () Ġ= ĠlistOf ( U Variable :: class . java ) ĊĊĠĠĠ Ġoverride Ġfun Ġcreate U ast Handler ( context : ĠJava Context ) Ġ= Ġobject Ġ: ĠU Element Handler () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Variable ( node : ĠU Variable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġparameters Ġof Ġtype ĠComp osition Local ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node Ġis ĠU Parameter ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . source Psi Ġis ĠK t Parameter ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġlocal Ġproperties ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( node . source Psi Ġas ? ĠK t Property )?. is Local Ġ== Ġtrue ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġnode . type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Inheritance Util . isIn her itor ( type , ĠNames . Runtime . Composition Local . java F qn )) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġnode . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name !!. startsWith (" Local ", Ġignore Case Ġ= Ġtrue )) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠKotlin c Ġcan 't Ġdis amb igu ate Ġover loads Ġfor Ġreport Ġ/ ĠgetName Location Ġotherwise ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu Element Node : ĠU Element Ġ= Ġnode ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComp osition Local Naming , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu Element Node , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getName Location ( u Element Node ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Composition Local Ġproperties Ġshould Ġbe Ġprefixed Ġwith Ġ` Local `", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠComp osition Local Naming Ġ= ĠIssue . create ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Composition Local Naming ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Composition Local Ġproperties Ġshould Ġbe Ġprefixed Ġwith Ġ` Local `", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Composition Local Ġproperties Ġshould Ġbe Ġprefixed Ġwith Ġ` Local `. ĠThis Ġhelps Ġmake Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" it Ġclear Ġat Ġtheir Ġuse Ġsite Ġthat Ġthese Ġvalues Ġare Ġlocal Ġto Ġthe Ġcurrent Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" composition . ĠTypically Ġthe Ġfull Ġname Ġwill Ġbe Ġ` Local ` Ġ+ Ġthe Ġtype Ġof Ġthe Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Composition Local , Ġfor Ġexample Ġval ĠLocal Foo Ġ= Ġcomposition Local Of Ġ{ ĠFoo () Ġ} .", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCategory . CORRECT NESS , Ġ 3 , ĠSeverity . WARNING , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImplementation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComp osition Local Naming Detector :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnum Set . of ( Scope . JAVA _ FILE , ĠScope . TEST _ SOURCES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ