/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 Ġ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 . script ing . ide _ services . compiler Ċ Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Analyzer With Compiler Report Ċ import Ġorg . jetbrains . kotlin . descriptors . Module Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Property Descriptor Ċ import Ġorg . jetbrains . kotlin . psi . Kt File Ċ import Ġorg . jetbrains . kotlin . renderer . Descriptor Renderer Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . script ing . compiler . plugin . impl .* Ċ import Ġorg . jetbrains . kotlin . script ing . ide _ services . compiler . impl .* Ċ import Ġkotlin . script . experimental . api .* Ċ import Ġkotlin . script . experimental . host . Script ing Host Configuration Ċ import Ġkotlin . script . experimental . jvm . default Jvm Script ing Host Configuration Ċ import Ġkotlin . script . experimental . jvm . util . calc Absolute Ċ Ċ class ĠK Jvm Repl Compiler With Ide Services ( host Configuration : ĠScript ing Host Configuration Ġ= Ġdefault Jvm Script ing Host Configuration ) Ġ: ĊĠĠĠ ĠK Jvm Repl Compiler Base < Ide Like Repl Code Analyzer >( host Configuration , Ġ{ Ġshared Script Compilation Context , Ġscope Processor Ġ-> ĊĠĠĠĠĠĠĠ ĠIde Like Repl Code Analyzer ( shared Script Compilation Context . environment , Ġscope Processor ) ĊĠĠĠ Ġ}), ĊĠĠĠ ĠRe pl Comp leter , ĠRe pl Code Analyzer Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcomplete ( ĊĠĠĠĠĠĠĠ Ġsnippet : ĠSource Code , ĊĠĠĠĠĠĠĠ Ġcursor : ĠSource Code . Position , ĊĠĠĠĠĠĠĠ Ġconfiguration : ĠScript Compilation Configuration ĊĠĠĠ Ġ): ĠResult With Diagnostics < Repl Completion Result > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Message Collector ( snippet ) Ġ{ Ġmessage Collector Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanalyze Result Ġ= Ġanalyze With Cursor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Collector , Ġsnippet , Ġconfiguration , Ġcursor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġsnippet , Ġcursor Abs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepare Code For Completion ( snippet . text , Ġcursor Abs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠSource Code Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġtext : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġnew Text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġname : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġsnippet . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġlocation Id : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġsnippet . location Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( analyze Result . value Or Ġ{ Ġreturn Ġit Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget K Jvm Completion ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkt Script , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolution Facade , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Abs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). as Success ( message Collector . diagnostics ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠList < Script Diagnostic >. to Analyze Result Sequence () Ġ= Ġ( filter Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( it . severity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScript Diagnostic . Severity . FATAL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScript Diagnostic . Severity . ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScript Diagnostic . Severity . WARNING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}). as Sequence () ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġanalyze ( ĊĠĠĠĠĠĠĠ Ġsnippet : ĠSource Code , ĊĠĠĠĠĠĠĠ Ġcursor : ĠSource Code . Position , ĊĠĠĠĠĠĠĠ Ġconfiguration : ĠScript Compilation Configuration ĊĠĠĠ Ġ): ĠResult With Diagnostics < Repl Analyzer Result > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith Message Collector ( snippet ) Ġ{ Ġmessage Collector Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanalyze Result Ġ= Ġanalyze With Cursor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Collector , Ġsnippet , Ġconfiguration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( analyze Result . value Or Ġ{ Ġreturn Ġit Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Rendered Type Ġ= Ġresult Property ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDescriptor Renderer . SHORT _ NAMES _ IN _ TYPES . render Type ( it . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRe pl Analyzer Result Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalysis Diagnostics ( message Collector . diagnostics . to Analyze Result Sequence ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrendered Result Type ( result Rendered Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. as Success () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanalyze With Cursor ( ĊĠĠĠĠĠĠĠ Ġmessage Collector : ĠScript Diagnostics Message Collector , ĊĠĠĠĠĠĠĠ Ġsnippet : ĠSource Code , ĊĠĠĠĠĠĠĠ Ġconfiguration : ĠScript Compilation Configuration , ĊĠĠĠĠĠĠĠ Ġcursor : ĠSource Code . Position ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġget New Snippet : Ġ( Source Code , ĠInt ) Ġ-> ĠSource Code Ġ= Ġ{ Ġcode , Ġ_ Ġ-> Ġcode Ġ} ĊĠĠĠ Ġ): ĠResult With Diagnostics < Analyze With Cursor Result > Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Resolution Filter ( configuration ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinitial Configuration Ġ= Ġconfiguration . ref ine Before Parsing ( snippet ). value Or Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcursor Abs Ġ= Ġcursor ?. calc Absolute ( snippet ) Ġ?: Ġ- 1 ĊĠĠĠĠĠĠĠ Ġval Ġnew Snippet Ġ= Ġif Ġ( cursor Abs Ġ== Ġ- 1 ) Ġsnippet Ġelse Ġget New Snippet ( snippet , Ġcursor Abs ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcompilation State Ġ= Ġstate . get Compilation State ( initial Configuration ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ(_, Ġerror Holder , Ġsnippet Kt File ) Ġ= Ġprepare For Analyze ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Snippet , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Collector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail On Syntax Errors Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ). value Or Ġ{ Ġreturn Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġanalysis Result Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation State . analyzer Engine . state less Analyze With Imported Scripts ( snippet Kt File , Ġempty List (), Ġscript Priority . get () Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠAnalyzer With Compiler Report . report Diagnostics ( analysis Result . diagnostics , Ġerror Holder ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ(_, Ġbinding Context , Ġresolution Facade , Ġmodule Descriptor , Ġresult Property ) Ġ= Ġwhen Ġ( analysis Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIde Like Repl Code Analyzer . Repl Line Analysis Result With State less . State less Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalysis Result ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġfailure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Snippet , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Collector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unexpected Ġresult Ġ${ analysis Result :: class . java }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠAn alyze With Cursor Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsnippet Kt File , Ġbinding Context , Ġresolution Facade , Ġmodule Descriptor , Ġcursor Abs , Ġresult Property ĊĠĠĠĠĠĠĠ Ġ). as Success () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠAn alyze With Cursor Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt Script : ĠK t File , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Context : ĠBinding Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolution Facade : ĠKotlin Resolution Facade For Repl , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodule Descriptor : ĠModule Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Abs : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Property : ĠProperty Descriptor ?, ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ