diff --git a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java index 1340268e..98f57a9d 100644 --- a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java +++ b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java @@ -38,7 +38,6 @@ import ee.carlrobert.codegpt.mcp.McpSessionManager; import ee.carlrobert.codegpt.mcp.McpTool; import ee.carlrobert.codegpt.psistructure.PsiStructureProvider; import ee.carlrobert.codegpt.psistructure.models.ClassStructure; -import ee.carlrobert.codegpt.settings.ProxyAISettingsService; import ee.carlrobert.codegpt.settings.service.FeatureType; import ee.carlrobert.codegpt.telemetry.TelemetryAction; import ee.carlrobert.codegpt.toolwindow.ToolWindowInitialState; @@ -68,10 +67,8 @@ import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.util.ArrayList; -import java.util.Arrays; import java.util.Comparator; import java.util.HashSet; -import java.util.LinkedHashSet; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -310,30 +307,6 @@ public class ChatToolWindowTabPanel implements Disposable { return ToolApprovalMode.REQUIRE_APPROVAL; } - private List collectVisibleFiles( - List inputFiles, - ProxyAISettingsService settingsService) { - var visibleFiles = new LinkedHashSet(); - inputFiles.forEach(file -> appendVisibleFiles(file, settingsService, visibleFiles)); - return visibleFiles.stream().toList(); - } - - private void appendVisibleFiles( - VirtualFile file, - ProxyAISettingsService settingsService, - LinkedHashSet output) { - if (!file.isValid() || !settingsService.isVirtualFileVisible(file)) { - return; - } - if (!file.isDirectory()) { - output.add(file); - return; - } - - Arrays.stream(file.getChildren()) - .forEach(child -> appendVisibleFiles(child, settingsService, output)); - } - private void initializeConversationAttachedFiles() { restoreConversationAttachedFiles(); @@ -458,8 +431,7 @@ public class ChatToolWindowTabPanel implements Disposable { } public void includeFiles(List referencedFiles) { - var settingsService = project.getService(ProxyAISettingsService.class); - var visibleReferencedFiles = collectVisibleFiles(referencedFiles, settingsService); + var visibleReferencedFiles = ChatContextSupport.collectVisibleFiles(project, referencedFiles); userInputPanel.includeFiles(new ArrayList<>(visibleReferencedFiles)); ReadAction.nonBlocking(() -> { diff --git a/src/main/kotlin/ee/carlrobert/codegpt/toolwindow/chat/ChatContextSupport.kt b/src/main/kotlin/ee/carlrobert/codegpt/toolwindow/chat/ChatContextSupport.kt index 511bef6d..f54c5626 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/toolwindow/chat/ChatContextSupport.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/toolwindow/chat/ChatContextSupport.kt @@ -34,13 +34,18 @@ object ChatContextSupport { @JvmStatic fun getReferencedFiles(project: Project, tags: List): List { - val settingsService = project.getService(ProxyAISettingsService::class.java) - val visibleFiles = collectVisibleFiles( - tags.mapNotNull(::getVirtualFile), - settingsService - ) + return getReferencedVirtualFiles(project, tags).map(ReferencedFile::from) + } - return visibleFiles.map(ReferencedFile::from) + @JvmStatic + fun getReferencedVirtualFiles(project: Project, tags: List): List { + return collectVisibleFiles(project, tags.mapNotNull(::getVirtualFile)) + } + + @JvmStatic + fun collectVisibleFiles(project: Project, inputFiles: List): List { + val settingsService = project.getService(ProxyAISettingsService::class.java) + return collectVisibleFiles(inputFiles, settingsService) } @JvmStatic