// Ġ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 Element Ċ import Ġcom . intellij . psi . Psi Element Visitor Ċ import Ġcom . intellij . test Framework . Platform TestUtil Ċ import Ġcom . intellij . test Framework . fixtures . Light Code Insight Fixture TestCase Ċ import Ġjunit . framework . TestCase Ċ import Ġorg . jetbrains . u ast . U Qualified Reference Expression Ċ import Ġorg . jetbrains . u ast . to U Element Ċ import Ġorg . junit . Test Ċ Ċ class ĠJava U ast Performance Test Ġ: ĠLight Code Insight Fixture TestCase () Ġ{ ĊĊĠ Ġclass ĠEach Psi ToU ast Walker Ġ: ĠPsi Element Visitor () Ġ{ ĊĠĠĠ Ġvar Ġtotal Count Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġidentity Checksum Ġ= Ġ 0 ĊĠĠĠ Ġoverride Ġfun Ġvisit Element ( element : ĠPsi Element ) Ġ{ ĊĠĠĠĠĠ Ġval Ġu Element Ġ= Ġelement . to U Element () ĊĠĠĠĠĠ Ġif Ġ( u Element Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtotal Count ++ ĊĠĠĠĠĠĠĠ Ġidentity Checksum Ġ= Ġ 3 1 Ġ* Ġidentity Checksum Ġ+ ĠSystem . identity HashCode ( u Element ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġwhen Ġ( u Element ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠU Qualified Reference Expression Ġ-> Ġu Element . receiver Ġ// Ġforce Ġlazy Ġevaluation ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġelement . accept Children ( this ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Very Long Qualified Reference Expression () Ġ{ ĊĠĠĠ Ġval Ġexpected U Elements Count Ġ= Ġ 4 0 1 9 ĊĠĠĠ Ġval Ġclazz Ġ= Ġmy Fixture . addClass (""" ĊĠĠĠĠĠ Ġclass ĠMy Class Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠString Ġfoo (){ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew Ġjava . lang . StringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ ( 1 .. 1 0 0 0 ). join ToString ("\ n ") Ġ{ Ġ". append (\" $ it \") " Ġ}} ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString (); ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠ Ġval Ġnon Cached Walk Ġ= ĠEach Psi ToU ast Walker (). apply Ġ{ ĊĠĠĠĠĠ ĠPlatform TestUtil . start Performance Test (" convert Ġeach Ġelement Ġto Ġu ast Ġfirst Ġtime ", Ġ 2 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclazz . accept ( this ) ĊĠĠĠĠĠĠĠ ĠTestCase . assertEquals ( expected U Elements Count , Ġtotal Count ) ĊĠĠĠĠĠ Ġ}. attempts ( 1 ). assert Timing () ĊĠĠĠ Ġ} ĊĊĠ Ġ} ĊĊ Ċ }