iFlyCode 完整反编译补充分析与新发现报告
版本: 3.4.2-222 | 分析日期: 2026-05-30 | 文档编号: 103 分析工具: jadx 1.5.0 (batch decompile) | 原反编译: 104 个 .java | 现总计: 413 个 .java
1. 反编译覆盖总览
1.1 覆盖度对比
| 指标 | 反编译前 (doc 88-98) | 反编译后 | 新增 |
|---|---|---|---|
| com.aicode .java 文件 | 104 | 413 | +309 |
| 包目录数 | 21 | 68 | +47 |
| H() 解码器定义类 | 7 (已知) | 7 (无新增) | 0 |
1.2 新增包完整清单
从 0 到完整覆盖的包(27 个新包):
| 包 | 文件数 | 关键类 |
|---|---|---|
action/ | 40 | AcceptInlaysAction, CycleNextEditorInlays, DisposeInlaysAction, RequestCodeGenerateAction, ActionsUtil |
action/batch/ | 14 | BatchUnitTestDialog, GeneratorConfig, MethodGeneratorConfig, ResultTree |
action/click/ | 5 | EditorActionGroup |
complete/ | 3 | InlayCompletionHintFactory, InlayGotItListener, InlayListener |
content/ | 5 | ContentHelper (含子包) |
content/util/ | 5 | EditorUtils, OverlayUtils, PsiUtils |
content/util/file/ | 3 | FileExtensionLanguageDetails, LanguageFileExtensionDetails |
diff/ | 6 | CloudDiffUtil, DiffDialog, DiffService, FileInfo, FileService, GenericUtils |
domain/ | 7 | CommandCache, GetTipsResult, LineInfo, Position, Range, Suggestion, VirtualFileUri |
dto/ | 2 | FileIndexDto, GitResponseDTO |
error/ | 2 | DebuggerFilter, Presentation |
exception/ | 2 | RequestCancelException, RequestTimeoutException |
generate/ | 3 | CodeTipUtil, DefaultInlayList, SimpleCodeTipCache |
icons/ | 1 | PluginIcons |
inline/action/ | 10 | OpenInlineChatAction, CloseInlineChatAction, SendMessageAction, StopAction |
inline/action/operate/ | 6 | InlineChatAcceptAction, RejectAction, RetryAction, StopAction, UndoAction |
inline/ide/ | 10 | ActionScope, IdeActionService, IdeEditorActionRouter, PredicateFactory |
inline/listener/ | 1 | InlineChatInputBorderFocusListener |
inline/render/ | 4 | InlineChatBtnPanelRenderer, CategoryPanelRenderer, ErrorPanelRenderer, StopPanelRenderer |
inline/status/ | 5 | InlineChatStatusService, InlineChatStatusServiceProvider, InlineStatusService |
language/ | 6 | AICodeExtendedLanguageSupport, AICodeLanguageInfo, LanguageInfoManager, LanguageMap |
message/ | 1 | Message (消息类) |
service/ | 28 | EditorManagerService, RequestTipService, TipCache, TipRenderer, ProjectService |
statusBar/ | 2 | AICodeStatusBarProvider, StatusBarComponent |
template/ | 72 | 含 10+ 子包: context/domain, fileloader, generator, request/dto 等 |
test/ | 15 | BatchUnitTestService, CppTestService, UnitTestDialog, UnitTestService |
test/dto/ | 11 | BatchUnitTestDto, UnitTestAgentDto, UnitTestCollectDto, UnitTestPromptDto |
toolwindow/ | 4 | PluginEditorInlayHintsProvider, PluginHintSettings, ProjectToolWindowFactory |
ui/ | 6 | ActionButton, Font, RoundLineBorder, SendStopActionButtonPanel, Style |
util/ | 30 | AICodeUtils, ApplicationUtil, EditorCacheUtil, FileUtils, Maps, PsiUtils 等 |
2. 核心新发现
2.1 H() 混淆解码器——无新增定义
对所有新反编译的 309 个文件进行 v[] 序列扫描,未发现新的 H() 解码器定义类。原有的 7 个定义类(已知在 Q 包和各 service 类中)覆盖了所有 H() 混淆调用。
确认:doc 67 的"7 个定义类"结论完整,无需补充。
2.2 Inlay 渲染系统完整源码
此前 doc 78 通过常量池扫描推断的 Inlay 渲染系统,现通过源码确认:
| 类 | 包 | 职责 |
|---|---|---|
InlayCompletionHintFactory | complete/ | 补全 hint 工厂,创建 Inlay 提示 |
InlayGotItListener | complete/ | "Got It" 提示监听器 |
InlayListener | complete/ | Inlay 事件监听器 |
AcceptInlaysAction | action/ | Tab 接受 Inlay 补全 |
AcceptLineCodeInlaysAction | action/ | Ctrl+Down 逐行采纳 |
AcceptWordInlaysAction | action/ | Ctrl+Right 逐词采纳 |
CycleNextEditorInlays | action/ | Alt+] 下一个补全 |
CyclePreviousEditorInlays | action/ | Alt+[ 上一个补全 |
DisposeInlaysAction | action/ | Esc 清除补全 |
CodeEditorInlay | service/ | 编辑器 Inlay 模型 |
CodeInlayList | service/ | Inlay 列表管理 |
TipRenderer | service/ | Inlay 提示渲染器 |
PluginEditorInlayHintsProvider | toolwindow/ | IDE Inlay Provider 注册 |
新的发现: InlayCompletionHintFactory 负责创建提示 UI,与 TipCache(缓存层)交互;AcceptInlaysAction 的快捷键绑定通过 plugin.xml 中的 Action ID 注册。
2.3 快捷键/操作精确绑定
Action 快捷键映射(新源码确认):
| Action | Action ID | 快捷键 | 类 |
|---|---|---|---|
| 接受补全 | com.aicode.action.AcceptInlaysAction | Tab | AcceptInlaysAction |
| 逐行接受 | com.aicode.action.AcceptLineCodeInlaysAction | Ctrl+Down | AcceptLineCodeInlaysAction |
| 逐词接受 | com.aicode.action.AcceptWordInlaysAction | Ctrl+Right | AcceptWordInlaysAction |
| 下一个 | com.aicode.action.CycleNextEditorInlays | Alt+] | CycleNextEditorInlays |
| 上一个 | com.aicode.action.CyclePreviousEditorInlays | Alt+[ | CyclePreviousEditorInlays |
| 清除 | com.aicode.action.DisposeInlaysAction | Esc | DisposeInlaysAction |
| 自动触发 | com.aicode.action.EnableAutoTriggerCodeGenerateAction | Toggle | EnableAutoTriggerCodeGenerateAction |
| 请求补全 | com.aicode.action.RequestCodeGenerateAction | Alt+\ | RequestCodeGenerateAction |
| 登出 | com.aicode.action.LogoutAction | — | LogoutAction |
内联聊天快捷键(inline/action/ 包):
| Action | 类 | 操作 |
|---|---|---|
| 打开内联聊天 | OpenInlineChatAction | Alt+\ 选中文本后 |
| 关闭内联聊天 | CloseInlineChatAction | 关闭面板 |
| 发送消息 | SendMessageAction | Enter 发送 |
| 停止生成 | StopAction | 停止流式响应 |
| 接受内联 | InlineChatAcceptAction | Alt+Y |
| 拒绝内联 | InlineChatRejectAction | Alt+X |
| 重试内联 | InlineChatRetryAction | 重新生成 |
| 停止内联 | InlineChatStopAction | Alt+Z |
| 撤销内联 | InlineChatUndoAction | 撤销变更 |
新的发现: InlineChatAcceptAction 和 InlineChatRejectAction 代码确认了它们通过 InlineChatStatusService 追踪内联聊天的状态和生命周期。
2.4 GeneratorConfig 与混淆字段
GeneratorConfig 类(action/batch/GeneratorConfig.java)首次获得反编译源码验证。之前的文档只通过常量池推测其结构,现在看到其字段使用了大量混淆的字段名——这是 Java 混淆器将字段名重命名为 Java 关键字的结果:
f73break - Boolean (break)
f74class - boolean (class)
f75true - List<String> (true)
f76this - List<String> (this)
f77else - List<String> (else)
f78char - String (char)
f79int - boolean (int)
f80new - DuplicateRule (new)
f81long - Integer (long)
f82super - Boolean (super) 默认值 = true
f83for - UnitTestBaseEnum (for)
f84if - String (if)
f85case - boolean (case)
f86final - Module (final)
f87try - Module (try)新的发现: 这种"Java 关键字重命名"混淆技术在 MethodGeneratorConfig 和其他配置类中也有大量使用。之前文档未记录此混淆技术。
2.5 模板系统完整结构
template/ 包(72 个文件)是 iFlyCode 中最复杂的子系统,首次完整反编译:
模板领域模型(template/context/domain/):
Method,Field,Param,Type,Node,Reference— 完整的代码元素模型MethodCall,MethodCallArgument,StaticMethodCall,SyntheticParam— 方法调用图- 这些模型用于 Velocity 模板渲染时的数据填充
模板加载系统(template/fileloader/):
FTManager— 模板管理器,管理模板注册和生命周期FileTemplatesLoader— 模板文件加载器TemplateRegistry— 模板注册中心TemplateDescriptor,TemplateRole— 模板描述和角色定义UnitFileTemplate,UnitTemplateManager— 单测模板管理
模板生成器(template/generator/):
CreateTestFileTask,CreateTestMethodTask— 测试文件和方法的创建GeneratorProcess,GeneratorFileConfig,GeneratorTemplateConfig— 生成流程TestFileTemplateUtil,GeneratedClassNameResolver,ClassNameSelection— 辅助工具
模板请求(template/request/dto/):
CaseBranch,CaseParam,CaseResult— 测试用例分支/参数/结果ToMockMethod,TypeEnum— Mock 方法定义和类型枚举
新的发现: Velocity 模板系统比之前 doc 75 中描述的更庞大。CreateTestFileTask 和 CreateTestMethodTask 是实际执行测试文件创建的核心类,包含 800+ 字符串常量(doc 36 Top5)。
2.6 EditorManagerService 与服务层架构
此前 doc 76 对 EditorManagerService 的描述主要基于常量池扫描。现在有了完整源码确认:
service/ 包(28 个文件)中的关键类:
| 类 | 职责 |
|---|---|
EditorManagerService | 编辑器服务—Inlay 管理、补全协调 |
EditorRequestService | 编辑器请求服务—请求创建与发送 |
RequestTipService | 请求提示服务—补全请求入口 |
EditorSupport | 编辑器支持—文件/语言检测 |
CodeEditorInlay | 编辑器 Inlay 表示 |
CodeInlayList | Inlay 列表(LRU 缓存) |
CodeTip | 代码提示对象 |
TipCache | 提示缓存(LRU) |
TipRenderer | 提示 UI 渲染 |
ProjectService | 项目级服务 |
LanguageInfoSupport | 语言信息支持 |
ProcessStatusListener | 处理状态监听器 |
新的发现: TipCache 使用 LinkedHashMap 实现 LRU 缓存(非之前推测的自定义缓存);EditorRequestService 负责在 DocumentListener 触发和 Action 触发之间协调请求。
2.7 util 包的 H() 调用分布
util 包(30 个文件)中有 20 个类调用 H() 进行字符串解码。这是之前未记录的:
| 工具类 | H() 调用次数(估计) | 用途 |
|---|---|---|
| AICodeStringUtil | 中 | 字符串处理 |
| AICodeUtils | 高 | 通用工具(含 H() 调用) |
| Application | 低 | 应用信息 |
| ApplicationUtil | 低 | 应用工具 |
| CodeCheckUtil | 中 | 代码检查工具 |
| EditorCacheUtil | 高 | 编辑器缓存 |
| FileUtil/FileUtils | 高 | 文件操作 |
| LogUtil | 低 | 日志工具 |
| Maps | 中 | Map 工具 |
| PluginInfoUtils | 中 | 插件信息 |
| VirtualFileUtils | 中 | 虚拟文件工具 |
2.8 IDE 集成差异源码确认
inline/ide/ 包(10 个文件)提供了跨 IDE 适配的实现:
| 类 | 职责 |
|---|---|
IdeActionService | IDE 动作服务—管理快捷键到 Action 的映射 |
IdeEditorActionRouter | IDE 编辑器动作路由—将 IDE 事件路由到 Inline Chat |
ConditionalEditorActionHandler | 条件编辑器动作处理器 |
ConditionalEditorActionPredicate | 条件编辑器动作谓词 |
ActionScope | 动作作用域(定义在哪类 IDE 中可用) |
PredicateFactory | 谓词工厂 |
DefaultActionScopePredicateFactory | 默认作用域谓词 |
新的发现: ActionScope 和条件谓词系统解释了 doc 72 中跨 IDE 的差异。IDEA/VSCode/Eclipse 各自有不同谓词。IdeEditorActionRouter 在 IDEA 中直接集成,在 VSCode 和 Eclipse 中使用不同的 ActionScope 配置。
2.9 新的安全问题
通过反编译新源码发现的潜在安全问题:
| 发现 | 类 | 说明 |
|---|---|---|
| DebuggerFilter 硬编码过滤 | error/search/DebuggerFilter.java | 调试器过滤器包含可点击调试提示 |
| FileIndexDto 明文路径 | dto/FileIndexDto.java | 代码搜索的文件索引包含完整本地路径 |
| GitResponseDTO Token | dto/GitResponseDTO.java | Git 认证响应 DTO |
| PluginIcons 资源路径 | icons/PluginIcons.java | 图标加载路径(可能暴露内部资源结构) |
3. 与已有文档的差异校正
3.1 doc 36 类清单补充
doc 36 原列出 163 个类,缺少了约 250+ 个新反编译的类(主要来自 template 子包和内部类)。建议完全按照现在的 413 个反编译文件重建类清单。
3.2 doc 78 Inlay 系统补充
新增的文件证实了 Inlay 渲染管线的全貌:InlayCompletionHintFactory → TipCache → AcceptInlaysAction → EditorManagerService。doc 78 中描述的"6 快捷键映射"通过 action/ 包源码完全确认。
3.3 doc 75 Velocity 模板系统补充
模板系统的幕后实现:之前 doc 75 提到了 6 阶段时序和 17 模板变量,现在通过 template/context/domain/ 包看到了具体的数据模型(Method, Field, Param, Type 等),以及通过 template/generator/ 包的 CreateTestFileTask, CreateTestMethodTask 看到实际的生成过程。
3.4 doc 77 WebSocket 分发链补充
WebSocket 分发链涉及的 action/ 和 action/batch/ 包源码提供了命令触发端的完整视图。
4. 后续分析建议
- 深度分析 template 系统(72 个文件): 这是 iFlyCode 最复杂的子系统,值得单独一个文档分析其 Velocity 模板渲染引擎和单测生成逻辑
- util 包 H() 调用统计: 虽然无新解码器定义,但 20/30 个 util 类使用 H() 的事实说明 H() 调用覆盖了比之前估计更广的范围
- 动态验证交叉比对: 使用新反编译源码与之前 doc 中的推断结论进行交叉比对,修正可能的错误
- 跨 IDE 差异源码分析:
inline/ide/包的ActionScope和谓词系统值得进一步研究
5. 统计总结
| 统计项 | 数值 |
|---|---|
| 原反编译 .java 文件数 | 104 |
| 新增反编译 .java 文件数 | +309 |
| 现总计 | 413 |
| 新增包目录 | +47 |
| 新增 H() 解码器定义 | 0(确认原有 7 类已覆盖) |
| 已分析的新字符串常量 | ~3000+(在新增 309 个文件中) |