/* Ċ Ġ* Ġ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 . ext Ċ Ċ import Ġcom . intellij . psi . Psi Comment Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . Psi WhiteSpace Ċ import Ġcom . intellij . psi . tree . I ElementType Ċ import Ġcom . intellij . psi . util . Psi Tree Util Ċ import Ġcom . intellij . psi . util . Psi Util Core Ċ import Ġorg . rust . lang . core . psi . Rs File Ċ import Ġorg . rust . lang . core . stubs . Rs File Stub ĊĊ Ċ val ĠPsi Element . ance stors : ĠSequence < Psi Element > Ġget () Ġ= Ġgenerate Sequence ( this ) Ġ{ ĊĠĠĠ Ġif Ġ( it Ġis ĠPsi File ) Ġnull Ġelse Ġit . parent Ċ } Ċ Ċ val ĠPsi Element . ancestor Pairs : ĠSequence < Pair < Psi Element , ĠPsi Element >> Ġget () Ġ{ ĊĠĠĠ Ġval Ġparent Ġ= Ġthis . parent Ġ?: Ġreturn Ġempty Sequence () ĊĠĠĠ Ġreturn Ġgenerate Sequence ( Pair ( this , Ġparent )) Ġ{ Ġ(_, Ġparent ) Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġgrand Pa Ġ= Ġparent . parent ĊĠĠĠĠĠĠĠ Ġif Ġ( parent Ġis ĠPsi File Ġ|| Ġgrand Pa Ġ== Ġnull ) Ġnull Ġelse Ġparent Ġto Ġgrand Pa ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠExtract s Ġnode 's Ġelement Ġtype Ċ Ġ*/ Ċ val ĠPsi Element . elementType : ĠI ElementType ĊĠĠĠ Ġ// ĠXXX : Ġbe Ġcareful Ġnot Ġto Ġswitch Ġto ĠAST ĊĠĠĠ Ġget () Ġ= Ġif Ġ( this Ġis ĠRs File ) ĠRs File Stub . Type Ġelse ĠPsi Util Core . getElement Type ( this ) ĊĊ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠPsi Element > ĠPsi Element . ancestor Strict (): ĠT ? Ġ= ĊĠĠĠ ĠPsi Tree Util . getParent OfType ( this , ĠT :: class . java , Ġ/* Ġstrict Ġ*/ Ġtrue ) Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠPsi Element > ĠPsi Element . ancestor Or Self (): ĠT ? Ġ= ĊĠĠĠ ĠPsi Tree Util . getParent OfType ( this , ĠT :: class . java , Ġ/* Ġstrict Ġ*/ Ġfalse ) Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠPsi Element > ĠPsi Element . ancestor Or Self ( stop At : ĠClass < out ĠPsi Element >): ĠT ? Ġ= ĊĠĠĠ ĠPsi Tree Util . getParent OfType ( this , ĠT :: class . java , Ġ/* Ġstrict Ġ*/ Ġfalse , Ġstop At ) ĊĊ Ċ /** Ċ Ġ* ĠSame Ġas Ġ[ ancestor Strict ], Ġbut Ġwith Ġ" fake " Ġparent Ġlinks . ĠSee Ġ[ org . rust . lang . core . macros . Expansion Result ]. Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠPsi Element > ĠPsi Element . context Strict (): ĠT ? Ġ= ĊĠĠĠ ĠPsi Tree Util . getContext OfType ( this , ĠT :: class . java , Ġ/* Ġstrict Ġ*/ Ġtrue ) Ċ Ċ /** Ċ Ġ* ĠSame Ġas Ġ[ ancestor Or Self ], Ġbut Ġwith Ġ" fake " Ġparent Ġlinks . ĠSee Ġ[ org . rust . lang . core . macros . Expansion Result ]. Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠPsi Element > ĠPsi Element . context Or Self (): ĠT ? Ġ= ĊĠĠĠ ĠPsi Tree Util . getContext OfType ( this , ĠT :: class . java , Ġ/* Ġstrict Ġ*/ Ġfalse ) ĊĊ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠPsi Element > ĠPsi Element . children OfType (): ĠList < T > Ġ= ĊĠĠĠ ĠPsi Tree Util . getChildren OfType As List ( this , ĠT :: class . java ) Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠPsi Element > ĠPsi Element . stub Children OfType (): ĠList < T > Ġ= ĊĠĠĠ ĠPsi Tree Util . get Stub Children OfType As List ( this , ĠT :: class . java ) Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠPsi Element > ĠPsi Element . desc endant OfType Strict (): ĠT ? Ġ= ĊĠĠĠ ĠPsi Tree Util . find Child OfType ( this , ĠT :: class . java , Ġ/* Ġstrict Ġ*/ Ġtrue ) Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠPsi Element > ĠPsi Element . desc endants OfType (): ĠCollection < T > Ġ= ĊĠĠĠ ĠPsi Tree Util . find Children OfType ( this , ĠT :: class . java ) Ċ Ċ /** Ċ Ġ* ĠSame Ġas Ġ[ Psi Element . get Containing File ], Ġbut Ġreturn Ġa Ġ" fake " Ġfile . ĠSee Ġ[ org . rust . lang . core . macros . Expansion Result ]. Ċ Ġ*/ Ċ val ĠPsi Element . context ual File : ĠPsi File ĊĠĠĠ Ġget () Ġ= Ġcontext Or Self () Ġ?: Ġerror (" Element Ġoutside Ġof Ġfile : Ġ$ text ") Ċ Ċ /** Ċ Ġ* ĠFinds Ġfirst Ġsibling Ġthat Ġis Ġneither Ġcomment , Ġnor Ġwhitespace Ġbefore Ġgiven Ġelement . Ċ Ġ*/ Ċ fun ĠPsi Element ?. get Prev Non Comment Sibling (): ĠPsi Element ? Ġ= ĊĠĠĠ ĠPsi Tree Util . skip S iblings Backward ( this , ĠPsi WhiteSpace :: class . java , ĠPsi Comment :: class . java ) Ċ Ċ /** Ċ Ġ* ĠFinds Ġfirst Ġsibling Ġthat Ġis Ġneither Ġcomment , Ġnor Ġwhitespace Ġafter Ġgiven Ġelement . Ċ Ġ*/ Ċ fun ĠPsi Element ?. getNext Non Comment Sibling (): ĠPsi Element ? Ġ= ĊĠĠĠ ĠPsi Tree Util . skip S iblings Forward ( this , ĠPsi WhiteSpace :: class . java , ĠPsi Comment :: class . java ) Ċ