// ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġcom . intellij . code Insight . navigation . impl Ċ Ċ import Ġcom . intellij . code Insight . Target Element Util Ċ import Ġcom . intellij . code Insight . navigation . Ctrl Mouse Info Ċ import Ġcom . intellij . code Insight . navigation . Multiple Target Elements Info Ċ import Ġcom . intellij . code Insight . navigation . Single Target Element Info Ċ import Ġcom . intellij . code Insight . navigation . actions . G oto Declaration Handler Ċ import Ġcom . intellij . code Insight . navigation . target Presentation Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi . Psi Document Manager Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . util . Smart List Ċ Ċ internal Ġfun Ġfrom G TD Providers ( project : ĠProject , Ġeditor : ĠEditor , Ġoffset : ĠInt ): ĠG TD Action Data ? Ġ{ ĊĠ Ġreturn Ġprocess Injection Then Host ( editor , Ġoffset ) Ġ{ Ġ_ editor , Ġ_ offset Ġ-> ĊĠĠĠ Ġfrom G TD Providers Inner ( project , Ġ_ editor , Ġ_ offset ) ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ see Ġcom . intellij . code Insight . navigation . actions . G oto Declaration Action . find Target Elements From Providers Ċ Ġ*/ Ċ private Ġfun Ġfrom G TD Providers Inner ( project : ĠProject , Ġeditor : ĠEditor , Ġoffset : ĠInt ): ĠG TD Action Data ? Ġ{ ĊĠ Ġval Ġdocument Ġ= Ġeditor . document ĊĠ Ġval Ġfile Ġ= ĠPsi Document Manager . getInstance ( project ). get Psi File ( document ) Ġ?: Ġreturn Ġnull ĊĠ Ġval Ġadjusted Offset : ĠInt Ġ= ĠTarget Element Util . adjust Offset ( file , Ġdocument , Ġoffset ) ĊĠ Ġval Ġleaf Element : ĠPsi Element Ġ= Ġfile . findElement At ( adjusted Offset ) Ġ?: Ġreturn Ġnull ĊĠ Ġfor Ġ( handler Ġin ĠG oto Declaration Handler . EP _ NAME . extension List ) Ġ{ ĊĠĠĠ Ġval Ġfrom Provider : ĠArray < out ĠPsi Element >? Ġ= Ġhandler . get G oto Declaration Targets ( leaf Element , Ġoffset , Ġeditor ) ĊĠĠĠ Ġif Ġ( from Provider . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġcontinue ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠG TD Provider Data ( leaf Element , Ġfrom Provider . toList (), Ġhandler ) ĊĠ Ġ} ĊĠ Ġreturn Ġnull Ċ } Ċ Ċ private Ġclass ĠG TD Provider Data ( ĊĠ Ġprivate Ġval Ġleaf Element : ĠPsi Element , ĊĠ Ġprivate Ġval Ġtarget Elements : ĠCollection < Psi Element >, ĊĠ Ġprivate Ġval Ġnavigation Provider : ĠG oto Declaration Handler Ċ ) Ġ: ĠG TD Action Data Ġ{ ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġrequire ( target Elements . isNotEmpty ()) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġctrl Mouse Info (): ĠCtrl Mouse Info Ġ{ ĊĠĠĠ Ġval Ġsingle Target Ġ= Ġtarget Elements . single OrNull () ĊĠĠĠ Ġreturn Ġif Ġ( single Target Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ ĠMultiple Target Elements Info ( leaf Element ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ ĠSingle Target Element Info ( leaf Element , Ġsingle Target ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġresult (): ĠG TD ActionResult ? Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( target Elements . size ) Ġ{ ĊĠĠĠĠĠĠ 0 Ġ-> Ġnull ĊĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnavig atable Ġ= Ġg td Target Navig atable ( target Elements . single ()) ĊĠĠĠĠĠĠĠ ĠG TD ActionResult . Single Target ( navig atable , Ġnavigation Provider ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtargets Ġ= Ġtarget Elements . map To ( Smart List ()) Ġ{ Ġtarget Element Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġval Ġnavig atable Ġ= Ġpsi Navig atable ( target Element ) ĊĠĠĠĠĠĠĠĠĠ ĠG TD Target ( navig atable , Ġtarget Presentation ( target Element ), Ġnavigation Provider ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠG TD ActionResult . Multiple Targets ( targets ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ