package Ġorg . jetbrains . kotlin . ui . editor s . code assist ĊĊ Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi . Psi Comment Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi Error Element Ċ import Ġcom . intellij . psi . Psi WhiteSpace Ċ import Ġcom . intellij . psi . filters . Class Filter Ċ import Ġcom . intellij . psi . filters . Element Filter Ċ import Ġcom . intellij . psi . filters . Not Filter Ċ import Ġcom . intellij . psi . filters . Or Filter Ċ import Ġcom . intellij . psi . filters . position . Position Element Filter Ċ import Ġcom . intellij . psi . tree . I ElementType Ċ import Ġcom . intellij . psi . tree . Token Set Ċ import Ġcom . intellij . psi . util . Psi Tree Util Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Kotlin Target Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Kotlin Target . AN NOT ATION _ CLASS Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Kotlin Target . CLASS _ ONLY Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Kotlin Target . ENUM _ CLASS Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Kotlin Target . ENUM _ ENTRY Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Kotlin Target . FUNCTION Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Kotlin Target . INTERFACE Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Kotlin Target . MEMBER _ FUNCTION Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Kotlin Target . MEMBER _ PROPERTY Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Kotlin Target . OBJECT Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Kotlin Target . PROPERTY Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Kotlin Target . TOP _ LEVEL _ FUNCTION Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Kotlin Target . TOP _ LEVEL _ PROPERTY Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Kotlin Target . TYPE _ PARAMETER Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Kotlin Target . VALUE _ PARAMETER Ċ import Ġorg . jetbrains . kotlin . lexer . Kt Keyword Token Ċ import Ġorg . jetbrains . kotlin . lexer . Kt Modifier Keyword Token Ċ import Ġorg . jetbrains . kotlin . lexer . Kt Tokens Ċ import Ġorg . jetbrains . kotlin . lexer . Kt Tokens .* Ċ import Ġorg . jetbrains . kotlin . name . Name Ċ import Ġorg . jetbrains . kotlin . psi . Kt Block Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Catch Clause Ċ import Ġorg . jetbrains . kotlin . psi . Kt Class Ċ import Ġorg . jetbrains . kotlin . psi . Kt Class Body Ċ import Ġorg . jetbrains . kotlin . psi . Kt Class Or Object Ċ import Ġorg . jetbrains . kotlin . psi . Kt Constant Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Declaration Ċ import Ġorg . jetbrains . kotlin . psi . Kt Declaration With Body Ċ import Ġorg . jetbrains . kotlin . psi . Kt Declaration With Initializer Ċ import Ġorg . jetbrains . kotlin . psi . Kt Element Ċ import Ġorg . jetbrains . kotlin . psi . Kt Enum Entry Ċ import Ġorg . jetbrains . kotlin . psi . Kt Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt File Ċ import Ġorg . jetbrains . kotlin . psi . Kt Labeled Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Literal String Template Entry Ċ import Ġorg . jetbrains . kotlin . psi . Kt Loop Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Modifier List Ċ import Ġorg . jetbrains . kotlin . psi . Kt Object Declaration Ċ import Ġorg . jetbrains . kotlin . psi . Kt Parameter Ċ import Ġorg . jetbrains . kotlin . psi . Kt Primary Constructor Ċ import Ġorg . jetbrains . kotlin . psi . Kt Psi Factory Ċ import Ġorg . jetbrains . kotlin . psi . Kt Psi Util Ċ import Ġorg . jetbrains . kotlin . psi . Kt Try Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Type Parameter Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . next Leaf Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . parent sWith Self Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . prev Leaf Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . prev Leaf s Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . siblings Ċ import Ġorg . jetbrains . kotlin . renderer . render Ċ import Ġorg . jetbrains . kotlin . resolve . Modifier Checker Core Ċ import Ġjava . util . ArrayList Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġorg . jetbrains . kotlin . Kt Node Types Ċ import Ġorg . jetbrains . kotlin . config . Language Version Settings Impl Ċ Ċ open Ġclass ĠKeyword Lookup Object Ċ Ċ // ĠThis Ġcode Ġis Ġmostly Ġcopied Ġfrom ĠIde a Ġplugin Ċ object ĠKeyword Completion Ġ{ ĊĠĠĠ Ġprivate Ġval ĠALL _ KEYWORD S Ġ= Ġ( KEYWORD S . types Ġ+ ĠS OFT _ KEYWORD S . types ). map Ġ{ Ġit Ġas ĠK t Keyword Token Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠKEY WORDS _ TO _ IGNORE _ PREFIX Ġ= ĠToken Set . create ( OVERRIDE _ KEYWORD Ġ/* Ġit 's Ġneeded Ġto Ġcomplete Ġoverrides Ġthat Ġshould Ġbe Ġwork Ġby Ġmember Ġname Ġtoo Ġ*/) ĊĊĠĠĠ Ġprivate Ġval ĠCOMP O UND _ KEYWORD S Ġ= Ġmap Of < Kt Keyword Token , ĠK t Keyword Token >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCOMP AN ION _ KEYWORD Ġto ĠOBJECT _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEN UM _ KEYWORD Ġto ĠCLASS _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAN NOT ATION _ KEYWORD Ġto ĠCLASS _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSE AL ED _ KEYWORD Ġto ĠCLASS _ KEYWORD , Ċĉĉ ĉ LATE INIT _ KEYWORD Ġto ĠVAR _ KEYWORD ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval ĠKEY WORD _ CON STRUCT S Ġ= Ġmap Of < Kt Keyword Token , ĠString >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIF _ KEYWORD Ġto Ġ" fun Ġfoo () Ġ{ Ġif Ġ( caret )", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWH ILE _ KEYWORD Ġto Ġ" fun Ġfoo () Ġ{ Ġwhile ( caret )", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFOR _ KEYWORD Ġto Ġ" fun Ġfoo () Ġ{ Ġfor ( caret )", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTR Y _ KEYWORD Ġto Ġ" fun Ġfoo () Ġ{ Ġtry Ġ{\ nc aret \ n }", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCATCH _ KEYWORD Ġto Ġ" fun Ġfoo () Ġ{ Ġtry Ġ{} Ġcatch Ġ( caret )", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFIN ALLY _ KEYWORD Ġto Ġ" fun Ġfoo () Ġ{ Ġtry Ġ{\ n }\ n finally {\ nc aret \ n }", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDO _ KEYWORD Ġto Ġ" fun Ġfoo () Ġ{ Ġdo Ġ{\ nc aret \ n }", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINIT _ KEYWORD Ġto Ġ" class ĠC Ġ{ Ġinit Ġ{\ nc aret \ n }", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCON STRUCTOR _ KEYWORD Ġto Ġ" class ĠC Ġ{ Ġconstructor ( caret )", Ċĉĉ ĉ COMP AN ION _ KEYWORD Ġto Ġ" class ĠC Ġ{ Ġcompanion Ġobject Ġ{\ nc aret \ n }" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval ĠNO _ SPACE _ AFTER Ġ= ĠlistOf ( THIS _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSUP ER _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNULL _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTRUE _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFALSE _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBRE AK _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCONTINUE _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠELSE _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWHEN _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFILE _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD Y NAMIC _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGET _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSET _ KEYWORD ). map Ġ{ Ġit . value Ġ} Ġ+ Ġ" comp anion Ġobject " ĊĊĠĠĠ Ġfun Ġcomplete ( position : ĠPsi Element , Ġprefix : ĠString , Ġis Jvm Module : ĠBoolean , Ġconsumer : Ġ( String ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! GENERAL _ FILTER . is Accept able ( position , Ġposition )) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġparser Filter Ġ= Ġbuild Filter ( position ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( keyword Token Ġin ĠALL _ KEYWORD S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġkeyword Ġ= Ġkeyword Token . value ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Keyword Ġ= ĠCOMP O UND _ KEYWORD S [ keyword Token ] Ċĉĉ ĉ var Ġapplicable As Compound Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Keyword Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠPsi Element . is Space () Ġ= Ġthis Ġis ĠPsi WhiteSpace Ġ&& Ġ'\ n ' Ġ! in ĠgetText () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnext Ġ= Ġposition . next Leaf Ġ{ Ġ!( it . is Space () Ġ|| Ġit . text Ġ== Ġ"$ ") Ġ} ?. text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Ġ!= Ġnull Ġ&& Ġnext . startsWith ("$ ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Ġ= Ġnext . substring ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Ġ!= Ġnext Keyword . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeyword Ġ+= Ġ" Ġ" Ġ+ Ġnext Keyword . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplicable As Compound Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( keyword Token Ġ== ĠD Y NAMIC _ KEYWORD Ġ&& Ġis Jvm Module ) Ġcontinue Ġ// Ġnot Ġsupported Ġfor ĠJVM ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġuse Ġsimple Ġmatching Ġby Ġprefix , Ġnot Ġprefix Ġmatcher Ġfrom Ġcompletion ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! keyword . startsWith ( prefix ) Ġ&& Ġkeyword Token Ġ! in ĠKEY WORDS _ TO _ IGNORE _ PREFIX ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! parser Filter ( keyword Token )) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstruct Text Ġ= ĠKEY WORD _ CON STRUCT S [ keyword Token ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( construct Text Ġ!= Ġnull Ġ&& Ġ! applic able As Compound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġkeyword ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumer ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġelement Ġ= Ġkeyword ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumer ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠGENER AL _ FILTER Ġ= ĠNot Filter ( Or Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComment Filter (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent Filter ( Class Filter ( Kt Literal String Template Entry :: class . java )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent Filter ( Class Filter ( Kt Constant Expression :: class . java )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLeft Ne ighbour ( Text Filter (". ")), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLeft Ne ighbour ( Text Filter (" ?. ")) ĊĠĠĠ Ġ)) ĊĊĠĠĠ Ġprivate Ġclass ĠComment Filter () Ġ: ĠElement Filter Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Accept able ( element : ĠAny ?, Ġcontext : ĠPsi Element ?) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġ( element Ġis ĠPsi Element ) Ġ&& ĠK t Psi Util . isIn Comment ( element ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Class Accept able ( hint Class : ĠClass < out ĠAny ?> ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠParent Filter ( filter : ĠElement Filter ) Ġ: ĠPosition Element Filter () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Filter ( filter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Accept able ( element : ĠAny ?, Ġcontext : ĠPsi Element ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġ( element Ġas ? ĠPsi Element )?. parent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparent Ġ!= Ġnull Ġ&& Ġ( filter ?. is Accept able ( parent , Ġcontext ) Ġ?: Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Filter ( position : ĠPsi Element ): Ġ( Kt Keyword Token ) Ġ-> ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Ġ= Ġposition . parent ĊĠĠĠĠĠĠĠ Ġvar Ġprev Parent Ġ= Ġposition ĊĠĠĠĠĠĠĠ Ġwhile Ġ( parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( parent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Block Expression Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprefix Text Ġ= Ġ" fun Ġfoo () Ġ{ Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev Parent Ġis ĠK t Expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġthat Ġwe Ġare Ġright Ġafter Ġa Ġtry - expression Ġwithout Ġfinally - block Ġor Ġafter Ġif - expression Ġwithout Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Leaf Ġ= Ġprev Parent . prev Leaf Ġ{ Ġit Ġ! is ĠPsi WhiteSpace Ġ&& Ġit Ġ! is ĠPsi Comment Ġ&& Ġit Ġ! is ĠPsi Error Element Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev Leaf Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis After Then Ġ= Ġprev Leaf . go Up While Is Last Child (). any Ġ{ Ġit . node . elementType Ġ== ĠK t Node Types . THEN Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis After Try Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis After Catch Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev Leaf . node . elementType Ġ== ĠK t Tokens . R BRACE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Parent Ġ= Ġ( prev Leaf . parent Ġas ? ĠK t Block Expression )?. parent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( block Parent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Try Expression Ġ-> Ġis After Try Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Catch Clause Ġ-> Ġ{ Ġis After Try Ġ= Ġtrue ; Ġis After Catch Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is After Then ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is After Try ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Text Ġ+= Ġ" if Ġ( a )\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Text Ġ+= Ġ" if Ġ( a ) Ġ{}\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is After Try ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Text Ġ+= Ġ" try Ġ{}\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is After Catch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Text Ġ+= Ġ" catch Ġ( e : ĠE ) Ġ{}\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuild Filter WithContext ( prefix Text , Ġprev Parent , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Expression Ġ= Ġprev Parent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. siblings ( forward Ġ= Ġfalse , Ġwith It self Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Is Instance OrNull < Kt Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Expression Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext After Expression Ġ= Ġlast Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. siblings ( forward Ġ= Ġtrue , Ġwith It self Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take While Ġ{ Ġit Ġ!= Ġprev Parent Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString Ġ{ Ġit . text Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuild Filter WithContext ( prefix Text Ġ+ Ġ" x " Ġ+ Ġcontext After Expression , Ġprev Parent , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Declaration With Initializer Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitializer Ġ= Ġparent . initializer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev Parent Ġ== Ġinitializer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuild Filter WithContext (" val Ġv Ġ= Ġ", Ġinitializer , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Parameter Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Ġ= Ġparent . defaultValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev Parent Ġ== Ġdefault ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuild Filter WithContext (" val Ġv Ġ= Ġ", Ġdefault , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Declaration Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscope Ġ= Ġparent . parent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( scope ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Class Or Object Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( parent Ġis ĠK t Primary Constructor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Filter With Reduc ed Context (" class ĠX Ġ", Ġparent , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Filter With Reduc ed Context (" class ĠX Ġ{ Ġ", Ġparent , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t File Ġ-> Ġreturn Ġbuild Filter With Reduc ed Context ("", Ġparent , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Parent Ġ= Ġparent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġparent . parent ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Filter With Reduc ed Context ("", Ġnull , Ġposition ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPsi Element . go Up While Is Last Child (): ĠSequence < Psi Element > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgenerate Sequence ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠPsi File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( it Ġ!= Ġit . parent . last Child ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . parent ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Filter WithContext ( prefix Text : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Element : ĠPsi Element , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠPsi Element ): Ġ( Kt Keyword Token ) Ġ-> ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġposition . getStart Offset In Ancestor ( context Element ) ĊĠĠĠĠĠĠĠ Ġval Ġtruncated Context Ġ= Ġcontext Element . text !!. substring ( 0 , Ġoffset ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Filter By Text ( prefix Text Ġ+ Ġtruncated Context , Ġcontext Element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Filter With Reduc ed Context ( prefix Text : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Element : ĠPsi Element ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠPsi Element ): Ġ( Kt Keyword Token ) Ġ-> ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġbuild Reduc ed Context Before ( builder , Ġposition , Ġcontext Element ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Filter By Text ( prefix Text Ġ+ Ġbuilder . toString (), Ġposition ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Files With Keyword Application ( keyword TokenType : ĠK t Keyword Token , Ġprefix Text : ĠString , Ġpsi Factory : ĠK t Psi Factory ): ĠSequence < Kt File > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcompute Keyword Applications ( prefix Text , Ġkeyword TokenType ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġapplication Ġ-> Ġpsi Factory . create File ( prefix Text Ġ+ Ġapplication ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcompute Keyword Applications ( prefix Text : ĠString , Ġkeyword : ĠK t Keyword Token ): ĠSequence < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( keyword ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS US PEND _ KEYWORD Ġ-> Ġsequence Of (" suspend Ġ() Ġ-> ĠUnit >", Ġ" suspend ĠX ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prefix Text . endsWith ("@ ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Of ( keyword . value Ġ+ Ġ": X ĠY . Z ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Of ( keyword . value Ġ+ Ġ" ĠX ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Filter By Text ( prefix Text : ĠString , Ġposition : ĠPsi Element ): Ġ( Kt Keyword Token ) Ġ-> ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpsi Factory Ġ= ĠK t Psi Factory ( position . project ) ĊĠĠĠĠĠĠĠ Ġfun Ġis Keyword Correct ly Applied ( keyword TokenType : ĠK t Keyword Token , Ġfile : ĠK t File ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement At Ġ= Ġfile . findElement At ( prefix Text . length ) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! elementAt . node !!. elementType . matches Keyword ( keyword TokenType ) Ġ-> Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement At . get Non Strict Parent OfType < Psi Error Element >() Ġ!= Ġnull Ġ-> Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Element Before ( elementAt ) Ġ-> Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeyword TokenType Ġ! is ĠK t Modifier Keyword Token Ġ-> Ġreturn Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( elementAt . parent Ġ! is ĠK t Modifier List ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġelement At . parent . parent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpossible Targets Ġ= Ġwhen Ġ( container ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Parameter Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( container . owner Function Ġis ĠK t Primary Constructor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( VALUE _ PARAMETER , ĠMEMBER _ PROPERTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( VALUE _ PARAMETER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Type Parameter Ġ-> ĠlistOf ( TYPE _ PARAMETER ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Enum Entry Ġ-> ĠlistOf ( ENUM _ ENTRY ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Class Body Ġ-> ĠlistOf ( CLASS _ ONLY , ĠINTER FACE , ĠOBJECT , ĠEN UM _ CLASS , ĠAN NOT ATION _ CLASS , ĠMEMBER _ FUNCTION , ĠMEMBER _ PROPERTY , ĠFUNCTION , ĠPROPERTY ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t File Ġ-> ĠlistOf ( CLASS _ ONLY , ĠINTER FACE , ĠOBJECT , ĠEN UM _ CLASS , ĠAN NOT ATION _ CLASS , ĠTOP _ LEVEL _ FUNCTION , ĠTOP _ LEVEL _ PROPERTY , ĠFUNCTION , ĠPROPERTY ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodifier Targets Ġ= ĠModifier Checker Core . possible Target Map [ keyword TokenType ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( modifier Targets Ġ!= Ġnull Ġ&& Ġpossible Targets Ġ!= Ġnull Ġ&& Ġpossible Targets . none Ġ{ Ġit Ġin Ġmodifier Targets Ġ}) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġowner Declaration Ġ= Ġcontainer ?. getParent OfType < Kt Declaration >( strict Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Target Ġ= Ġwhen Ġ( owner Declaration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> ĠKotlin Target . FILE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Class Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Declaration . is Interface () Ġ-> ĠKotlin Target . INTERFACE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Declaration . is Enum () Ġ-> ĠKotlin Target . ENUM _ CLASS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Declaration . is Annotation () Ġ-> ĠKotlin Target . AN NOT ATION _ CLASS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠKotlin Target . CLASS _ ONLY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Object Declaration Ġ-> Ġif Ġ( owner Declaration . isObject Literal ()) ĠKotlin Target . OBJECT _ LITERAL Ġelse ĠKotlin Target . OBJECT ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠModifier Checker Core . is Possible Parent Target ( keyword TokenType , Ġparent Target , ĠLanguage Version Settings Impl . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfun ( keyword TokenType ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= Ġbuild Files With Keyword Application ( keyword TokenType , Ġprefix Text , Ġpsi Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfiles . any Ġ{ Ġfile Ġ-> Ġis Keyword Correct ly Applied ( keyword TokenType , Ġfile ); Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Error Element Before ( token : ĠPsi Element ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( leaf Ġin Ġtoken . prev Leaf s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( leaf Ġis ĠPsi WhiteSpace Ġ|| Ġleaf Ġis ĠPsi Comment ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( leaf . parent sWith Self . any Ġ{ Ġit Ġis ĠPsi Error Element Ġ}) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( leaf . text Length Ġ!= Ġ 0 ) Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠI ElementType . matches Keyword ( keyword Type : ĠK t Keyword Token ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyword Type Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNOT _ IN Ġ-> Ġkeyword Type Ġ== ĠIN _ KEYWORD ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNOT _ IS Ġ-> Ġkeyword Type Ġ== ĠIS _ KEYWORD ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġbuilds Ġtext Ġwithin Ġscope Ġ( or Ġfrom Ġthe Ġstart Ġof Ġthe Ġfile ) Ġbefore Ġposition Ġelement Ġexcluding Ġalmost Ġall Ġdeclarations ĊĠĠĠ Ġprivate Ġfun Ġbuild Reduc ed Context Before ( builder : ĠStringBuilder , Ġposition : ĠPsi Element , Ġscope : ĠPsi Element ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== Ġscope ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġposition . parent Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġbuild Reduc ed Context Before ( builder , Ġparent , Ġscope ) ĊĊĠĠĠĠĠĠĠ Ġval Ġprev Declaration Ġ= Ġposition . siblings ( forward Ġ= Ġfalse , Ġwith It self Ġ= Ġfalse ). first OrNull Ġ{ Ġit Ġis ĠK t Declaration Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġchild Ġ= Ġparent . firstChild ĊĠĠĠĠĠĠĠ Ġwhile Ġ( child Ġ!= Ġposition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠK t Declaration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġ== Ġprev Declaration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append Reduc ed Text ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( child !!. text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Ġ= Ġchild . next Sibling ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠStringBuilder . append Reduc ed Text ( element : ĠPsi Element ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġchild Ġ= Ġelement . firstChild ĊĠĠĠĠĠĠĠ Ġif Ġ( child Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( element . text !! ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( child Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( child ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Block Expression , Ġis ĠK t Class Body Ġ-> Ġappend ("{} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġappend Reduc ed Text ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Ġ= Ġchild . next Sibling ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPsi Element . getStart Offset In Ancestor ( ancestor : ĠPsi Element ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ancestor Ġ== Ġthis ) Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġparent !!. getStart Offset In Ancestor ( ancestor ) Ġ+ Ġstart Offset In Parent ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġbreak Or Continue Expression Items ( position : ĠK t Element , Ġbreak Or Continue : ĠString ): ĠCollection < String > Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= ĠArrayList < String >() ĊĊĠĠĠ Ġparents Loop @ ĊĠĠĠ Ġfor Ġ( parent Ġin Ġposition . parent sWith Self ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( parent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Loop Expression Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( break Or Continue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabel Ġ= Ġ( parent . getParent () Ġas ? ĠK t Labeled Expression )?. getLabel Name As Name () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( label Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( break Or Continue Ġ+ Ġlabel . label Name To Tail ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Declaration With Body Ġ-> Ġbreak @ parents Loop Ġ// TODO : Ġsupport Ġnon - local Ġbreak 's & continue 's Ġwhen Ġthey Ġare Ġsupported Ġby Ġcompiler ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ private Ġfun ĠName ?. label Name To Tail (): ĠString Ġ= Ġif Ġ( this Ġ!= Ġnull ) Ġ"@ " Ġ+ Ġrender () Ġelse Ġ"" Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠSequence <* >. first Is Instance OrNull (): ĠT ? Ġ{ ĊĠĠĠ Ġfor Ġ( element Ġin Ġthis ) Ġif Ġ( element Ġis ĠT ) Ġreturn Ġelement ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠPsi Element > ĠPsi Element . get Non Strict Parent OfType (): ĠT ? Ġ{ ĊĠĠĠ Ġreturn ĠPsi Tree Util . getParent OfType ( this , ĠT :: class . java , Ġfalse ) Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠPsi Element > ĠPsi Element . getParent OfType ( strict : ĠBoolean ): ĠT ? Ġ{ ĊĠĠĠ Ġreturn ĠPsi Tree Util . getParent OfType ( this , ĠT :: class . java , Ġstrict ) Ċ }