@@ -5,29 +5,34 @@ package software.aws.toolkits.jetbrains.services.amazonq.lsp.workspace
55
66import com.intellij.openapi.Disposable
77import com.intellij.openapi.project.Project
8+ import com.intellij.openapi.project.ProjectManager
9+ import com.intellij.openapi.project.ProjectManagerListener
810import com.intellij.openapi.vfs.VirtualFileManager
911import com.intellij.openapi.vfs.newvfs.BulkFileListener
1012import com.intellij.openapi.vfs.newvfs.events.VFileCreateEvent
1113import com.intellij.openapi.vfs.newvfs.events.VFileDeleteEvent
1214import com.intellij.openapi.vfs.newvfs.events.VFileEvent
13- import org.eclipse.lsp4j.CreateFilesParams
14- import org.eclipse.lsp4j.DeleteFilesParams
15- import org.eclipse.lsp4j.FileCreate
16- import org.eclipse.lsp4j.FileDelete
15+ import org.eclipse.lsp4j.*
1716import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLanguageServer
1817import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
1918import software.aws.toolkits.jetbrains.utils.pluginAwareExecuteOnPooledThread
2019
2120class WorkspaceServiceHandler (
2221 private val project : Project ,
2322 serverInstance : Disposable
24- ): BulkFileListener {
23+ ): BulkFileListener,
24+ ProjectManagerListener {
2525
2626 init {
2727 project.messageBus.connect(serverInstance).subscribe(
2828 VirtualFileManager .VFS_CHANGES ,
2929 this
3030 )
31+
32+ project.messageBus.connect(serverInstance).subscribe(
33+ ProjectManager .TOPIC ,
34+ this
35+ )
3136 }
3237
3338 private fun executeIfRunning (project : Project , runnable : (AmazonQLanguageServer ) -> Unit ) =
@@ -70,11 +75,36 @@ class WorkspaceServiceHandler(
7075 pluginAwareExecuteOnPooledThread {
7176 didCreateFiles(events.filterIsInstance<VFileCreateEvent >())
7277 didDeleteFiles(events.filterIsInstance<VFileDeleteEvent >())
78+ didChangeWatchedFiles(events)
7379 }
7480 }
7581
7682 // still need to implement
7783 // private fun didChangeWorkspaceFolders() {
7884 // languageServer.workspaceService.didChangeWorkspaceFolders()
7985 // }
86+
87+ // didChangeWorkspaceFolders impl
88+
89+ // didChangeWatchedFiles
90+ private fun didChangeWatchedFiles (events : List <VFileEvent >) {
91+ executeIfRunning(project) {
92+ if (events.isNotEmpty()) {
93+ it.workspaceService.didChangeWatchedFiles(
94+ DidChangeWatchedFilesParams ().apply {
95+ changes = events.map { event ->
96+ FileEvent ().apply {
97+ uri = event.file?.toNioPath()?.toUri().toString()
98+ type = when (event) {
99+ is VFileCreateEvent -> FileChangeType .Created
100+ is VFileDeleteEvent -> FileChangeType .Deleted
101+ else -> FileChangeType .Changed
102+ }
103+ }
104+ }
105+ }
106+ )
107+ }
108+ }
109+ }
80110}
0 commit comments