// ĠCopyright Ġ 2 0 0 0 - 2 0 1 7 Ġ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 . java Ċ Ċ import Ġcom . intellij . psi . Psi Declaration Statement Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi Element Factory Ċ import Ġcom . intellij . psi . Psi Expression List Statement Ċ import Ġcom . intellij . psi . util . Psi Tree Util Ċ import Ġjunit . framework . TestCase Ċ import Ġorg . jetbrains . u ast . U File Ċ import Ġorg . jetbrains . u ast . to U Element Ċ import Ġorg . junit . Test Ċ Ċ class ĠDet ached Java U ast Test Ġ: ĠAbstract Java U ast Test () Ġ{ ĊĊĠ Ġprivate Ġval Ġdet achers Ġ= Ġmap Of ( ĊĠĠĠ ĠPsi Declaration Statement :: class . java Ġthrough ĠPsi Element Factory :: createStatement FromText , ĊĠĠĠ ĠPsi Expression List Statement :: class . java Ġthrough ĠPsi Element Factory :: createStatement FromText ĊĠ Ġ) ĊĊĠ Ġoverride Ġfun Ġcheck ( test Name : ĠString , Ġfile : ĠU File ) Ġ{ ĊĠĠĠ Ġval Ġdetach able Psi Elements Ġ= ĠPsi Tree Util . collect Elements OfType ( file . source Psi , Ġ* detach ers . keys . to Typed Array ()) ĊĠĠĠĠĠ Ġ. map Ġ{ Ġpsi Element Ġ-> Ġpsi Element Ġto Ġdet achers . entries . first Ġ{ Ġit . key . isAssignableFrom ( psi Element . java Class ) Ġ}. value Ġ} ĊĊĠĠĠ Ġfor Ġ(( element , Ġdet acher ) Ġin Ġdetach able Psi Elements ) Ġ{ ĊĠĠĠĠĠ Ġval Ġattached U Element Ġ= Ġelement . to U Element () Ġ?: Ġthrow ĠAssertionError ( ĊĠĠĠĠĠĠĠ Ġ" U Element Ġshould Ġbe Ġdefined Ġfor Ġattached Ġelement Ġ$ element Ġwith Ġtext Ġ'${ element . text }' Ġin Ġ$ test Name ") ĊĠĠĠĠĠ Ġval Ġdet ached Psi Element Ġ= Ġdet acher . invoke ( element Factory , Ġelement . text , Ġelement ) ĊĠĠĠĠĠ Ġval Ġdet ached U Element Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġdet ached Psi Element . to U Element () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" failed Ġto Ġconvert Ġ'${ det ached Psi Element . text }' Ġto ĠU ast Ġin Ġ$ test Name ", Ġe ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠTestCase . assertNotNull ( ĊĠĠĠĠĠĠĠ Ġ" U Element (${ attached U Element . java Class }) Ġshould Ġbe Ġdefined Ġfor Ġdet ached Ġelement Ġwith Ġtext Ġ'${ det ached Psi Element . text }' Ġin Ġ$ test Name \"", ĊĠĠĠĠĠĠĠ Ġdet ached U Element ) ĊĠĠĠ Ġ} ĊĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun ĠtestData Class () Ġ= Ġdo Test (" Data Class / Data Class . java ") ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Enum Switch () Ġ= Ġdo Test (" Simple / Enum Switch . java ") ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Local Class () Ġ= Ġdo Test (" Simple / Local Class . java ") ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Return X () Ġ= Ġdo Test (" Simple / Return X . java ") ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest For () Ġ= Ġdo Test (" Simple / For . java ") ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Variable Annotation () Ġ= Ġdo Test (" Simple / Variable Annotation . java ") Ċ Ċ } Ċ Ċ private Ġin fix Ġfun ĠClass < out ĠPsi Element >. through ( det acher : Ġ( Psi Element Factory , ĠString , ĠPsi Element ) Ġ-> ĠPsi Element ) ĊĠ Ġ: ĠPair < Class < Psi Element >, Ġ( Psi Element Factory , ĠString , ĠPsi Element ) Ġ-> ĠPsi Element > Ġ= ĊĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") Ġ( this Ġas ĠClass < Psi Element >) Ġto Ġdet acher Ċ