/* Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ċ Ġ* Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . rust . lang . core . resolve . ref Ċ Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġorg . rust . lang . core . psi . Rs Function Ċ import Ġorg . rust . lang . core . psi . Rs Path Ċ import Ġorg . rust . lang . core . psi . Rs Trait Item Ċ import Ġorg . rust . lang . core . psi . ext . Rs Element Ċ import Ġorg . rust . lang . core . psi . ext . is Known Deriv able Ċ import Ġorg . rust . lang . core . resolve . collect Resolve Variants Ċ import Ġorg . rust . lang . core . resolve . process Der ive Trait Resolve Variants Ċ import Ġorg . rust . lang . core . resolve . process Proc Macro Resolve Variants Ċ Ċ class ĠRs Der ive Trait Reference Impl ( ĊĠĠĠ Ġelement : ĠRs Path Ċ ) Ġ: ĠRs Reference Cached < Rs Path >( element ), ĊĠĠĠ ĠRs Path Reference Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġresolve Inner (): ĠList < Rs Element > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġresolve Ġstandard Ġderive Ġproc Ġmacros , Ġsuch Ġas ĠDer ive Ġor ĠDisplay , ĊĠĠĠĠĠĠĠ Ġ// Ġto Ġtheir Ġcorresponding Ġtraits , ĊĠĠĠĠĠĠĠ Ġ// Ġbecause Ġresolving Ġthem Ġto Ġmacros Ġmakes Ġlittle Ġsense Ġto Ġusers Ġ( these Ġmacros Ġare Ġempty ) ĊĠĠĠĠĠĠĠ Ġelement . resolve To Derived Trait () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . is Known Deriv able Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġreturn Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġelement . resolve To Proc Macro () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Reference To ( element : ĠPsi Element ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġ( element Ġis ĠRs Trait Item Ġ|| Ġelement Ġis ĠRs Function ) Ġ&& Ġsuper . is Reference To ( element ) Ċ } Ċ Ċ private Ġfun ĠRs Path . resolve To Derived Trait (): ĠList < Rs Trait Item > Ġ{ ĊĠĠĠ Ġval Ġtrait Name Ġ= Ġreference Name Ġ?: Ġreturn Ġempty List () ĊĠĠĠ Ġval Ġvariants Ġ= Ġcollect Resolve Variants ( trait Name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess Der ive Trait Resolve Variants ( this , Ġtrait Name , Ġit ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġvariants . filter Is Instance < Rs Trait Item >() Ċ } Ċ Ċ private Ġfun ĠRs Path . resolve To Proc Macro (): ĠList < Rs Element > Ġ{ ĊĠĠĠ Ġval Ġtrait Name Ġ= Ġreference Name Ġ?: Ġreturn Ġempty List () ĊĠĠĠ Ġreturn Ġcollect Resolve Variants ( trait Name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess Proc Macro Resolve Variants ( this , Ġit ) ĊĠĠĠ Ġ} Ċ } Ċ