/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . idea . perf Ċ Ċ import Ġcom . intellij . code Insight . daemon .* Ċ import Ġcom . intellij . code Insight . daemon . impl . Daemon Code Analyzer Impl Ċ import Ġcom . intellij . code Insight . daemon . impl . Highlight Info Ċ import Ġcom . intellij . code Insight . daemon . impl . Identifier Highlight er Pass Factory Ċ import Ġcom . intellij . ide . highlighter . Module FileType Ċ import Ġcom . intellij . ide . impl . Project Util Ċ import Ġcom . intellij . ide . startup . impl . Startup ManagerImpl Ċ import Ġcom . intellij . idea . Ide a Test Application Ċ import Ġcom . intellij . lang . External Annot ators Filter Ċ import Ġcom . intellij . lang . Language Annot ators Ċ import Ġcom . intellij . lang . Std Languages Ċ import Ġcom . intellij . lang . injection . Inject ed Language Manager Ċ import Ġcom . intellij . lang . java . Java Language Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . editor . Document Ċ import Ġcom . intellij . openapi . editor . Editor Factory Ċ import Ġcom . intellij . openapi . file Editor . File Document Manager Ċ import Ġcom . intellij . openapi . file Editor . File Editor Manager Ċ import Ġcom . intellij . openapi . file Editor . impl . File Editor ManagerImpl Ċ import Ġcom . intellij . openapi . module . Module Ċ import Ġcom . intellij . openapi . module . Module Manager Ċ import Ġcom . intellij . openapi . module . Module TypeId Ċ import Ġcom . intellij . openapi . project . D umb Service Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . project . ex . Project Manager Ex Ċ import Ġcom . intellij . openapi . project . impl . Project Impl Ċ import Ġcom . intellij . openapi . project Roots . Java Sdk Ċ import Ġcom . intellij . openapi . project Roots . Project J dk Table Ċ import Ġcom . intellij . openapi . project Roots . Sdk Ċ import Ġcom . intellij . openapi . project Roots . impl . Java Aware Project J dk Table Impl Ċ import Ġcom . intellij . openapi . roots . File Index Facade Ċ import Ġcom . intellij . openapi . roots . Project Root Manager Ċ import Ġcom . intellij . openapi . startup . Startup Manager Ċ import Ġcom . intellij . openapi . util . Comp utable Ċ import Ġcom . intellij . openapi . util . Dis poser Ċ import Ġcom . intellij . openapi . vcs . changes . Change List Manager Ċ import Ġcom . intellij . openapi . vcs . changes . Change List ManagerImpl Ċ import Ġcom . intellij . openapi . vfs . Local FileSystem Ċ import Ġcom . intellij . openapi . vfs . Virtual FileManager Ċ import Ġcom . intellij . psi . Psi Document Manager Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . Psi Manager Ċ import Ġcom . intellij . psi . impl . search . Index Pattern Builder Ċ import Ġcom . intellij . psi . xml . Xml File NS Info Provider Ċ import Ġcom . intellij . test Framework .* Ċ import Ġcom . intellij . test Framework . fixtures . impl . Code Insight TestFixture Impl Ċ import Ġcom . intellij . test Framework . property Based . Mad Testing Util Ċ import Ġcom . intellij . util . Array Util Rt Ċ import Ġcom . intellij . util . Throwable Runnable Ċ import Ġcom . intellij . util . indexing . Un indexed Files Updater Ċ import Ġcom . intellij . util . io . exists Ċ import Ġcom . intellij . xml . XmlSchema Provider Ċ import Ġorg . jetbrains . kotlin . idea . Kotlin Language Ċ import Ġorg . jetbrains . kotlin . idea . core . script . Script Definitions Manager Ċ import Ġorg . jetbrains . kotlin . idea . core . script . Script Dependencies Manager Ċ import Ġorg . jetbrains . kotlin . idea . core . script . settings . Kotlin Script ing Settings Ċ import Ġorg . jetbrains . kotlin . idea . core . util . to Psi File Ċ import Ġorg . jetbrains . kotlin . idea . framework . Kotlin Sdk Type Ċ import Ġorg . jetbrains . kotlin . idea . test . Config Library Util Ċ import Ġorg . jetbrains . kotlin . idea . test . invalidate Library Cache Ċ import Ġorg . jetbrains . plugins . gradle . service . project . Gradle Project Open Processor Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Paths Ċ Ċ abstract Ġclass ĠAbstract Performance Projects Test Ġ: ĠUseful TestCase () Ġ{ ĊĊĠĠĠ Ġ// Ġmy Project Ġis Ġnot Ġrequired Ġfor Ġall Ġpotential Ġperf Ġtest Ġcases ĊĠĠĠ Ġprotected Ġvar Ġmy Project : ĠProject ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġj dk 1 8 : ĠS dk ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmy Application : ĠIde a Test Application ĊĊĠĠĠ Ġoverride Ġfun Ġis St ress Test (): ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġis Performance Test (): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setUp () ĊĊĠĠĠĠĠĠĠ Ġmy Application Ġ= ĠIde a Test Application . getInstance () ĊĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). run Write Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj dk Table Impl Ġ= ĠJava Aware Project J dk Table Impl . getInstance Ex () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhome Path Ġ= Ġif Ġ( jdk Table Impl . internal J dk . home Directory !!. name Ġ== Ġ" jre ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Table Impl . internal J dk . home Directory !!. parent . path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Table Impl . internal J dk . home Path !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjava Sdk Ġ= ĠJava Sdk . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj dk 1 8 Ġ= Ġjava Sdk . create J dk (" 1 . 8 ", Ġhome Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinternal Ġ= Ġjava Sdk . create J dk (" IDE A Ġj dk ", Ġhome Path ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj dk Table Ġ= ĠProject J dk Table . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Table . add J dk ( jdk 1 8 , Ġtest Root Disposable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj dk Table . add J dk ( internal , Ġtest Root Disposable ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Sdk Type . setUp IfNeeded () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġwarm Up Project ( stats : ĠStats ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġinner Perf Open Project (" hello Kotlin ", Ġstats , Ġ" warm - up ") ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperf Highlight File Ġ= Ġperf Highlight File ( project , Ġ" src / Hello Main . kt ", Ġstats , Ġ" warm - up ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue (" kotlin Ġproject Ġhas Ġbeen Ġnot Ġimported Ġproperly ", Ġperf Highlight File . isNotEmpty ()) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Project ( project ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ ĠRun All ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThrowable Runnable Ġ{ Ġsuper . te ar Down () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThrowable Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Project Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDa emon Code Analyzer Settings . getInstance (). is Import Hint Enabled Ġ= Ġtrue Ġ// Ġreturn Ġdefault Ġvalue Ġto Ġavoid Ġunnecessary Ġsave ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Startup Manager . getInstance ( my Project !! ) Ġas ĠStartup ManagerImpl ). check Cle ared () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Daemon Code Analyzer . getInstance ( my Project !! ) Ġas ĠDa emon Code Analyzer Impl ). cleanup After Test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Project ( my Project !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Project Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). run () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsimple Filename ( fileName : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlast IndexOf Ġ= ĠfileName . lastIndexOf ('/') ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( lastIndexOf Ġ>= Ġ 0 ) ĠfileName . substring ( lastIndexOf Ġ+ Ġ 1 ) Ġelse ĠfileName ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġperf Open Kotlin Project ( stats : ĠStats ) Ġ= ĊĠĠĠĠĠĠĠ Ġperf Open Project (" perf Test Project ", Ġstats Ġ= Ġstats , Ġpath Ġ= Ġ".. ") ĊĊĠĠĠ Ġprotected Ġfun Ġperf Open Project ( name : ĠString , Ġstats : ĠStats , Ġpath : ĠString Ġ= Ġ" idea / testData / perf Test ") Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Project Ġ= Ġinner Perf Open Project ( name , Ġstats , Ġpath Ġ= Ġpath , Ġnote Ġ= Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġinner Perf Open Project ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġstats : ĠStats , ĊĠĠĠĠĠĠĠ Ġnote : ĠString , ĊĠĠĠĠĠĠĠ Ġpath : ĠString Ġ= Ġ" idea / testData / perf Test " ĊĠĠĠ Ġ): ĠProject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Path Ġ= ĠFile ("$ path /$ name "). canonical Path ĊĊĠĠĠĠĠĠĠ Ġval Ġwarm Up Iterations Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġiterations Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġval Ġproject Manager Ex Ġ= ĠProject Manager Ex . getInstance Ex () ĊĊĠĠĠĠĠĠĠ Ġvar Ġlast Project : ĠProject ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġcounter Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġstats . perf Test < Unit , ĠPair < Project , ĠBoolean >>( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwarm Up Iterations Ġ= Ġwarm Up Iterations , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiterations Ġ= Ġiterations , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Name Ġ= Ġ" open Ġproject ${ if Ġ( note . isNotEmpty ()) Ġ" Ġ$ note " Ġelse Ġ"" }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Path Exists Ġ= ĠPaths . get ( project Path , Ġ". idea "). exists () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġif Ġ( project Path Exists ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject Util . open Project ( project Path , Ġnull , Ġfalse ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġproject Manager Ex . load And Open Project ( project Path ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Kotlin Project ( project , Ġproject Path , Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( project Ġas ĠProject Impl ). register Component Implementation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Editor Manager :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Editor ManagerImpl :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Manager Ex . open Test Project ( project ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch All Invocation Events () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( Startup Manager . getInstance ( project ) Ġas ĠStartup ManagerImpl ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule Initial V fs Refresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Post Startup Activities () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( Change List Manager . getInstance ( project ) Ġas ĠChange List ManagerImpl ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwait Until Ref reshed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . value Ġ= ĠPair ( project , Ġproject Path Exists ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtearDown Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . value ?. let Ġ{ Ġpair Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġpair . first ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġimport Ġgradle Ġproject Ġif Ġ`$ project /. idea ` Ġis Ġpresent Ġbut Ġmodules Ġare Ġnot Ġimported ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġit Ġis Ġa Ġtemporary Ġdirty Ġhack Ġas Ġit Ġis Ġfixed Ġin Ġlatest ĠIC : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠProject Util . open Project Ġp icks Ġup Ġgradle Ġimport Ġvia Ġextension Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pair . second Ġ&& ĠModule Manager . getInstance ( project ). modules . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch All Invocation Events () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvirtual File Ġ= ĠLocal FileSystem . getInstance (). refresh And Find File By Path ( project Path ) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Document Manager . getInstance (). save All Documents () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGradle Project Open Processor . open Gradle Project ( project , Ġnull , ĠPaths . get ( virtual File . path )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch All Invocation Events () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun In Ed t And Wait Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform TestUtil . save Project ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" project Ġhas Ġto Ġhave Ġat Ġleast Ġone Ġmodule ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModule Manager . getInstance ( project ). modules . isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Project Ġ= Ġproject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVirtual FileManager . getInstance (). sync Refresh () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġclose Ġall Ġproject Ġbut Ġlast Ġ- Ġwe 're Ġgoing Ġto Ġreturn Ġand Ġuse Ġit Ġfurther ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( counter Ġ< Ġwarm Up Iterations Ġ+ Ġiterations Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Project ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġindexing ĊĠĠĠĠĠĠĠ Ġlast Project ?. let Ġ{ Ġproject Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Library Cache ( project ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCode Insight TestFixture Impl . ensure Indexes Up ToDate ( project ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch All Invocation Events () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( D umb Service . getInstance ( project )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Task ( Un indexed Files Updater ( project )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomplete Just Submitted Tasks () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch All Invocation Events () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Annot ators And Load Definitions ( project ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlast Project !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġenable Annot ators And Load Definitions () Ġ= Ġenable Annot ators And Load Definitions ( my Project !! ) ĊĊĠĠĠ Ġprotected Ġfun Ġenable Annot ators And Load Definitions ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ ĠInject ed Language Manager . getInstance ( project ) Ġ// Ġz illion Ġof ĠDom ĠSem Ġclasses ĊĠĠĠĠĠĠĠ ĠLanguage Annot ators . INSTANCE . all For Language ( Java Language . INSTANCE ) Ġ// Ġpile Ġof Ġannot ator Ġclasses Ġloads ĊĠĠĠĠĠĠĠ ĠLanguage Annot ators . INSTANCE . all For Language ( Std Languages . XML ) ĊĠĠĠĠĠĠĠ ĠLanguage Annot ators . INSTANCE . all For Language ( Kotlin Language . INSTANCE ) ĊĠĠĠĠĠĠĠ ĠDa emon Analyzer TestCase . assertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" side Ġeffect : Ġto Ġload Ġextensions ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProblem Highlight Filter . EP _ NAME . extensions . to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( Implicit Usage Provider . EP _ NAME . extensions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( XmlSchema Provider . EP _ NAME . extensions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( Xml File NS Info Provider . EP _ NAME . extensions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( External Annot ators Filter . EXTENSION _ POINT _ NAME . extensions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( Index Pattern Builder . EP _ NAME . extensions ). isNotEmpty () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġside Ġeffect : Ġto Ġload Ġscript Ġdefinitions " ĊĠĠĠĠĠĠĠ Ġval Ġscript Definitions Manager Ġ= ĠScript Definitions Manager . getInstance ( project ) ĊĠĠĠĠĠĠĠ Ġscript Definitions Manager . getAll Definitions () ĊĠĠĠĠĠĠĠ Ġdispatch All Invocation Events () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( script Definitions Manager . is Ready ()) ĊĠĠĠĠĠĠĠ ĠassertFalse ( Kotlin Script ing Settings . getInstance ( project ). is Auto Reload Enabled ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit Kotlin Project ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġproject Path : ĠString , ĊĠĠĠĠĠĠĠ Ġname : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodule Path Ġ= Ġ"$ project Path /$ name ${ Module FileType . DOT _ DEFAULT _ EXTENSION }" ĊĠĠĠĠĠĠĠ Ġval Ġproject File Ġ= ĠLocal FileSystem . getInstance (). refresh And Find File By Io File ( File ( project Path )) !! ĊĠĠĠĠĠĠĠ Ġval Ġsrc File Ġ= Ġproject File . find Child (" src ") !! ĊĠĠĠĠĠĠĠ Ġval Ġmodule Ġ= ĠApplication Manager . getApplication (). run Write Action ( Comp utable < Module > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Root Manager Ġ= ĠProject Root Manager . getInstance ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( project Root Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Sdk Ġ= Ġj dk 1 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodule Manager Ġ= ĠModule Manager . getInstance ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodule Ġ= Ġmodule Manager . new Module ( module Path , ĠModule TypeId . JAVA _ MODULE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPsi TestUtil . add Source Root ( module , Ġsrc File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodule ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠConfig Library Util . configure Kotlin Runtime And Sdk ( module , Ġj dk 1 8 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġperf Highlight File ( name : ĠString , Ġstats : ĠStats ): ĠList < Highlight Info > Ġ= ĊĠĠĠĠĠĠĠ Ġperf Highlight File ( my Project !! , Ġname , Ġstats ) ĊĊĠĠĠ Ġprotected Ġfun Ġperf Highlight File ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ ĠfileName : ĠString , ĊĠĠĠĠĠĠĠ Ġstats : ĠStats , ĊĠĠĠĠĠĠĠ Ġnote : ĠString Ġ= Ġ"" ĊĠĠĠ Ġ): ĠList < Highlight Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhighlight File Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhighlight Infos : ĠList < Highlight Info > Ġ= Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstats . perf Test < Editor File , ĠList < Highlight Info >>( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Name Ġ= Ġ" highlight ing Ġ${ if Ġ( note . isNotEmpty ()) Ġ"$ note Ġ" Ġelse Ġ"" }${ simple Filename ( fileName )} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . setUp Value Ġ= Ġopen File In Editor ( project , ĠfileName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġit . setUp Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . value Ġ= Ġhighlight File ( project , Ġfile !!. psi File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtearDown Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight Infos Ġ= Ġit . value Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommit All Documents () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Editor Manager . getInstance ( project ). close File ( it . setUp Value !!. psi File . virtual File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPsi Manager . getInstance ( project ). drop Psi Caches () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight Infos ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhighlight File ( psi File : ĠPsi File ): ĠList < Highlight Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhighlight File Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight File ( my Project !! , Ġpsi File ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhighlight File ( block : Ġ() Ġ-> ĠList < Highlight Info >): ĠList < Highlight Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġhighlight Infos : ĠList < Highlight Info > Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ ĠIdentifier Highlight er Pass Factory . do With Highlighting Enabled Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight Infos Ġ= Ġblock () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġhighlight Infos ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhighlight File ( project : ĠProject , Ġpsi File : ĠPsi File ): ĠList < Highlight Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠFile Document Manager . getInstance (). getDocument ( psi File . virtual File ) !! ĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= ĠEditor Factory . getInstance (). get Editors ( document ). first () ĊĠĠĠĠĠĠĠ ĠPsi Document Manager . getInstance ( project ). commit All Documents () ĊĠĠĠĠĠĠĠ Ġreturn ĠCode Insight TestFixture Impl . instantiate And Run ( psi File , Ġeditor , ĠArray Util Rt . EMPTY _ INT _ ARRAY , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġperf File Analysis ( name : ĠString , Ġstats : ĠStats , Ġnote : ĠString Ġ= Ġ"") Ġ= ĊĠĠĠĠĠĠĠ Ġperf File Analysis ( my Project !! , Ġname , Ġstats , Ġnote Ġ= Ġnote ) ĊĊĠĠĠ Ġprivate Ġfun Ġperf File Analysis ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ ĠfileName : ĠString , ĊĠĠĠĠĠĠĠ Ġstats : ĠStats , ĊĠĠĠĠĠĠĠ Ġnote : ĠString Ġ= Ġ"" ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= ĠDis poser . new Disposable (" perf File Analysis Ġ$ fileName ") ĊĊĠĠĠĠĠĠĠ ĠMad Testing Util . enable All Ins pe ctions ( project , Ġdis posable ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIdentifier Highlight er Pass Factory . do With Highlighting Enabled Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstats . perf Test ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Name Ġ= Ġ" file Analysis Ġ${ if Ġ( note . isNotEmpty ()) Ġ"$ note Ġ" Ġelse Ġ"" }${ simple Filename ( fileName )} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Ġ= Ġperf File Analysis SetUp ( project , ĠfileName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Ġ= Ġperf File Analysis Test ( project ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtearDown Ġ= Ġperf File Analysis Tear Down ( fileName , Ġproject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDis poser . dispose ( dis posable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġperf File Analysis SetUp ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ ĠfileName : ĠString ĊĠĠĠ Ġ): Ġ( TestData < Editor File , ĠList < Highlight Info >>) Ġ-> ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile In Editor Ġ= Ġopen File In Editor ( project , ĠfileName ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNote : ĠKotlin Ġscripts Ġrequire Ġdependencies Ġto Ġbe Ġloaded ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is AK otlin Script File ( fileName )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv File Ġ= Ġfile In Editor . psi File . virtual File ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScript Dependencies Manager . update Script Dependencies S ynchronously ( v File , Ġproject ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// enable Hints ( false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" file Analysis Ġ-> Ġ$ fileName \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setUp Value Ġ= Ġfile In Editor ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġquite Ġsimple Ġimpl Ġ- Ġgood Ġso Ġfar ĊĠĠĠ Ġfun Ġis AK otlin Script File ( fileName : ĠString ) Ġ= ĠfileName . endsWith (". k ts ") ĊĊĠĠĠ Ġprivate Ġfun Ġperf File Analysis Test ( project : ĠProject ): Ġ( TestData < Editor File , ĠList < Highlight Info >>) Ġ-> ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile In Editor Ġ= Ġit . setUp Value !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . value Ġ= Ġhighlight File ( project , Ġfile In Editor . psi File ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġperf File Analysis Tear Down ( ĊĠĠĠĠĠĠĠ ĠfileName : ĠString , ĊĠĠĠĠĠĠĠ Ġproject : ĠProject ĊĠĠĠ Ġ): Ġ( TestData < Editor File , ĠList < Highlight Info >>) Ġ-> ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommit All Documents () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println (" file Analysis Ġ<- Ġ$ fileName :\ n ${ it . value ?. join ToString ("\ n ") }\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" file Analysis Ġ<- Ġ$ fileName :\ n ${ it . value ?. size Ġ?: Ġ 0 } Ġhighlight Infos \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Editor Manager . getInstance ( project ). close File ( it . setUp Value !!. psi File . virtual File ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPsi Manager . getInstance ( project ). drop Psi Caches () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen File In Editor ( project : ĠProject , Ġname : ĠString ): ĠEditor File Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Document Manager Ġ= ĠFile Document Manager . getInstance () ĊĠĠĠĠĠĠĠ Ġval Ġfile Editor Manager Ġ= ĠFile Editor Manager . getInstance ( project ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpsi File Ġ= Ġproject File ByName ( project , Ġname ) ĊĠĠĠĠĠĠĠ Ġval Ġv File Ġ= Ġpsi File . virtual File ĊĊĠĠĠĠĠĠĠ ĠassertTrue (" file Ġ$ v File Ġis Ġnot Ġindexed Ġyet ", ĠFile Index Facade . getInstance ( project ). isIn Content ( v File )) ĊĊĠĠĠĠĠĠĠ Ġrun In Ed t And Wait Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Editor Manager . open File ( v File , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġfile Document Manager . getDocument ( v File ) !! ĊĊĠĠĠĠĠĠĠ ĠassertNotNull (" doc Ġnot Ġfound Ġfor Ġ$ v File ", ĠEditor Factory . getInstance (). get Editors ( document )) ĊĠĠĠĠĠĠĠ ĠassertTrue (" expected Ġnon Ġempty Ġdoc ", Ġdocument . text . isNotEmpty ()) ĊĊĠĠĠĠĠĠĠ ĠwaitFor All Editors Finally Loaded ( project ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠEditor File ( psi File Ġ= Ġpsi File , Ġdocument Ġ= Ġdocument ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġproject File ByName ( project : ĠProject , Ġname : ĠString ): ĠPsi File Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Manager Ġ= ĠVirtual FileManager . getInstance () ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ" file ://${ File ("${ project . basePath }/ $ name "). absolute Path }" ĊĠĠĠĠĠĠĠ Ġval Ġvirtual File Ġ= Ġfile Manager . refresh And Find File By Url ( url ) ĊĠĠĠĠĠĠĠ Ġreturn Ġvirtual File !!. to Psi File ( project ) !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠEditor File ( val Ġpsi File : ĠPsi File , Ġval Ġdocument : ĠDocument ) Ċ Ċ }