/* Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ċ Ġ* Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . rust . lang . core . types . ty Ċ Ċ 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 Type Parameter Ċ import Ġorg . rust . lang . core . psi . ext .* Ċ import Ġorg . rust . lang . core . types . Bound Element Ċ import Ġorg . rust . lang . core . types . HAS _ TY _ TYPE _ PARAMETER _ MASK Ċ import Ġorg . rust . lang . core . types . infer . resolve Ċ import Ġorg . rust . lang . core . types . regions . Region Ċ import Ġorg . rust . lang . core . types . type Ċ Ċ class ĠTy Type Parameter Ġprivate Ġconstructor ( ĊĠĠĠ Ġval Ġparameter : ĠType Parameter , ĊĠĠĠ Ġval Ġis Sized : ĠBoolean , ĊĠĠĠ Ġtrait Bounds Supplier : Ġ() Ġ-> ĠCollection < Bound Element < Rs Trait Item >>, ĊĠĠĠ Ġregion Bounds Supplier : Ġ() Ġ-> ĠCollection < Region > Ċ ) Ġ: ĠTy ( HAS _ TY _ TYPE _ PARAMETER _ MASK ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtrait Bounds : ĠCollection < Bound Element < Rs Trait Item >> ĊĠĠĠĠĠĠĠ Ġby Ġlazy ( Lazy Thread Safety Mode . NONE , Ġtrait Bounds Supplier ) ĊĊĠĠĠ Ġval Ġregion Bounds : ĠCollection < Region > ĊĠĠĠĠĠĠĠ Ġby Ġlazy ( Lazy Thread Safety Mode . NONE , Ġregion Bounds Supplier ) ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġother Ġis ĠTy Type Parameter Ġ&& Ġother . parameter Ġ== Ġparameter ĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= Ġparameter . hashCode () ĊĊĠĠĠ Ġfun Ġget Trait Bounds Transit ively (): ĠCollection < Bound Element < Rs Trait Item >> Ġ= ĊĠĠĠĠĠĠĠ Ġtrait Bounds . flatMap Ġ{ Ġit . flatten Hierarchy Ġ} ĊĊĠĠĠ Ġval Ġname : ĠString ? Ġget () Ġ= Ġparameter . name ĊĊĠĠĠ Ġinterface ĠType Parameter Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠSelf Ġ: ĠType Parameter Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġname : ĠString ? Ġget () Ġ= Ġ" Self " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠNamed ( val Ġparameter : ĠR sType Parameter ) Ġ: ĠType Parameter Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġname : ĠString ? Ġget () Ġ= Ġparameter . name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġself Ġ= ĠTy Type Parameter ( Self , Ġfalse , Ġ{ Ġempty List () Ġ}, Ġ{ Ġempty List () Ġ}) ĊĊĠĠĠĠĠĠĠ Ġfun Ġself (): ĠTy Type Parameter Ġ= Ġself ĊĊĠĠĠĠĠĠĠ Ġfun Ġself ( item : ĠRs Trait Or Impl ): ĠTy Type Parameter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Sized Ġ= Ġwhen Ġ( item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs Trait Item Ġ-> Ġitem . implemented Trait ?. flatten Hierarchy . or Empty (). any Ġ{ Ġit . element . is Sized Trait Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs Impl Item Ġ-> Ġitem . type Reference ?. type ?. is Sized () Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" item Ġmust Ġbe Ġinstance Ġof Ġ` Rs Trait Item ` Ġor Ġ` Rs Impl Item ` ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTy Type Parameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSelf , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Sized , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠlistOf NotNull ( item . implemented Trait ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġempty List () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġnamed ( parameter : ĠR sType Parameter ): ĠTy Type Parameter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTy Type Parameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNamed ( parameter ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter . is Sized , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġtrait Bounds ( parameter ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġregion Bounds ( parameter ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġtrait Bounds ( parameter : ĠR sType Parameter ): ĠList < Bound Element < Rs Trait Item >> Ġ= ĊĠĠĠ Ġparameter . bounds . map NotNull Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrait Ġ= Ġit . bound . trait Ref ?. resolve To Bound Trait Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġ` T : Ġ? Sized ` Ġthen ĠT Ġdoesn 't Ġhave Ġ` Sized ` Ġbound ĊĠĠĠĠĠĠĠ Ġif Ġ(! trait . element . is Sized Trait Ġ|| Ġparameter . is Sized ) Ġtrait Ġelse Ġnull ĊĠĠĠ Ġ} Ċ Ċ private Ġfun Ġregion Bounds ( parameter : ĠR sType Parameter ): ĠList < Region > Ġ= ĊĠĠĠ Ġparameter . bounds . map NotNull Ġ{ Ġit . bound . lifetime ?. resolve () Ġ} Ċ