/* Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ċ Ġ* Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . rust . lang . core . psi Ċ Ċ import Ġcom . intellij . psi . util . Cached Value Provider Ċ import Ġcom . intellij . psi . util . Cached Values Manager Ċ import Ġorg . rust . lang . core . crate . C rate Ċ import Ġorg . rust . lang . core . psi . ext . getQuery Attributes Ċ import Ġorg . rust . lang . core . psi . ext . name Ċ Ċ /** Ċ Ġ* Ġ`# ![ register _ attr ()] ` Ġand Ġ`# ![ register _ tool ()] ` Ġcrate - root Ġattributes Ċ Ġ*/ Ċ data Ġclass ĠCustom Attributes ( ĊĠĠĠ Ġval Ġcustom Attrs : ĠSet < String >, ĊĠĠĠ Ġval Ġcustom Tools : ĠSet < String >, Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠEMPTY : ĠCustom Attributes Ġ= ĠCustom Attributes ( empty Set (), Ġempty Set ()) ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom C rate ( crate : ĠC rate ): ĠCustom Attributes Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġcrate . project ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCached Values Manager . getManager ( project ). get Cached Value ( crate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCached Value Provider . Result . create ( do Get From C rate ( crate ), Ġproject . rust Structure Modification Tracker ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdo Get From C rate ( crate : ĠC rate ): ĠCustom Attributes Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Mod Ġ= Ġcrate . root Mod Ġ?: Ġreturn ĠEMPTY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfrom Root Module ( root Mod , Ġcrate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġfrom Root Module ( root Mod : ĠRs File , Ġcrate : ĠC rate ): ĠCustom Attributes Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattrs Ġ= Ġmutable Set Of < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtools Ġ= Ġmutable Set Of < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( meta Ġin Ġroot Mod . getQuery Attributes ( crate ). meta Items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( meta . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" register _ attr " Ġ-> Ġcollect Meta Item Arg Names ( meta , Ġattrs :: add ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" register _ tool " Ġ-> Ġcollect Meta Item Arg Names ( meta , Ġtools :: add ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCustom Attributes ( attrs , Ġtools ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġinline Ġfun Ġcollect Meta Item Arg Names ( meta : ĠRs Meta Item , Ġcollector : Ġ( String ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( attr Ġin Ġmeta . meta Item Args ?. meta ItemList . or Empty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr . name ?. let Ġ{ Ġcollector ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ