// Ġ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 . Ċ @ file : Api Status . Internal Ċ Ċ package Ġcom . intellij . find . actions Ċ Ċ import Ġcom . intellij . Common Bundle Ċ import Ġcom . intellij . code Insight . hint . Hint Manager Ċ import Ġcom . intellij . code Insight . navigation . target Presentation Ċ import Ġcom . intellij . find . Find Bundle Ċ import Ġcom . intellij . find . us ages . api . Search Target Ċ import Ġcom . intellij . navigation . Target Presentation Ċ import Ġcom . intellij . openapi . action System . Common Data Keys Ċ import Ġcom . intellij . openapi . action System . DataContext Ċ import Ġcom . intellij . openapi . action System . Data Key Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . ui . Messages Ċ import Ġcom . intellij . openapi . util . N ls Contexts . Popup Title Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . ui . list . create Target Popup Ċ import Ġcom . intellij . us ages . Usage Target Ċ import Ġorg . jetbrains . annotations . Api Status Ċ Ċ /* ĠThis Ġfile Ġcontains Ġweird Ġlogic Ġso ĠS ymbols Ġwill Ġwork Ġwith ĠPsi Elements Ġand ĠUsage Targets . Ġ*/ Ċ Ċ private Ġval ĠTARGET _ VARIANT S : ĠData Key < List < Target Variant >> Ġ= ĠData Key . create (" search . target . variants ") Ċ Ċ internal Ġfun Ġall Targets ( data Context : ĠData Context ): ĠList < Target Variant > Ġ= Ġdata Context . getData ( TARGET _ VARIANT S ) Ġ?: Ġempty List () Ċ Ċ internal Ġinterface ĠUsage Variant Handler Ġ{ ĊĠ Ġfun Ġhandle Target ( target : ĠSearch Target ) ĊĠ Ġfun Ġhandle Psi ( element : ĠPsi Element ) Ċ } Ċ Ċ internal Ġfun Ġfind Show Usage s ( project : ĠProject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Context : ĠData Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Targets : ĠList < Target Variant >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Popup Title Ġpopup Title : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler : ĠUsage Variant Handler ) Ġ{ ĊĠ Ġwhen Ġ( all Targets . size ) Ġ{ ĊĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠ Ġval Ġeditor Ġ= Ġdata Context . getData ( Common Data Keys . EDITOR ) ĊĠĠĠĠĠ Ġval Ġmessage Ġ= ĠFind Bundle . message (" find . no . us ages . at . cursor . error ") ĊĠĠĠĠĠ Ġif Ġ( editor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMessages . showMessageDialog ( project , Ġmessage , ĠCommon Bundle . getError Title (), ĠMessages . getError Icon ()) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠHint Manager . getInstance (). show Error Hint ( editor , Ġmessage ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠ Ġall Targets . single (). handle ( handler ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠ Ġcreate Target Popup ( popup Title , Ġall Targets , ĠTarget Variant :: presentation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit . handle ( handler ) ĊĠĠĠĠĠ Ġ}. show In Best Position For ( data Context ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ internal Ġsealed Ġclass ĠTarget Variant Ġ{ ĊĠ Ġabstract Ġval Ġpresentation : ĠTarget Presentation ĊĠ Ġabstract Ġfun Ġhandle ( handler : ĠUsage Variant Handler ) Ċ } Ċ Ċ internal Ġclass ĠSearch Target Variant ( private Ġval Ġtarget : ĠSearch Target ) Ġ: ĠTarget Variant () Ġ{ ĊĠ Ġoverride Ġval Ġpresentation : ĠTarget Presentation Ġget () Ġ= Ġtarget . presentation ĊĠ Ġoverride Ġfun Ġhandle ( handler : ĠUsage Variant Handler ): ĠUnit Ġ= Ġhandler . handle Target ( target ) Ċ } Ċ Ċ internal Ġclass ĠPsi Target Variant ( private Ġval Ġelement : ĠPsi Element ) Ġ: ĠTarget Variant () Ġ{ ĊĠ Ġoverride Ġval Ġpresentation : ĠTarget Presentation Ġget () Ġ= Ġtarget Presentation ( element ) ĊĠ Ġoverride Ġfun Ġhandle ( handler : ĠUsage Variant Handler ): ĠUnit Ġ= Ġhandler . handle Psi ( element ) Ċ } Ċ Ċ internal Ġclass ĠCustom Target Variant ( private Ġval Ġtarget : ĠUsage Target ) Ġ: ĠTarget Variant () Ġ{ ĊĠ Ġoverride Ġval Ġpresentation : ĠTarget Presentation Ġget () Ġ= Ġtarget Presentation ( target . presentation !! ) ĊĠ Ġoverride Ġfun Ġhandle ( handler : ĠUsage Variant Handler ): ĠUnit Ġ= Ġtarget . find Usage s () Ċ } Ċ