iFlyCode 内容处理器与编辑器工具分析
版本: 3.4.2-222 | 分析日期: 2026-05-11
1. 概述
com/aicode/content/ 包提供编辑器内容操作的工具类,包括编辑器选择、文件跳转、内容插入和覆盖层提示等功能。这些工具被多个子系统(代码补全、内联聊天、代码检查等)共享使用。
2. 核心类
2.1 EditorUtils (247 strings)
路径: com/aicode/content/util/EditorUtils职责: 编辑器操作工具集 — 最核心的编辑器辅助类
关键方法:
createEditor(Project, String)— 创建编辑器实例getSelectedEditor(Project)— 获取当前选中编辑器getSelectedTextEditor(Project)— 获取选中的文本编辑器getAndJumpToFileByIndex(Project, String, int, int)— 跳转到文件指定位置getFilePath(Editor)— 获取编辑器当前文件路径findFileByIoFile(Project, File)— 通过 IO 文件查找 VirtualFileopenTextEditor(Project, VirtualFile, boolean)— 打开文本编辑器replaceMainEditorSelection(Project, Editor, String)— 替换主编辑器选中内容insertContentUnderMethod(Project, Editor, String, PsiMethod)— 在方法下插入内容insertContentOnMethod(Project, Editor, String, PsiMethod)— 在方法上插入内容getPsiFile(Project, Editor)— 获取 PSI 文件getFileIndexDto(Editor)— 获取文件索引 DTOisMainEditorTextSelected(Editor)— 主编辑器是否有文本选中disableHighlighting(Project, Document)— 禁用高亮
关键依赖:
OverlayUtils— 覆盖层工具FileIndexDto— 文件索引 DTO
H() 混淆: 使用 H() 方法进行字符串解码
2.2 OverlayUtils (61 strings)
路径: com/aicode/content/util/OverlayUtils职责: 覆盖层提示工具 — 在编辑器上显示信息气泡
关键方法:
showInfoBalloon(String, MessageType, Point)— 显示信息气泡
H() 混淆: 使用 H() 方法
3. 文件工具子包
3.1 FileUtils (170 strings)
路径: com/aicode/content/util/file/FileUtils职责: 文件操作工具
关键方法:
getEditorFile(Editor)— 获取编辑器当前文件createFile(Project, String, String)— 创建文件toFile(VirtualFile)— VirtualFile 转 java.io.FilegetFileExtension(String)— 获取文件扩展名isUtf8File(VirtualFile)— 是否 UTF-8 文件getResourceContent(Class, String)— 读取资源内容getExtensions(LanguageFileExtensionDetails)— 获取语言扩展名列表tryCreateDirectory(String)— 创建目录
关键依赖:
LanguageFileExtensionDetails— 语言文件扩展映射FileInfo— Diff 文件信息Application— 应用工具
3.2 LanguageFileExtensionDetails (47 strings)
路径: com/aicode/content/util/file/LanguageFileExtensionDetails职责: 语言 → 文件扩展名映射
字段:
name— 语言名称extensions— 扩展名列表
方法:
getName()/setName()— 语言名称getExtensions()/setExtensions()— 扩展名列表
3.3 FileExtensionLanguageDetails (37 strings)
路径: com/aicode/content/util/file/FileExtensionLanguageDetails职责: 文件扩展名 → 语言映射(反向映射)
字段:
extension— 文件扩展名
4. 使用关系
EditorUtils ←── CodeCompleteService (补全后插入)
←── InlineChatCommandService (内联聊天修改)
←── GitReviewService (评审跳转)
←── ChatService (聊天代码操作)
←── CommonService (通用跳转)
FileUtils ←── PluginEditorInlayHintsProvider (语言检测)
←── CodeTipUtil (补全语言判断)
LanguageFileExtensionDetails ←── AICodeSettingsState (禁用语言配置)
←── AICodeStatusService (状态检查)5. 关键发现
双映射体系:
LanguageFileExtensionDetails(语言→扩展名)和FileExtensionLanguageDetails(扩展名→语言)提供双向映射,用于语言检测和文件类型判断。PSI 集成:
EditorUtils深度集成 IntelliJ PSI 系统,支持PsiMethod级别的内容插入(insertContentUnderMethod/insertContentOnMethod),用于内联聊天和单测生成的代码插入。WriteCommandAction:
replaceMainEditorSelection和insertContent*方法使用 IntelliJ 的WriteCommandAction确保文档修改在正确的线程和命令上下文中执行。文件索引 DTO:
getFileIndexDto()将编辑器状态(文件路径、选区起止行号)封装为FileIndexDto,用于 WebSocket 请求中传递文件上下文。H() 混淆广泛: 所有工具类都使用 H() 方法解码字符串,说明这些类包含需要保护的逻辑路径或配置信息。