package Ġcom . ale c strong . sql . psi . core Ċ Ċ import Ġcom . ale c strong . sql . psi . core . psi . Schema Contributor Ċ import Ġcom . ale c strong . sql . psi . core . psi . Schema Contributor Index Ċ import Ġcom . ale c strong . sql . psi . core . psi . Sql Annotated Element Ċ import Ġcom . ale c strong . sql . psi . core . psi . Sql CreateTable Stmt Ċ import Ġcom . ale c strong . sql . psi . core . psi . Sql Create View Stmt Ċ import Ġcom . ale c strong . sql . psi . core . psi . Sql Create Virtual Table Stmt Ċ import Ġcom . intellij . core . Core Application Environment Ċ import Ġcom . intellij . core . Core Project Environment Ċ import Ġcom . intellij . lang . Meta Language Ċ import Ġcom . intellij . openapi . diagnostic . Default Logger Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . extensions . Extensions Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . roots . Content Iterator Ċ import Ġcom . intellij . openapi . roots . Project File Index Ċ import Ġcom . intellij . openapi . roots . Project Root Manager Ċ import Ġcom . intellij . openapi . roots . impl . Directory Index Ċ import Ġcom . intellij . openapi . roots . impl . Directory Index Impl Ċ import Ġcom . intellij . openapi . roots . impl . Project File Index Impl Ċ import Ġcom . intellij . openapi . roots . impl . Project Root ManagerImpl Ċ import Ġcom . intellij . openapi . util . Dis poser Ċ import Ġcom . intellij . openapi . vfs . Standard FileSystem s Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . openapi . vfs . Virtual FileManager Ċ import Ġcom . intellij . openapi . vfs . Virtual FileSystem Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi Error Element Ċ import Ġcom . intellij . psi . Psi Manager Ċ import Ġcom . intellij . psi . impl . smart Pointers . Smart Pointer Anchor Provider Ċ import Ġcom . intellij . psi . search . Global Search Scope Ċ import Ġcom . intellij . psi . util . Psi Tree Util Ċ import Ġjava . io . File Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ Ċ private Ġobject ĠApplication Environment Ġ{ ĊĠ Ġprivate Ġval Ġlogger Ġ= Ġobject Ġ: ĠDefault Logger ("") Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġwarn ( message : ĠString ?, Ġt : ĠThrowable ?) Ġ= ĠUnit ĊĠĠĠ Ġoverride Ġfun Ġerror ( message : ĠAny ?) Ġ= ĠUnit ĊĠ Ġ} ĊĠ Ġvar Ġinitialized Ġ= ĠAtomic Boolean ( false ) ĊĊĠ Ġval Ġcore Application Environment : ĠCore Application Environment Ġby Ġlazy ( mode Ġ= ĠLazy Thread Safety Mode . SYN CH RON IZED ) Ġ{ ĊĠĠĠ ĠCore Application Environment ( Dis poser . new Disposable ()). apply Ġ{ ĊĠĠĠĠĠ ĠLogger . set Factory Ġ{ Ġlogger Ġ} ĊĊĠĠĠĠĠ ĠCore Application Environment . register Extension Point ( ĊĠĠĠĠĠĠĠ ĠExtensions . getRoot Area (), ĊĠĠĠĠĠĠĠ ĠMeta Language . EP _ NAME , ĠMeta Language :: class . java ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ ĠCore Application Environment . register Extension Point ( ĊĠĠĠĠĠĠĠ ĠExtensions . getRoot Area (), ĠSmart Pointer Anchor Provider . EP _ NAME , ĊĠĠĠĠĠĠĠ ĠSmart Pointer Anchor Provider :: class . java ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠSql Core Environment ( ĊĠ Ġsource Folders : ĠList < File >, ĊĠ Ġdependencies : ĠList < File > Ċ ) Ġ{ ĊĠ Ġprivate Ġval Ġfile Index : ĠCore File Index ĊĊĠ Ġprotected Ġval Ġproject Environment Ġ= ĠCore Project Environment ( ĊĠĠĠ ĠApplication Environment . core Application Environment . parent Disposable , ĊĠĠĠ ĠApplication Environment . core Application Environment ĊĠ Ġ) ĊĊĠ Ġprotected Ġval Ġlocal FileSystem : ĠVirtual FileSystem ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġlocal FileSystem Ġ= ĠVirtual FileManager . getInstance (). get FileSystem ( ĊĠĠĠĠĠ ĠStandard FileSystem s . FILE _ PROTOCOL ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġproject Environment . register Project Component ( ĊĠĠĠĠĠ ĠProject Root Manager :: class . java , ĊĠĠĠĠĠ ĠProject Root ManagerImpl ( project Environment . project ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġproject Environment . project . register Service ( ĊĠĠĠĠĠ ĠDirectory Index :: class . java , ĊĠĠĠĠĠ ĠDirectory Index Impl ( project Environment . project ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfile Index Ġ= ĠCore File Index ( source Folders , Ġlocal FileSystem , Ġproject Environment . project ) ĊĠĠĠ Ġproject Environment . project . register Service ( Project File Index :: class . java , Ġfile Index ) ĊĊĠĠĠ Ġval Ġcontributor Index Ġ= ĠCore File Index ( source Folders Ġ+ Ġdependencies , Ġlocal FileSystem , Ġproject Environment . project ) ĊĠĠĠ Ġproject Environment . project . p ico Container ĊĠĠĠĠĠ Ġ. register Component Instance ( ĊĠĠĠĠĠĠĠ ĠSchema Contributor Index :: class . java . name , ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠSchema Contributor Index Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcontributors Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= ĠPsi Manager . getInstance ( project Environment . project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġlinked Map Of < Virtual File , ĠCollection < Schema Contributor >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontributor Index . iterate Content Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ file ] Ġ= Ġ( manager . find File ( file ) Ġas ? ĠSql File Base )?. sql Stmt List ?. stmt List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map NotNull Ġ{ Ġit . firstChild Ġas ? ĠSchema Contributor Ġ} Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ iterate Content Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetKey () Ġ= ĠSchema Contributor Index . KEY ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope : ĠGlobal Search Scope ĊĠĠĠĠĠĠĠĠĠ Ġ): ĠCollection < Schema Contributor > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontributors . filter Keys Ġ{ Ġscope . contains ( it ) Ġ}. flatMap Ġ{ Ġ(_, Ġvalues ) Ġ-> Ġvalues Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġfun Ġannotate ( ĊĠĠĠ Ġannotation Holder : ĠSql Annotation Holder , ĊĠĠĠ Ġextra Annot ators : ĠCollection < Sql Compiler Annot ator > Ġ= Ġempty List () ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġval Ġother Failures Ġ= Ġmutable ListOf < () Ġ-> ĠUnit >() ĊĠĠĠ Ġval Ġmy Holder Ġ= Ġobject Ġ: ĠSql Annotation Holder Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġcreate Error Annotation ( element : ĠPsi Element , Ġs : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Psi Tree Util . get Non Strict Parent OfType ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement , ĠSql CreateTable Stmt :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSql Create Virtual Table Stmt :: class . java , ĠSql Create View Stmt :: class . java ĊĠĠĠĠĠĠĠĠĠ Ġ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġannotation Holder . create Error Annotation ( element , Ġs ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġother Failures . add Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Holder . create Error Annotation ( element , Ġs ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfor Source Files Ġ{ ĊĠĠĠĠĠ ĠPsi Tree Util . find Child OfType ( it , ĠPsi Error Element :: class . java )?. let Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠ Ġmy Holder . create Error Annotation ( error , Ġerror . error Description ) ĊĠĠĠĠĠĠĠ Ġreturn @ for Source Files ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġit . annotate Re cursively ( my Holder , Ġextra Annot ators ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġother Failures . forEach Ġ{ Ġit . invoke () Ġ} ĊĠ Ġ} ĊĊĠ Ġopen Ġfun Ġfor Source Files ( action : Ġ( Sql File Base ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġpsi Manager Ġ= ĠPsi Manager . getInstance ( project Environment . project ) ĊĠĠĠ Ġfile Index . iterate Content Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠ Ġval Ġpsi File Ġ= Ġpsi Manager . find File ( file ) Ġas ? ĠSql File Base Ġ?: Ġreturn @ iterate Content Ġtrue ĊĠĠĠĠĠ Ġaction ( psi File ) ĊĠĠĠĠĠ Ġreturn @ iterate Content Ġtrue ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠPsi Element . annotate Re cursively ( ĊĠĠĠ Ġannotation Holder : ĠSql Annotation Holder , ĊĠĠĠ Ġextra Annot ators : ĠCollection < Sql Compiler Annot ator > ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġif Ġ( this Ġis ĠSql Annotated Element ) Ġtry Ġ{ ĊĠĠĠĠĠ Ġannotate ( annotation Holder ) ĊĠĠĠĠĠ Ġextra Annot ators . forEach Ġ{ Ġit . annotate ( this , Ġannotation Holder ) Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠAnnotation Exception ) Ġ{ ĊĠĠĠĠĠ Ġannotation Holder . create Error Annotation ( e . element Ġ?: Ġthis , Ġe . msg ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ| Failed Ġto Ġcompile Ġ${ this . containing File . virtual File . path }:${ this . node . start Offset }: ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ${ this . text } ĊĠĠĠĠĠĠĠ Ġ| """. trim Margin (), ĊĠĠĠĠĠĠĠ Ġe ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġchildren . forEach Ġ{ Ġit . annotate Re cursively ( annotation Holder , Ġextra Annot ators ) Ġ} ĊĠ Ġ} ĊĊĠ Ġprotected Ġfun Ġinitialize Application ( block : ĠCore Application Environment . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġif Ġ(! Application Environment . initialized . get AndSet ( true )) Ġ{ ĊĠĠĠĠĠ ĠApplication Environment . core Application Environment . block () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ fun Ġinterface ĠSql Compiler Annot ator Ġ{ ĊĠ Ġfun Ġannotate ( element : ĠPsi Element , Ġannotation Holder : ĠSql Annotation Holder ) Ċ } Ċ Ċ private Ġclass ĠCore File Index ( ĊĠ Ġval Ġsource Folders : ĠList < File >, ĊĠ Ġprivate Ġval Ġlocal FileSystem : ĠVirtual FileSystem , ĊĠ Ġproject : ĠProject Ċ ) Ġ: ĠProject File Index Impl ( project ) Ġ{ ĊĠ Ġoverride Ġfun Ġiterate Content ( iterator : ĠContent Iterator ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġsource Folders . all Ġ{ ĊĠĠĠĠĠ Ġval Ġfile Ġ= Ġlocal FileSystem . find File By Path ( it . absolute Path ) ĊĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠNullPointerException (" File Ġ${ it . absolute Path } Ġnot Ġfound ") ĊĠĠĠĠĠ Ġiterate Content Under Directory ( file , Ġiterator ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġiterate Content Under Directory ( file : ĠVirtual File , Ġiterator : ĠContent Iterator ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( file . isDirectory ) Ġ{ ĊĠĠĠĠĠ Ġfile . children . forEach Ġ{ Ġif Ġ(! iterate Content Under Directory ( it , Ġiterator )) Ġreturn Ġfalse Ġ} ĊĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġiterator . process File ( file ) ĊĠ Ġ} Ċ } Ċ