package Ġorg . jav acs . kt Ċ Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġorg . eclipse . lsp 4 j .* Ċ import Ġorg . eclipse . lsp 4 j . services . Workspace Service Ċ import Ġorg . eclipse . lsp 4 j . services . Language Client Ċ import Ġorg . eclipse . lsp 4 j . services . Language Client Aware Ċ import Ġorg . eclipse . lsp 4 j . jsonrpc . messages . Either Ċ import Ġorg . jav acs . kt . symbols . workspace Symbols Ċ import Ġorg . jav acs . kt . commands . JAVA _ TO _ K OT LIN _ COMMAND Ċ import Ġorg . jav acs . kt . j 2 k . convert Java To Kotlin Ċ import Ġorg . jav acs . kt . Kotlin TextDocument Service Ċ import Ġorg . jav acs . kt . position . extract Range Ċ import Ġorg . jav acs . kt . util . filePath Ċ import Ġorg . jav acs . kt . util . parse URI Ċ import Ġjava . net . URI Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ import Ġcom . google . gson . Json Element Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . JsonObject Ċ Ċ class ĠKotlin Workspace Service ( ĊĠĠĠ Ġprivate Ġval Ġsf : ĠSource Files , ĊĠĠĠ Ġprivate Ġval Ġsp : ĠSource Path , ĊĠĠĠ Ġprivate Ġval Ġcp : ĠCompiler Class Path , ĊĠĠĠ Ġprivate Ġval Ġdoc Service : ĠKotlin TextDocument Service , ĊĠĠĠ Ġprivate Ġval Ġconfig : ĠConfiguration Ċ ) Ġ: ĠWorkspace Service , ĠLanguage Client Aware Ġ{ ĊĠĠĠ Ġprivate Ġval Ġgson Ġ= ĠGson () ĊĠĠĠ Ġprivate Ġvar Ġlanguage Client : ĠLanguage Client ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġconnect ( client : ĠLanguage Client ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġlanguage Client Ġ= Ġclient ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexecute Command ( params : ĠExecute Command Params ): ĠCompletableFuture < Any > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġparams . arguments ĊĠĠĠĠĠĠĠ ĠLOG . info (" Executing Ġcommand : Ġ{} Ġwith Ġ{}", Ġparams . command , Ġparams . arguments ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( params . command ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJAVA _ TO _ K OT LIN _ COMMAND Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Uri Ġ= Ġgson . fromJson ( args [ 0 ] Ġas ĠJson Element , ĠString :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrange Ġ= Ġgson . fromJson ( args [ 1 ] Ġas ĠJson Element , ĠRange :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Java Code Ġ= Ġextract Range ( sp . content ( parse URI ( file Uri )), Ġrange ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkotlin Code Ġ= Ġconvert Java To Kotlin ( selected Java Code , Ġcp . compiler ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage Client ?. apply Edit ( Apply Workspace Edit Params ( Workspace Edit ( listOf ( Either . for Left < TextDocument Edit , ĠResource Operation >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText Document Edit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVersion ed TextDocument Identifier (). apply Ġ{ Ġuri Ġ= Ġfile Uri Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Text Edit ( range , Ġkotlin Code )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . completed Future ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdid Change W atched Files ( params : ĠDid Change W atched Files Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( change Ġin Ġparams . changes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġparse URI ( change . uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġuri . filePath ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( change . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Change Type . Created Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsf . created On Disk ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath ?. let ( cp :: created On Disk )?. let Ġ{ Ġif Ġ( it ) Ġsp . refresh () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Change Type . Deleted Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsf . deleted On Disk ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath ?. let ( cp :: deleted On Disk )?. let Ġ{ Ġif Ġ( it ) Ġsp . refresh () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Change Type . Changed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsf . changed On Disk ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath ?. let ( cp :: changed On Disk )?. let Ġ{ Ġif Ġ( it ) Ġsp . refresh () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNothing Ġto Ġdo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdid Change Configuration ( params : ĠDid Change Configuration Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= Ġparams . settings Ġas ? ĠJsonObject ĊĠĠĠĠĠĠĠ Ġsettings ?. get (" kotlin ") ?. as JsonObject ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġdeprecated Ġconfiguration Ġkeys ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget (" de bounce Time ") ?. as Long ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . lint ing . de bounce Time Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc Service . update De bounc er () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget (" snippets Enabled ") ?. as Boolean ?. let Ġ{ Ġconfig . completion . snippets . enabled Ġ= Ġit Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġcompiler Ġoptions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget (" compiler ") ?. as JsonObject ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompiler Ġ= Ġconfig . compiler ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget (" jvm ") ?. as JsonObject ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj vm Ġ= Ġcompiler . jvm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget (" target ") ?. asString ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj vm . target Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcp . update Compiler Configuration () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġlinter Ġoptions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget (" lint ing ") ?. as JsonObject ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlint ing Ġ= Ġconfig . lint ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget (" de bounce Time ") ?. as Long ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlint ing . de bounce Time Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc Service . update De bounc er () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġcode - completion Ġoptions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget (" completion ") ?. as JsonObject ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompletion Ġ= Ġconfig . completion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget (" snippets ") ?. as JsonObject ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsnippets Ġ= Ġcompletion . snippets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget (" enabled ") ?. as Boolean ?. let Ġ{ Ġsnippets . enabled Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġoptions Ġabout Ġexternal Ġsources Ġe . g . ĠJ AR Ġfiles , Ġde comp ilers , Ġetc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget (" external Sources ") ?. as JsonObject ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexternal Sources Ġ= Ġconfig . external Sources ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget (" use K ls Scheme ") ?. as Boolean ?. let Ġ{ Ġexternal Sources . use K ls Scheme Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget (" auto ConvertTo Kotlin ") ?. as Boolean ?. let Ġ{ Ġexternal Sources . auto ConvertTo Kotlin Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLOG . info (" Updated Ġconfiguration : Ġ{}", Ġsettings ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsymbol ( params : ĠWorkspace Symbol Params ): ĠCompletableFuture < List < Symbol Information >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġworkspace Symbols ( params . query , Ġsp ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . completed Future ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdid Change Workspace Folders ( params : ĠDid Change Workspace Folders Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( change Ġin Ġparams . event . added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . info (" Adding Ġworkspace Ġ{} Ġto Ġsource Ġpath ", Ġchange . uri ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠPaths . get ( parse URI ( change . uri )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsf . add Workspace Root ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref reshed Ġ= Ġcp . add Workspace Root ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ref reshed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp . refresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( change Ġin Ġparams . event . removed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . info (" D ro pping Ġworkspace Ġ{} Ġfrom Ġsource Ġpath ", Ġchange . uri ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠPaths . get ( parse URI ( change . uri )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsf . remove Workspace Root ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref reshed Ġ= Ġcp . remove Workspace Root ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ref reshed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp . refresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ