package Ġorg . cq fn . di kt at . rule set . utils . search Ċ Ċ import Ġcom . p interest . kt lint . core . ast . ElementType Ċ import Ġorg . cq fn . di kt at . rule set . utils . findAll Nodes With Specific Type Ċ import Ġorg . cq fn . di kt at . rule set . utils . is Go ing After Ċ import Ġorg . jetbrains . kotlin . com . intellij . lang . AST Node Ċ import Ġorg . jetbrains . kotlin . psi . Kt Element Ċ import Ġorg . jetbrains . kotlin . psi . Kt Name Reference Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Property Ċ Ċ class ĠVariable sWith Usage s Search ( file Node : ĠAST Node , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter For Variables : Ġ( Kt Property ) Ġ-> ĠBoolean ) Ġ: ĠVariables Search ( file Node , Ġfilter For Variables ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠK t Element . getAll SearchResults ( property : ĠK t Property ): ĠList < Kt Name Reference Expression > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . node . findAll Nodes With Specific Type ( ElementType . REFERENCE _ EXPRESSION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfiltering Ġout Ġall Ġusage s Ġthat Ġare Ġdeclared Ġin Ġthe Ġsame Ġcontext Ġbut Ġare Ġgoing Ġbefore Ġthe Ġvariable Ġdeclaration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . is Go ing After ( property . node ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . psi Ġas ĠK t Name Reference Expression Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . get Referenced Name As Name () Ġ== Ġproperty . name As Name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġexpression Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġavoid Ġfalse Ġtriggering Ġon Ġobjects ' Ġfields Ġwith Ġsame Ġname Ġas Ġproperty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression . is Reference To Field Of Object () Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġexclude Ġusage s Ġof Ġlocal Ġproperties Ġfrom Ġother Ġcontext Ġ( shadow ed ) Ġand Ġlambda Ġarguments Ġwith Ġsame Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Reference To Other Variable With Same Name ( expression , Ġthis , Ġproperty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġthe Ġdefault Ġvalue Ġfor Ġfiltering Ġcondition Ġis Ġalways Ġtrue Ċ fun ĠAST Node . findAll Variable sWith Usage s ( filter For Variables : Ġ( Kt Property ) Ġ-> ĠBoolean Ġ= Ġ:: default ) Ġ= ĊĠĠĠĠĠĠĠ ĠVariable sWith Usage s Search ( this , Ġfilter For Variables ). collect Variables () ĊĊ