package Ġcom . lightning k ite . kh ry sal is . typescript Ċ Ċ import Ġcom . lightning k ite . kh ry sal is . generic .* Ċ import Ġcom . lightning k ite . kh ry sal is . replacement s . Template Ċ import Ġcom . lightning k ite . kh ry sal is . replacement s . Template Part Ċ import Ġcom . lightning k ite . kh ry sal is . util . forEach Between Ċ import Ġorg . jetbrains . kotlin . com . intellij . psi . Psi Element Ċ import Ġorg . jetbrains . kotlin . com . intellij . psi . Psi WhiteSpace Ċ import Ġorg . jetbrains . kotlin . com . intellij . psi . impl . source . tree . Leaf Psi Element Ċ import Ġorg . jetbrains . kotlin . lexer . Kt Tokens Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . all Children Ċ import Ġcom . lightning k ite . kh ry sal is . analysis .* Ċ import Ġcom . lightning k ite . kh ry sal is . typescript . replacement s . Types cript Import ĊĊ Ċ fun Ġ< T Ġ: ĠAny > ĠKotlin Translator < Types cript File Emitter >. Context ByType < T >. ded up ( ĊĠĠĠ Ġrequire Wr apping : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġtype : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġcannot Ded up : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġaction : ĠDe Dup Emitter . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġemitter Ġ= ĠDe Dup Emitter ( out ) ĊĠĠĠ Ġif ( cannot Ded up ){ ĊĠĠĠĠĠĠĠ Ġaction ( emitter ) ĊĠĠĠĠĠĠĠ Ġ- emitter . to Emit ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġaction ( emitter ) ĊĠĠĠ Ġval Ġwraps Ġ= Ġemitter . ded up Ne cessary Ġ&& Ġrequire Wr apping ĊĠĠĠ Ġif Ġ( wrap s ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ- " (() " ĊĠĠĠĠĠĠĠ Ġif ( type Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- ": Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- type ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ- " Ġ=> Ġ{\ n " ĊĠĠĠ Ġ} ĊĠĠĠ Ġemitter . finish ( wrap s ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ- it ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( wrap s ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ- "\ n }) ()" ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T Ġ: ĠAny > ĠKotlin Translator < Types cript File Emitter >. Context ByType < T >. emit Template ( ĊĠĠĠ Ġrequires Wr apping : ĠBoolean , ĊĠĠĠ Ġtype : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġensure Receiver NotNull : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġtemplate : ĠTemplate , ĊĠĠĠ Ġprefix : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġdispatch Receiver : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġextension Receiver : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġreceiver : ĠAny ? Ġ= Ġextension Receiver Ġ?: Ġdispatch Receiver , ĊĠĠĠ Ġvalue : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġall Parameters : Ġ() Ġ-> ĠAny ? Ġ= Ġ{ Ġnull Ġ}, ĊĠĠĠ Ġoperator Token : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġparameter : Ġ( Template Part . Parameter ) Ġ-> ĠAny ? Ġ= Ġ{ Ġvalue Ġ}, ĊĠĠĠ Ġtype Parameter : Ġ( Template Part . Type Parameter ) Ġ-> ĠAny ? Ġ= Ġ{ Ġnull Ġ}, ĊĠĠĠ Ġparameter ByIndex : Ġ( Template Part . Parameter ByIndex ) Ġ-> ĠAny ? Ġ= Ġ{ Ġvalue Ġ}, ĊĠĠĠ Ġtype Parameter ByIndex : Ġ( Template Part . Type Parameter ByIndex ) Ġ-> ĠAny ? Ġ= Ġ{ Ġnull Ġ}, ĊĠĠĠ Ġre ified Type Parameter ByIndex : Ġ( Template Part . Re ified Type Parameter ByIndex ) Ġ-> ĠAny ? Ġ= Ġ{ Ġnull Ġ} Ċ ) Ġ{ ĊĠĠĠ Ġval Ġreplacement s Ġ= Ġtemplate . imports . map NotNull Ġ{ Ġout . add Import ( it ) Ġ} ĊĠĠĠ Ġde dup ( requires Wr apping , Ġtype ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġtemplate Is This Dot Ġ= Ġtemplate . parts . get OrNull ( 0 ) Ġis ĠTemplate Part . Receiver Ġ&& Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate . parts . get OrNull ( 1 ). let Ġ{ Ġit Ġis ĠTemplate Part . Text Ġ&& Ġit . string . startsWith ('.') Ġ} Ġ&& Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate . parts . none Ġ{ Ġ( it Ġas ? ĠTemplate Part . Text )?. string ?. contains (" =") Ġ?: Ġfalse Ġ} Ċ // ĠĠĠĠĠĠĠ Ġval Ġalt Template Ġ= Ġif ( ensure Receiver NotNull Ġ&& Ġtemplate Is This Dot ){ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠTemplate ( parts Ġ= Ġtemplate . parts . to Mutable List (). apply Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 1 ] Ġ= Ġ( this [ 1 ] Ġas ĠTemplate Part . Text ). let Ġ{ Ġit . copy (" ?" Ġ+ Ġit . string ) Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ċ // ĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġtemplate Is This Dot Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġalt Template : ĠTemplate ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif ( ensure Receiver NotNull Ġ&& Ġalt Template Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġensure NotNull ( extension Receiver Ġ?: Ġreceiver ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ- prefix ĊĠĠĠĠĠĠĠ Ġfun Ġon Parts ( list : ĠList < Template Part >, Ġoverridden : ĠMap < String , ĠAny ?> Ġ= Ġmap Of ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloop @ Ġfor Ġ( part Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( part ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTemplate Part . Text Ġ-> Ġ- replacement s . fold ( part . string ) Ġ{ Ġr , Ġt Ġ-> Ġr . replace ( t . from , Ġt . to ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTemplate Part . Receiver Ġ-> Ġde duplicate Emit ( receiver ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTemplate Part . Dispatch Receiver Ġ-> Ġde duplicate Emit ( dispatch Receiver ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTemplate Part . Extension Receiver Ġ-> Ġde duplicate Emit ( extension Receiver ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTemplate Part . Value Ġ-> Ġde duplicate Emit ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTemplate Part . All Parameters Ġ-> Ġ- all Parameters () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTemplate Part . Operator Token Ġ-> Ġ- operator Token ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTemplate Part . Parameter Ġ-> Ġde duplicate Emit ( parameter ( part )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTemplate Part . Parameter ByIndex Ġ-> Ġde duplicate Emit ( parameter ByIndex ( part )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTemplate Part . Lambda Parameter Contents Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- "\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġwhen Ġ( val Ġp Ġ= Ġpart . pointer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTemplate Part . Parameter ByIndex Ġ-> Ġparameter ByIndex ( p ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTemplate Part . Parameter Ġ-> Ġparameter ( p ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcontinue @ loop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Ġis ĠK t Lambda Expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart . param Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. zip ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . value Parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take Unless Ġ{ Ġit . isEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠlistOf (" it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . second Ġ!= Ġ"_" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- " const Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- it . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- " Ġ= Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Parts ( it . first . parts ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- "; \ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- item . body Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- item ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- " (" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart . param Map . forEach Between ( for Item Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Parts ( it . parts ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġbetween Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- ", Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- ")" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- "\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTemplate Part . Type Parameter Ġ-> Ġ- type Parameter ( part ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTemplate Part . Type Parameter ByIndex Ġ-> Ġ- type Parameter ByIndex ( part ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTemplate Part . Re ified Type Parameter ByIndex Ġ-> Ġ- re ified Type Parameter ByIndex ( part ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġon Parts ( alt Template ?. parts Ġ?: Ġtemplate . parts ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T Ġ: ĠAny > ĠKotlin Translator < Types cript File Emitter >. Context ByType < T >. emit Template ( ĊĠĠĠ Ġtemplate : ĠTemplate , ĊĠĠĠ Ġreceiver : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġdispatch Receiver : ĠAny ? Ġ= Ġreceiver , ĊĠĠĠ Ġextension Receiver : ĠAny ? Ġ= Ġreceiver , ĊĠĠĠ Ġvalue : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġall Parameters : Ġ() Ġ-> ĠAny ? Ġ= Ġ{ Ġnull Ġ}, ĊĠĠĠ Ġoperator Token : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġparameter : Ġ( Template Part . Parameter ) Ġ-> ĠAny ? Ġ= Ġ{ Ġvalue Ġ}, ĊĠĠĠ Ġtype Parameter : Ġ( Template Part . Type Parameter ) Ġ-> ĠAny ? Ġ= Ġ{ Ġnull Ġ}, ĊĠĠĠ Ġparameter ByIndex : Ġ( Template Part . Parameter ByIndex ) Ġ-> ĠAny ? Ġ= Ġ{ Ġvalue Ġ}, ĊĠĠĠ Ġtype Parameter ByIndex : Ġ( Template Part . Type Parameter ByIndex ) Ġ-> ĠAny ? Ġ= Ġ{ Ġnull Ġ}, ĊĠĠĠ Ġre ified Type Parameter ByIndex : Ġ( Template Part . Re ified Type Parameter ByIndex ) Ġ-> ĠAny ? Ġ= Ġ{ Ġnull Ġ} Ċ ) Ġ{ ĊĠĠĠ Ġemit Template ( ĊĠĠĠĠĠĠĠ Ġrequires Wr apping Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġensure Receiver NotNull Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġtemplate Ġ= Ġtemplate , ĊĠĠĠĠĠĠĠ Ġprefix Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdispatch Receiver Ġ= Ġdispatch Receiver , ĊĠĠĠĠĠĠĠ Ġextension Receiver Ġ= Ġextension Receiver , ĊĠĠĠĠĠĠĠ Ġreceiver Ġ= Ġreceiver , ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue , ĊĠĠĠĠĠĠĠ Ġall Parameters Ġ= Ġall Parameters , ĊĠĠĠĠĠĠĠ Ġoperator Token Ġ= Ġoperator Token , ĊĠĠĠĠĠĠĠ Ġparameter Ġ= Ġparameter , ĊĠĠĠĠĠĠĠ Ġtype Parameter Ġ= Ġtype Parameter , ĊĠĠĠĠĠĠĠ Ġparameter ByIndex Ġ= Ġparameter ByIndex , ĊĠĠĠĠĠĠĠ Ġtype Parameter ByIndex Ġ= Ġtype Parameter ByIndex , ĊĠĠĠĠĠĠĠ Ġre ified Type Parameter ByIndex Ġ= Ġre ified Type Parameter ByIndex ĊĠĠĠ Ġ) Ċ } Ċ Ċ class ĠDe Dup Emitter ( val Ġout : ĠTypes cript File Emitter ) Ġ{ ĊĠĠĠ Ġval Ġde d uplicated Ġ= ĠHashMap < Any , ĠString >() ĊĠĠĠ Ġval ĠcheckNotNull Ġ= ĠHashSet < String >() ĊĠĠĠ Ġval Ġto Emit Ġ= ĠArrayList < Any >() ĊĠĠĠ Ġfun Ġde duplicate ( item : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( ded uplicated . containsKey ( item )) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( when Ġ( item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġitem . all Ġ{ Ġit . is Letter Or Digit () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Expression Ġ-> Ġitem . is Simple () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġ" temp ${ out . unique Number . get And Increment () }" ĊĠĠĠĠĠĠĠ Ġde d uplicated [ item ] Ġ= Ġname ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġde duplicate Emit ( item : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġde duplicate ( item ) ĊĠĠĠĠĠĠĠ Ġto Emit . add ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun ĠAny ?. unary Minus () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġto Emit . add ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun ĠAny ?. unary Plus () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġto Emit . add ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġensure NotNull ( item : ĠAny ? ){ ĊĠĠĠĠĠĠĠ Ġif ( item Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġde d uplicated . get Or Put ( item ) Ġ{ Ġ" temp ${ out . unique Number . get And Increment () }" Ġ} ĊĠĠĠĠĠĠĠ ĠcheckNotNull . add ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġde dup Ne cessary : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġde d uplicated . any Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġit . key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Emit . count Ġ{ Ġit Ġ== Ġkey Ġ} Ġ> Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} Ġ|| ĠcheckNotNull . isNotEmpty () ĊĊĠĠĠ Ġfun Ġfinish ( wrapping : ĠBoolean , Ġparent Emit : Ġ( Any ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġused Ġ= Ġde d uplicated . filter Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Emit . count Ġ{ Ġit Ġ== Ġkey Ġ} Ġ> Ġ 1 Ġ|| Ġvalue Ġin ĠcheckNotNull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ(( item , Ġname ) Ġin Ġused ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Emit (" const Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Emit ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Emit (" Ġ= Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Emit ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Emit (" ;\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( name Ġin ĠcheckNotNull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( wrapping ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Emit (" if (" ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Emit ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Emit (" Ġ=== Ġnull ) Ġ{ Ġreturn Ġnull Ġ}\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Emit (" if (" ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Emit ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Emit (" Ġ!== Ġnull ) Ġ{ Ġ\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( wrapping ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Emit (" return Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġto Emit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġused [ item ]?. let Ġ{ Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Emit ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġparent Emit ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif (! wrapping ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( checkNotNull . size ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Emit ("\ n }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġhas New line Before Access ( typed Rule : ĠK t Qualified Expression ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġtyped Rule . all Children ĊĠĠĠĠĠĠĠ Ġ. find Ġ{ Ġit Ġis ĠLeaf Psi Element Ġ&& Ġ( it . elementType Ġ== ĠK t Tokens . DOT Ġ|| Ġit . elementType Ġ== ĠK t Tokens . SAFE _ ACCESS ) Ġ} ĊĠĠĠĠĠĠĠ Ġ? . prev Sibling ĊĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġit Ġas ? ĠPsi WhiteSpace Ġ} ĊĠĠĠĠĠĠĠ Ġ? . text Contains ('\ n ') Ġ== Ġtrue Ċ } Ċ Ċ fun Ġ< T Ġ: ĠK t Qualified Expression > ĠKotlin Translator < Types cript File Emitter >. Context ByType < T >. insert New line Before Access () Ġ{ ĊĠĠĠ Ġif Ġ( has New line Before Access ( typed Rule )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ- "\ n " ĊĠĠĠ Ġ} Ċ }