diff --git a/.changes/next-release/bugfix-970b5a61-5646-4f40-b9fa-65c69ceda73f.json b/.changes/next-release/bugfix-970b5a61-5646-4f40-b9fa-65c69ceda73f.json new file mode 100644 index 00000000000..0bb05ffe978 --- /dev/null +++ b/.changes/next-release/bugfix-970b5a61-5646-4f40-b9fa-65c69ceda73f.json @@ -0,0 +1,4 @@ +{ + "type" : "bugfix", + "description" : "Fix UI freeze caused by updating workspace index on non background context" +} \ No newline at end of file diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/project/ProjectContextController.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/project/ProjectContextController.kt index 9864acd5e26..dabe282f2fd 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/project/ProjectContextController.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/project/ProjectContextController.kt @@ -13,12 +13,14 @@ import com.intellij.openapi.vfs.newvfs.BulkFileListener import com.intellij.openapi.vfs.newvfs.events.VFileCreateEvent import com.intellij.openapi.vfs.newvfs.events.VFileDeleteEvent import com.intellij.openapi.vfs.newvfs.events.VFileEvent +import com.intellij.util.concurrency.annotations.RequiresBackgroundThread import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.TimeoutCancellationException import kotlinx.coroutines.launch import software.aws.toolkits.core.utils.getLogger import software.aws.toolkits.core.utils.warn +import software.aws.toolkits.jetbrains.utils.pluginAwareExecuteOnPooledThread import java.util.concurrent.TimeoutException @Service(Service.Level.PROJECT) @@ -38,8 +40,10 @@ class ProjectContextController(private val project: Project, private val cs: Cor val createdFiles = events.filterIsInstance().mapNotNull { it.file?.path } val deletedFiles = events.filterIsInstance().map { it.file.path } - updateIndex(createdFiles, IndexUpdateMode.ADD) - updateIndex(deletedFiles, IndexUpdateMode.REMOVE) + pluginAwareExecuteOnPooledThread { + updateIndex(createdFiles, IndexUpdateMode.ADD) + updateIndex(deletedFiles, IndexUpdateMode.REMOVE) + } } } ) @@ -68,6 +72,7 @@ class ProjectContextController(private val project: Project, private val cs: Cor emptyList() } + @RequiresBackgroundThread fun updateIndex(filePaths: List, mode: IndexUpdateMode) { try { return projectContextProvider.updateIndex(filePaths, mode) diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/project/ProjectContextEditorListener.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/project/ProjectContextEditorListener.kt index 3b887dbb6a1..ce194da9614 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/project/ProjectContextEditorListener.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/project/ProjectContextEditorListener.kt @@ -6,6 +6,7 @@ package software.aws.toolkits.jetbrains.services.amazonq.project import com.intellij.openapi.fileEditor.FileDocumentManager import com.intellij.openapi.fileEditor.FileEditorManagerEvent import com.intellij.openapi.fileEditor.FileEditorManagerListener +import software.aws.toolkits.jetbrains.utils.pluginAwareExecuteOnPooledThread class ProjectContextEditorListener : FileEditorManagerListener { override fun selectionChanged(event: FileEditorManagerEvent) { @@ -19,6 +20,8 @@ class ProjectContextEditorListener : FileEditorManagerListener { } val project = event.manager.project - ProjectContextController.getInstance(project).updateIndex(listOf(oldFile.path), IndexUpdateMode.UPDATE) + pluginAwareExecuteOnPooledThread { + ProjectContextController.getInstance(project).updateIndex(listOf(oldFile.path), IndexUpdateMode.UPDATE) + } } }