/* Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ċ Ġ* Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . rust . cargo . run config . test Ċ Ċ import Ġcom . intellij . execution . Location Ċ import Ġcom . intellij . execution . Psi Location Ċ import Ġcom . intellij . execution . test framework . sm . runner . SM Test Locator Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . search . Global Search Scope Ċ import Ġorg . rust . cargo . project . model . cargo Projects Ċ import Ġorg . rust . cargo . project . model . impl . all Targets Ċ import Ġorg . rust . cargo . project . workspace . Package Origin Ċ import Ġorg . rust . lang . core . psi . Rs File Ċ import Ġorg . rust . lang . core . psi . Rs Mod Decl Item Ċ import Ġorg . rust . lang . core . psi . ext . Rs Qualified Named Element Ċ import Ġorg . rust . lang . core . psi . ext . qualified Name Ċ import Ġorg . rust . lang . core . stubs . index . Rs Named Element Index Ċ import Ġorg . rust . openapi ext . to Psi File Ċ import Ġorg . rust . st dex t . build List Ċ Ċ object ĠC argo Test Locator Ġ: ĠSM Test Locator Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠNAME _ SEPARATOR : ĠString Ġ= Ġ":: " ĊĠĠĠ Ġprivate Ġconst Ġval ĠTEST _ PROTOCOL : ĠString Ġ= Ġ" cargo : test " ĊĊĠĠĠ Ġoverride Ġfun Ġget Location ( ĊĠĠĠĠĠĠĠ Ġprotocol : ĠString , ĊĠĠĠĠĠĠĠ Ġpath : ĠString , ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġscope : ĠGlobal Search Scope ĊĠĠĠ Ġ): ĠList < Location < Psi Element >> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( protocol Ġ!= ĠTEST _ PROTOCOL ) Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġval Ġqualified Name Ġ= Ġto QualifiedName ( path ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ` Rs Qualified Named Element . qualified Name ` Ġstarts Ġwith ĠC argo Ġtarget Ġname , Ġso Ġif Ġthe Ġ` qualified Name ` Ġdoesn 't ĊĠĠĠĠĠĠĠ Ġ// Ġcontain Ġthe Ġname Ġseparator , Ġwe Ġare Ġlooking Ġfor Ġa Ġtarget Ġwith Ġthe Ġcorresponding Ġname ĊĠĠĠĠĠĠĠ Ġif Ġ(! qualified Name . contains ( NAME _ SEPARATOR )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġproject . cargo Projects . all Targets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . pkg . origin Ġ== ĠPackage Origin . WORK SPACE Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . norm Name Ġ== Ġqualified Name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . crate Root ?. to Psi File ( project ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠPsi Location . from Psi Element < Psi Element >( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuild List Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġqualified Name . substring After Last ( NAME _ SEPARATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin ĠRs Named Element Index . find Elements ByName ( project , Ġname , Ġscope )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Element Ġ= Ġwhen Ġ( element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs Mod Decl Item Ġ-> Ġelement . reference . resolve () Ġas ? ĠRs File ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs Qualified Named Element Ġ-> Ġelement ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( source Element ?. qualified Name Ġ== Ġqualified Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Psi Location . from Psi Element ( source Element )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Test Url ( name : ĠString ): ĠString Ġ= Ġ"$ TEST _ PROTOCOL :// $ name " ĊĊĠĠĠ Ġfun Ġget Test Url ( function : ĠRs Qualified Named Element ): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġget Test Url ( function . qualified Name Ġ?: Ġ"") ĊĊĠĠĠ Ġprivate Ġfun Ġto QualifiedName ( path : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtarget Name Ġ= Ġpath . substring Before ( NAME _ SEPARATOR ). substring Before Last ("- ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! path . contains ( NAME _ SEPARATOR )) Ġreturn Ġtarget Name ĊĠĠĠĠĠĠĠ Ġval Ġqualified Name Ġ= Ġpath . substring After ( NAME _ SEPARATOR ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ target Name $ NAME _ SEPARATOR $ qualified Name " ĊĠĠĠ Ġ} Ċ } Ċ