// ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġcom . intellij . find . actions Ċ Ċ import Ġcom . intellij . code Insight . Target Element Util Ċ import Ġcom . intellij . find . find Usage s . Psi Element 2 Usage Target Adapter Ċ import Ġcom . intellij . ide . impl . data Rules . GetData Rule Ċ import Ġcom . intellij . openapi . action System . Common Data Keys Ċ import Ġcom . intellij . openapi . action System . DataProvider Ċ import Ġcom . intellij . openapi . project . Index Not Ready Exception Ċ import Ġcom . intellij . us ages . Usage Target Ċ import Ġcom . intellij . us ages . Usage View Ċ import Ġcom . intellij . util . Smart List Ċ Ċ /** Ċ Ġ* Ġ@ see Ġcom . intellij . code Insight . navigation . actions . G oto Declaration Action . do Choose Amb iguous Target Ċ Ġ*/ Ċ class ĠSearch Target Variants Data Rule Ġ: ĠGet Data Rule Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetData ( dataProvider : ĠData Provider ): ĠAny ? Ġ{ ĊĠĠĠ Ġval Ġall Targets Ġ= ĠSmart List < Target Variant >() ĊĊĠĠĠ ĠFind Usage s Action . SEARCH _ TARGET S . getData ( dataProvider )?. map To ( all Targets , Ġ:: Search Target Variant ) ĊĊĠĠĠ Ġval Ġusage Targets : ĠArray < out ĠUsage Target >? Ġ= ĠUsage View . USAGE _ TARGET S _ KEY . getData ( dataProvider ) ĊĠĠĠ Ġif Ġ( usage Targets Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġval Ġeditor Ġ= ĠCommon Data Keys . EDITOR . getData ( dataProvider ) ĊĠĠĠĠĠ Ġif Ġ( editor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġeditor . caret Model . offset ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġreference Ġ= ĠTarget Element Util . find Reference ( editor , Ġoffset ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( reference Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTarget Element Util . getInstance (). getTarget Candidates ( reference ). map To ( all Targets , Ġ:: Psi Target Variant ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( ignore : ĠIndex Not Ready Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġif Ġ( usage Targets . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġval Ġtarget : ĠUsage Target Ġ= Ġusage Targets [ 0 ] ĊĠĠĠĠĠ Ġall Targets Ġ+= Ġif Ġ( target Ġis ĠPsi Element 2 Usage Target Adapter ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPsi Target Variant ( target . element ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠCustom Target Variant ( target ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġall Targets . take Unless Ġ{ ĊĠĠĠĠĠ Ġit . isEmpty () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ