/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 1 8 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ package Ġorg . jetbrains . u ast . test . common Ċ Ċ import Ġcom . intellij . psi . Psi Code Block Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi Element Visitor Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġjunit . framework . TestCase Ċ import Ġorg . jetbrains . u ast .* ĊĊ Ċ fun ĠU File . as Identifiers (): ĠString Ġ= ĠU Element To Parent Map Ġ{ Ġit . to U Element OfType < U Identifier >() Ġ}. also Check Ġ{ ĊĠ Ġ// check Ġu Identifier Ġis Ġwalk able Ġto Ġtop Ġ( e . g . ĠIDEA - 2 0 0 3 7 2 ) ĊĠ ĠTestCase . assertEquals (" should Ġbe Ġable Ġto Ġreach Ġthe Ġfile Ġfrom Ġidentifier Ġ'${ it . text }' ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ as Identifiers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . to U Element OfType < U Identifier >() !!. getParent OfType < U File >() ĊĠ Ġ) Ċ }. visit U File AndGet Result ( this ) Ċ Ċ fun ĠU File . as Ref Names () Ġ= ĠU Element To Parent Map Ġ{ Ġit . to U Element OfType < U Reference Expression >() ?. reference Name Element Ġ} ĊĠ Ġ. visit U File AndGet Result ( this ) Ċ Ċ open Ġclass ĠU Element To Parent Map ( val Ġretrie ver : Ġ( Psi Element ) Ġ-> ĠU Element ?) Ġ: ĠPsi Element Visitor () Ġ{ ĊĊĠ Ġprivate Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠ Ġprivate Ġvar Ġlevel Ġ= Ġ 0 ĊĊĠ Ġprivate Ġval Ġadditional Checks Ġ= Ġmutable ListOf <( Psi Element ) Ġ-> ĠUnit >() ĊĊĠ Ġoverride Ġfun Ġvisit Element ( element : ĠPsi Element ) Ġ{ ĊĠĠĠ Ġval Ġu Element Ġ= Ġretrie ver ( element ) ĊĠĠĠ Ġif Ġ( u Element Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġbuilder . append (" ĠĠĠ Ġ". repeat ( level )) ĊĠĠĠĠĠ Ġbuilder . append ( u Element . source Psi Element !!. text ) ĊĠĠĠĠĠ Ġbuilder . append (" Ġ-> Ġ") ĊĠĠĠĠĠ Ġbuilder . append ( u Element . u ast Parent ?. as Log String ()) ĊĠĠĠĠĠ Ġbuilder . append (" Ġfrom Ġ") ĊĠĠĠĠĠ Ġbuilder . append ( render Source ( element )) ĊĠĠĠĠĠ Ġbuilder . append ln () ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( element Ġis ĠPsi Code Block ) Ġlevel ++ ĊĠĠĠ Ġelement . accept Children ( this ) ĊĠĠĠ Ġif Ġ( element Ġis ĠPsi Code Block ) Ġlevel -- ĊĠ Ġ} ĊĊĠ Ġprotected Ġopen Ġfun Ġrender Source ( element : ĠPsi Element ): ĠString Ġ= Ġelement . toString () ĊĊĠ Ġfun Ġalso Check ( checker : Ġ( Psi Element ) Ġ-> ĠUnit ): ĠU Element To Parent Map Ġ{ ĊĠĠĠ Ġadditional Checks . add ( checker ) ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġval Ġresult : ĠString ĊĠĠĠ Ġget () Ġ= Ġbuilder . toString () ĊĊĠ Ġopen Ġfun Ġvisit U File AndGet Result ( u File : ĠU File ): ĠString Ġ{ ĊĠĠĠ Ġ( u File . source Psi Ġas ĠPsi File ). accept ( this ) ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} Ċ Ċ } Ċ