From d19dd4bb2388296866259a18d6cbba84ed84d0a8 Mon Sep 17 00:00:00 2001 From: "carlrobertoh@gmail.com" Date: Tue, 11 Feb 2025 01:36:39 +0000 Subject: [PATCH] fix: find referenced files outside of edt --- .../chat/ui/SelectedFilesAccordion.java | 14 ++++++-------- .../codegpt/toolwindow/ui/UserMessagePanel.kt | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/SelectedFilesAccordion.java b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/SelectedFilesAccordion.java index b1fbaead..d6b34d26 100644 --- a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/SelectedFilesAccordion.java +++ b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/SelectedFilesAccordion.java @@ -5,7 +5,7 @@ import static java.lang.String.format; import com.intellij.icons.AllIcons.General; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.components.ActionLink; import com.intellij.util.ui.JBUI; import java.awt.BorderLayout; @@ -24,24 +24,22 @@ public class SelectedFilesAccordion extends JPanel { public SelectedFilesAccordion( @NotNull Project project, - @NotNull List referencedFilePaths) { + @NotNull List referencedFiles) { super(new BorderLayout()); setOpaque(false); - var contentPanel = createContentPanel(project, referencedFilePaths); - add(createToggleButton(contentPanel, referencedFilePaths.size()), BorderLayout.NORTH); + var contentPanel = createContentPanel(project, referencedFiles); + add(createToggleButton(contentPanel, referencedFiles.size()), BorderLayout.NORTH); add(contentPanel, BorderLayout.CENTER); } - private JPanel createContentPanel(Project project, List referencedFilePaths) { + private JPanel createContentPanel(Project project, List referencedFiles) { var panel = new JPanel(); panel.setOpaque(false); panel.setVisible(true); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); panel.setBorder(JBUI.Borders.empty(4, 0)); - referencedFilePaths.stream() - .map(filePath -> LocalFileSystem.getInstance().findFileByPath(filePath)) - .filter(Objects::nonNull) + referencedFiles.stream() .map(virtualFile -> { var actionLink = new ActionLink( Paths.get(virtualFile.getPath()).getFileName().toString(), diff --git a/src/main/kotlin/ee/carlrobert/codegpt/toolwindow/ui/UserMessagePanel.kt b/src/main/kotlin/ee/carlrobert/codegpt/toolwindow/ui/UserMessagePanel.kt index 097fad84..c0fc0baa 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/toolwindow/ui/UserMessagePanel.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/toolwindow/ui/UserMessagePanel.kt @@ -6,6 +6,7 @@ import com.intellij.openapi.Disposable import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.ui.ColorUtil import com.intellij.ui.JBColor import com.intellij.ui.RoundedIcon @@ -22,6 +23,10 @@ import ee.carlrobert.codegpt.toolwindow.chat.ui.ChatMessageResponseBody import ee.carlrobert.codegpt.toolwindow.chat.ui.ImageAccordion import ee.carlrobert.codegpt.toolwindow.chat.ui.SelectedFilesAccordion import ee.carlrobert.codegpt.ui.IconActionButton +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import java.awt.Image import java.io.IOException import java.nio.file.Files @@ -147,7 +152,7 @@ class UserMessagePanel( ) } - private fun getAdditionalContextPanel(project: Project?, message: Message): JPanel? { + private fun getAdditionalContextPanel(project: Project, message: Message): JPanel? { val documentationDetails = message.documentationDetails val referencedFilePaths = message.referencedFilePaths ?: emptyList() if (documentationDetails == null && referencedFilePaths.isEmpty() && message.personaName.isNullOrEmpty()) { @@ -188,7 +193,14 @@ class UserMessagePanel( } if (referencedFilePaths.isNotEmpty()) { - additionalContextPanel.add(SelectedFilesAccordion(project!!, referencedFilePaths)) + CoroutineScope(Dispatchers.IO).launch { + val referencedFiles = referencedFilePaths.mapNotNull { + LocalFileSystem.getInstance().findFileByPath(it) + } + withContext(Dispatchers.Main) { + additionalContextPanel.add(SelectedFilesAccordion(project, referencedFiles)) + } + } } } }