refactor: share visible file context collection

This commit is contained in:
Carl-Robert Linnupuu 2026-04-29 20:41:13 +01:00
parent 920827bc11
commit 7628681ed6
2 changed files with 12 additions and 35 deletions

View file

@ -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<VirtualFile> collectVisibleFiles(
List<VirtualFile> inputFiles,
ProxyAISettingsService settingsService) {
var visibleFiles = new LinkedHashSet<VirtualFile>();
inputFiles.forEach(file -> appendVisibleFiles(file, settingsService, visibleFiles));
return visibleFiles.stream().toList();
}
private void appendVisibleFiles(
VirtualFile file,
ProxyAISettingsService settingsService,
LinkedHashSet<VirtualFile> 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<VirtualFile> 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(() -> {

View file

@ -34,13 +34,18 @@ object ChatContextSupport {
@JvmStatic
fun getReferencedFiles(project: Project, tags: List<TagDetails>): List<ReferencedFile> {
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<TagDetails>): List<VirtualFile> {
return collectVisibleFiles(project, tags.mapNotNull(::getVirtualFile))
}
@JvmStatic
fun collectVisibleFiles(project: Project, inputFiles: List<VirtualFile>): List<VirtualFile> {
val settingsService = project.getService(ProxyAISettingsService::class.java)
return collectVisibleFiles(inputFiles, settingsService)
}
@JvmStatic