package Ġpsi Ċ Ċ import Ġast miner . common . do Tra verse Pre Order Ċ import Ġast miner . common . model . Node Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . util . elementType Ċ Ċ class ĠPsi Node ( ĊĠĠĠ Ġval Ġwrapped Node : ĠPsi Element , ĊĠĠĠ Ġprivate Ġvar Ġparent : ĠPsi Node ?, ĊĠĠĠ Ġval Ġresolved TokenType : ĠString , ĊĠĠĠ Ġprivate Ġval Ġpresent able NodeType : ĠString ? Ġ= Ġnull Ċ ) Ġ: ĠNode Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġmetadata Ġ= ĠHashMap < String , ĠAny >() ĊĠĠĠ Ġprivate Ġvar Ġchildren Ġ= Ġmutable ListOf < Psi Node >() ĊĊĠĠĠ Ġoverride Ġfun Ġget Children (): ĠList < Psi Node > Ġ= Ġchildren ĊĊĠĠĠ Ġfun Ġset Children ( new Children : ĠList < Psi Node >) Ġ{ ĊĠĠĠĠĠĠĠ Ġchildren Ġ= Ġnew Children . to Mutable List () ĊĠĠĠĠĠĠĠ Ġchildren . forEach Ġ{ Ġit . setParent ( this ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Parent ( new Parent : ĠPsi Node ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġparent Ġ= Ġnew Parent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetParent (): ĠPsi Node ? Ġ= Ġparent ĊĊĠĠĠ Ġoverride Ġfun ĠgetToken (): ĠString Ġ= Ġwrapped Node . text ĊĊĠĠĠ Ġfun Ġset Normalized Token ( normalized Token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmetadata [ NORMAL IZED _ TOKEN ] Ġ= Ġnormalized Token ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Normalized Token (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnormalized Token Ġ= Ġmetadata [ NORMAL IZED _ TOKEN ] Ġas ? ĠString ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( normalized Token Ġ== Ġnull Ġ|| Ġnormalized Token Ġ== Ġ"{} " Ġ|| Ġnormalized Token Ġ== Ġ"{ | }") ĠEMPTY _ TOKEN ĊĠĠĠĠĠĠĠ Ġelse Ġnormalized Token ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetType Label (): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġpresent able NodeType Ġ?: Ġwrapped Node . elementType . toString () ĊĊĠĠĠ Ġoverride Ġfun Ġis Leaf (): ĠBoolean Ġ= Ġchildren . isEmpty () ĊĊĠĠĠ Ġoverride Ġfun Ġremove Children OfType ( type Label : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchildren . remove If Ġ{ Ġit . getType Label () Ġ== Ġtype Label Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpre Order (): ĠList < Psi Node > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Node >() ĊĠĠĠĠĠĠĠ Ġdo Tra verse Pre Order ( this , Ġresult ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . map Ġ{ Ġit Ġas ĠPsi Node Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEMPTY _ TOKEN Ġ= Ġ"< EMPTY >" ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNORMAL IZED _ TOKEN Ġ= Ġ" NORMAL IZED _ TOKEN " ĊĠĠĠ Ġ} Ċ } Ċ