/* Ċ Ġ* Ġ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 Ċ Ċ import Ġcom . intellij . util . Smart List Ċ import Ġcom . intellij . util . recursion Safe Lazy Ċ import Ġg nu . tro ve . TH ash Map Ċ import Ġorg . rust . lang . core . psi . Rs Impl Item Ċ import Ġorg . rust . lang . core . psi . Rs Trait Item Ċ import Ġorg . rust . lang . core . psi . Rs Trait Ref Ċ import Ġorg . rust . lang . core . psi . ext .* Ċ import Ġorg . rust . lang . core . psi . isValid Project Member Ċ import Ġorg . rust . lang . core . types . Bound Element Ċ import Ġorg . rust . lang . core . types . consts . Ct Const Parameter Ċ import Ġorg . rust . lang . core . types . infer . const Gener ics Ċ import Ġorg . rust . lang . core . types . infer . gener ics Ċ import Ġorg . rust . lang . core . types . ty . Ty Ċ import Ġorg . rust . lang . core . types . ty . Ty Type Parameter Ċ import Ġorg . rust . lang . core . types . type Ċ import Ġkotlin . Lazy Thread Safety Mode . PUBLIC ATION Ċ Ċ /** Ċ Ġ* ĠUsed Ġfor Ġoptimization Ġpurposes , Ġto Ġreduce Ġaccess Ġto Ġcache Ġand ĠP SI Ġtree Ġin Ġsome Ġvery Ġhot Ġplaces , Ċ Ġ* Ġ[ Impl Lookup . assemble Candidates ] Ġand Ġ[ process Associated Items ] Ġin Ġparticular Ċ Ġ*/ Ċ class ĠRs Cached Impl Item ( ĊĠĠĠ Ġval Ġimpl : ĠRs Impl Item Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtrait Ref : ĠRs Trait Ref ? Ġ= Ġimpl . trait Ref ĊĠĠĠ Ġval ĠisValid : ĠBoolean Ġ= Ġimpl . isValid Project Member Ġ&& Ġ! impl . is Reservation Impl Ġ&& Ġ! impl . is Negative Impl ĊĠĠĠ Ġval ĠisIn herent : ĠBoolean Ġget () Ġ= Ġtrait Ref Ġ== Ġnull ĊĊĠĠĠ Ġval Ġimplemented Trait : ĠBound Element < Rs Trait Item >? Ġby Ġrecursion Safe Lazy Ġ{ Ġtrait Ref ?. resolve To Bound Trait () Ġ} ĊĠĠĠ Ġval Ġtype And Gener ics : ĠTrip le < Ty , ĠList < Ty Type Parameter >, ĠList < Ct Const Parameter >> ? Ġby Ġlazy ( PUBLIC ATION ) Ġ{ ĊĠĠĠĠĠĠĠ Ġimpl . type Reference ?. type ?. let Ġ{ ĠTrip le ( it , Ġimpl . gener ics , Ġimpl . const Gener ics ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠFor Ġ` impl ĠT Ġfor ĠFoo ` Ġreturns Ġunion Ġof Ġimpl Ġmembers Ġand Ġtrait Ġ` T ` Ġmembers Ġthat Ġare Ġnot Ġover rid en Ġby Ġthe Ġimpl Ġ*/ ĊĠĠĠ Ġval Ġimpl And Trait Expanded Members : ĠMap < String , ĠList < Rs Abstract able >> Ġby Ġlazy ( PUBLIC ATION ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmembers Map Ġ= ĠT HashMap < String , ĠMutable List < Rs Abstract able >>() ĊĠĠĠĠĠĠĠ Ġfor Ġ( member Ġin Ġimpl . members ?. expanded Members . or Empty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġmember . name Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmembers Map . get Or Put ( name ) Ġ{ ĠSmart List () Ġ}. add ( member ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtrait Members Ġ= Ġimplemented Trait ?. element ?. members ?. expanded Members ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn @ lazy Ġmembers Map ĊĠĠĠĠĠĠĠ Ġval Ġimpl Member Names Ġ= ĠHashSet < String >( members Map . keys ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( member Ġin Ġtrait Members ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġmember . name Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name Ġin Ġimpl Member Names ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmembers Map . get Or Put ( name ) Ġ{ ĠSmart List () Ġ}. add ( member ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmembers Map ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfor Impl ( impl : ĠRs Impl Item ): ĠRs Cached Impl Item Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( impl Ġas ĠRs Impl Item Impl Mixin ). cached Impl Item . value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ