/* Ċ Ġ* ĠMinecraft ĠDev Ġfor ĠIntelliJ Ċ Ġ* Ċ Ġ* Ġhttps :// minecraft dev . org Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 Ġm inecraft - dev Ċ Ġ* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ*/ Ċ Ċ package Ġcom . de mon wav . mc dev . util Ċ Ċ import Ġcom . intellij . psi . Element Manip ulator Ċ import Ġcom . intellij . psi . Element Manip ulators Ċ import Ġcom . intellij . psi . Java Psi Facade Ċ import Ġcom . intellij . psi . Psi Class Ċ import Ġcom . intellij . psi . Psi Directory Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi Element Resolve Result Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . Psi Keyword Ċ import Ġcom . intellij . psi . Psi Member Ċ import Ġcom . intellij . psi . Psi Method Ċ import Ġcom . intellij . psi . Psi Modifier Ċ import Ġcom . intellij . psi . Psi Modifier . Modifier Constant Ċ import Ġcom . intellij . psi . Psi Parameter Ċ import Ġcom . intellij . psi . Psi Parameter List Ċ import Ġcom . intellij . psi . Psi Reference Ċ import Ġcom . intellij . psi . Psi Type Ċ import Ġcom . intellij . psi . Resolve Result Ċ import Ġcom . intellij . psi . filters . Element Filter Ċ import Ġcom . intellij . psi . util . Cached Value Provider Ċ import Ġcom . intellij . psi . util . Cached Values Manager Ċ import Ġcom . intellij . psi . util . Type Conversion Util Ċ import Ġcom . intellij . refactor ing . change Signature . Change Signature Util Ċ import Ġorg . jetbrains . annotations . Contract Ċ import Ġjava . util . stream . Stream Ċ Ċ // ĠParent Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ fun ĠPsi Element . find Containing Class (): ĠPsi Class ? Ġ= Ġfind Parent ( resolve References Ġ= Ġfalse ) Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ fun ĠPsi Element . find Referenced Class (): ĠPsi Class ? Ġ= Ġfind Parent ( resolve References Ġ= Ġtrue ) Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ fun ĠPsi Element . find Referenced Member (): ĠPsi Member ? Ġ= Ġfind Parent ({ Ġit Ġis ĠPsi Class Ġ}, Ġresolve References Ġ= Ġtrue ) Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ fun ĠPsi Element . find Containing Member (): ĠPsi Member ? Ġ= Ġfind Parent ({ Ġit Ġis ĠPsi Class Ġ}, Ġresolve References Ġ= Ġfalse ) Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ fun ĠPsi Element . find Containing Method (): ĠPsi Method ? Ġ= Ġfind Parent ({ Ġit Ġis ĠPsi Class Ġ}, Ġresolve References Ġ= Ġfalse ) Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ private Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠPsi Element > ĠPsi Element . find Parent ( resolve References : ĠBoolean ): ĠT ? Ġ{ ĊĠĠĠ Ġreturn Ġfind Parent ({ false }, Ġresolve References ) Ċ } Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ private Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠPsi Element > ĠPsi Element . find Parent ( stop : Ġ( Psi Element ) Ġ-> ĠBoolean , Ġresolve References : ĠBoolean ): ĠT ? Ġ{ ĊĠĠĠ Ġvar Ġel : ĠPsi Element Ġ= Ġthis ĊĊĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( resolve References Ġ&& Ġel Ġis ĠPsi Reference ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġel Ġ= Ġel . resolve () Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( el Ġis ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġel ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( el Ġis ĠPsi File Ġ|| Ġel Ġis ĠPsi Directory Ġ|| Ġstop ( el )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġel Ġ= Ġel . parent Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠChildren Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ fun ĠPsi Class . findFirst Member (): ĠPsi Member ? Ġ= Ġfind Child () Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ fun ĠPsi Element . find Next Member (): ĠPsi Member ? Ġ= Ġfind Sibling ( true ) Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ private Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠPsi Element > ĠPsi Element . find Child (): ĠT ? Ġ{ ĊĠĠĠ Ġreturn Ġfirst Child ?. find Sibling ( strict Ġ= Ġfalse ) Ċ } Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ private Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠPsi Element > ĠPsi Element . find Sibling ( strict : ĠBoolean ): ĠT ? Ġ{ ĊĠĠĠ Ġvar Ġsibling Ġ= Ġif Ġ( strict ) Ġnext Sibling Ġ?: Ġreturn Ġnull Ġelse Ġthis ĊĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( sibling Ġis ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsibling ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsibling Ġ= Ġsibling . next Sibling Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠPsi Element . find Keyword ( name : ĠString ): ĠPsi Keyword ? Ġ{ ĊĠĠĠ ĠforEach Child Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠPsi Keyword Ġ&& Ġit . text Ġ== Ġname ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ private Ġinline Ġfun ĠPsi Element . forEach Child ( func : Ġ( Psi Element ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġfirst Child ?. forEach Sibling ( func , Ġstrict Ġ= Ġfalse ) Ċ } Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ private Ġinline Ġfun ĠPsi Element . forEach Sibling ( func : Ġ( Psi Element ) Ġ-> ĠUnit , Ġstrict : ĠBoolean ) Ġ{ ĊĠĠĠ Ġvar Ġsibling Ġ= Ġif Ġ( strict ) Ġnext Sibling Ġ?: Ġreturn Ġelse Ġthis ĊĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfunc ( sibling ) ĊĠĠĠĠĠĠĠ Ġsibling Ġ= Ġsibling . next Sibling Ġ?: Ġreturn ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ inline Ġfun ĠPsi Element . find Last Child ( condition : Ġ( Psi Element ) Ġ-> ĠBoolean ): ĠPsi Element ? Ġ{ ĊĠĠĠ Ġvar Ġchild Ġ= Ġfirst Child Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġvar Ġlast Child : ĠPsi Element ? Ġ= Ġnull ĊĊĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( condition ( child )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Child Ġ= Ġchild ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġchild Ġ= Ġchild . next Sibling Ġ?: Ġreturn Ġlast Child ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ fun Ġ< T Ġ: ĠAny > ĠSequence < T >. filter ( filter : ĠElement Filter ?, Ġcontext : ĠPsi Element ): ĠSequence < T > Ġ{ ĊĠĠĠ Ġfilter Ġ?: Ġreturn Ġthis ĊĠĠĠ Ġreturn Ġfilter Ġ{ Ġfilter . is Accept able ( it , Ġcontext ) Ġ} Ċ } Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ fun ĠStream < out ĠPsi Element >. to Resolve Results (): ĠArray < Resolve Result > Ġ= Ġmap (:: Psi Element Resolve Result ). to Typed Array () Ċ Ċ fun ĠPsi Parameter List . synchron ize ( new Params : ĠList < Psi Parameter >) Ġ{ ĊĠĠĠ ĠChange Signature Util . synchron ize List ( this , Ġnew Params , Ġ{ it . parameters . asList ()}, ĠBoolean Array ( new Params . size )) Ċ } Ċ Ċ @ get : Contract ( pure Ġ= Ġtrue ) Ċ val ĠPsi Element . constant Value : ĠAny ? ĊĠĠĠ Ġget () Ġ= ĠJava Psi Facade . getInstance ( project ). constant Evaluation Helper . compute Constant Expression ( this ) Ċ Ċ @ get : Contract ( pure Ġ= Ġtrue ) Ċ val ĠPsi Element . constant StringValue : ĠString ? ĊĠĠĠ Ġget () Ġ= Ġconstant Value Ġas ? ĠString Ċ Ċ private Ġval ĠACCESS _ MODI FI ERS Ġ= ĠlistOf ( Psi Modifier . PUBLIC , ĠPsi Modifier . PROTECT ED , ĠPsi Modifier . PRIVATE , ĠPsi Modifier . PACKAGE _ LOCAL ) Ċ Ċ fun Ġis Access Modifier (@ Modifier Constant Ġmodifier : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġmodifier Ġin ĠACCESS _ MODI FI ERS Ċ } Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ infix Ġfun ĠPsi Element . e quivalent To ( other : ĠPsi Element ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġmanager . are Elements Equivalent ( this , Ġother ) Ċ } Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ fun ĠPsi Type ?. is Er asure Equivalent To ( other : ĠPsi Type ?): ĠBoolean Ġ{ ĊĠĠĠ Ġ// ĠTODO : ĠDo Ġmore Ġchecks Ġfor Ġgener ics Ġinstead ĊĠĠĠ Ġreturn ĠType Conversion Util . er asure ( this ) Ġ== ĠType Conversion Util . er asure ( other ) Ċ } Ċ Ċ @ get : Contract ( pure Ġ= Ġtrue ) Ċ val ĠPsi Method . name And Parameter Types : ĠString ĊĠĠĠ Ġget () Ġ= Ġ"$ name (${ parameter List . parameters . join ToString (", Ġ") Ġ{ Ġit . type . present able Text Ġ} })" ĊĊ Ċ @ get : Contract ( pure Ġ= Ġtrue ) Ċ val Ġ< T Ġ: ĠPsi Element > ĠT . manip ulator : ĠElement Manip ulator < T >? ĊĠĠĠ Ġget () Ġ= ĠElement Manip ulators . get Manip ulator ( this ) Ċ Ċ @ Contract ( pure Ġ= Ġtrue ) Ċ inline Ġfun Ġ< T > ĠPsi Element . cached ( cross inline Ġcompute : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠ Ġreturn ĠCached Values Manager . get Cached Value ( this ) Ġ{ ĠCached Value Provider . Result . create ( compute (), Ġthis ) Ġ} Ċ } Ċ