Skip to content

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 文件104413+309
包目录数2168+47
H() 解码器定义类7 (已知)7 (无新增)0

1.2 新增包完整清单

从 0 到完整覆盖的包(27 个新包):

文件数关键类
action/40AcceptInlaysAction, CycleNextEditorInlays, DisposeInlaysAction, RequestCodeGenerateAction, ActionsUtil
action/batch/14BatchUnitTestDialog, GeneratorConfig, MethodGeneratorConfig, ResultTree
action/click/5EditorActionGroup
complete/3InlayCompletionHintFactory, InlayGotItListener, InlayListener
content/5ContentHelper (含子包)
content/util/5EditorUtils, OverlayUtils, PsiUtils
content/util/file/3FileExtensionLanguageDetails, LanguageFileExtensionDetails
diff/6CloudDiffUtil, DiffDialog, DiffService, FileInfo, FileService, GenericUtils
domain/7CommandCache, GetTipsResult, LineInfo, Position, Range, Suggestion, VirtualFileUri
dto/2FileIndexDto, GitResponseDTO
error/2DebuggerFilter, Presentation
exception/2RequestCancelException, RequestTimeoutException
generate/3CodeTipUtil, DefaultInlayList, SimpleCodeTipCache
icons/1PluginIcons
inline/action/10OpenInlineChatAction, CloseInlineChatAction, SendMessageAction, StopAction
inline/action/operate/6InlineChatAcceptAction, RejectAction, RetryAction, StopAction, UndoAction
inline/ide/10ActionScope, IdeActionService, IdeEditorActionRouter, PredicateFactory
inline/listener/1InlineChatInputBorderFocusListener
inline/render/4InlineChatBtnPanelRenderer, CategoryPanelRenderer, ErrorPanelRenderer, StopPanelRenderer
inline/status/5InlineChatStatusService, InlineChatStatusServiceProvider, InlineStatusService
language/6AICodeExtendedLanguageSupport, AICodeLanguageInfo, LanguageInfoManager, LanguageMap
message/1Message (消息类)
service/28EditorManagerService, RequestTipService, TipCache, TipRenderer, ProjectService
statusBar/2AICodeStatusBarProvider, StatusBarComponent
template/72含 10+ 子包: context/domain, fileloader, generator, request/dto 等
test/15BatchUnitTestService, CppTestService, UnitTestDialog, UnitTestService
test/dto/11BatchUnitTestDto, UnitTestAgentDto, UnitTestCollectDto, UnitTestPromptDto
toolwindow/4PluginEditorInlayHintsProvider, PluginHintSettings, ProjectToolWindowFactory
ui/6ActionButton, Font, RoundLineBorder, SendStopActionButtonPanel, Style
util/30AICodeUtils, 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 渲染系统,现通过源码确认:

职责
InlayCompletionHintFactorycomplete/补全 hint 工厂,创建 Inlay 提示
InlayGotItListenercomplete/"Got It" 提示监听器
InlayListenercomplete/Inlay 事件监听器
AcceptInlaysActionaction/Tab 接受 Inlay 补全
AcceptLineCodeInlaysActionaction/Ctrl+Down 逐行采纳
AcceptWordInlaysActionaction/Ctrl+Right 逐词采纳
CycleNextEditorInlaysaction/Alt+] 下一个补全
CyclePreviousEditorInlaysaction/Alt+[ 上一个补全
DisposeInlaysActionaction/Esc 清除补全
CodeEditorInlayservice/编辑器 Inlay 模型
CodeInlayListservice/Inlay 列表管理
TipRendererservice/Inlay 提示渲染器
PluginEditorInlayHintsProvidertoolwindow/IDE Inlay Provider 注册

新的发现: InlayCompletionHintFactory 负责创建提示 UI,与 TipCache(缓存层)交互;AcceptInlaysAction 的快捷键绑定通过 plugin.xml 中的 Action ID 注册。

2.3 快捷键/操作精确绑定

Action 快捷键映射(新源码确认):

ActionAction ID快捷键
接受补全com.aicode.action.AcceptInlaysActionTabAcceptInlaysAction
逐行接受com.aicode.action.AcceptLineCodeInlaysActionCtrl+DownAcceptLineCodeInlaysAction
逐词接受com.aicode.action.AcceptWordInlaysActionCtrl+RightAcceptWordInlaysAction
下一个com.aicode.action.CycleNextEditorInlaysAlt+]CycleNextEditorInlays
上一个com.aicode.action.CyclePreviousEditorInlaysAlt+[CyclePreviousEditorInlays
清除com.aicode.action.DisposeInlaysActionEscDisposeInlaysAction
自动触发com.aicode.action.EnableAutoTriggerCodeGenerateActionToggleEnableAutoTriggerCodeGenerateAction
请求补全com.aicode.action.RequestCodeGenerateActionAlt+\RequestCodeGenerateAction
登出com.aicode.action.LogoutActionLogoutAction

内联聊天快捷键(inline/action/ 包):

Action操作
打开内联聊天OpenInlineChatActionAlt+\ 选中文本后
关闭内联聊天CloseInlineChatAction关闭面板
发送消息SendMessageActionEnter 发送
停止生成StopAction停止流式响应
接受内联InlineChatAcceptActionAlt+Y
拒绝内联InlineChatRejectActionAlt+X
重试内联InlineChatRetryAction重新生成
停止内联InlineChatStopActionAlt+Z
撤销内联InlineChatUndoAction撤销变更

新的发现: InlineChatAcceptActionInlineChatRejectAction 代码确认了它们通过 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 中描述的更庞大。CreateTestFileTaskCreateTestMethodTask 是实际执行测试文件创建的核心类,包含 800+ 字符串常量(doc 36 Top5)。

2.6 EditorManagerService 与服务层架构

此前 doc 76 对 EditorManagerService 的描述主要基于常量池扫描。现在有了完整源码确认:

service/ 包(28 个文件)中的关键类:

职责
EditorManagerService编辑器服务—Inlay 管理、补全协调
EditorRequestService编辑器请求服务—请求创建与发送
RequestTipService请求提示服务—补全请求入口
EditorSupport编辑器支持—文件/语言检测
CodeEditorInlay编辑器 Inlay 表示
CodeInlayListInlay 列表(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日志工具
MapsMap 工具
PluginInfoUtils插件信息
VirtualFileUtils虚拟文件工具

2.8 IDE 集成差异源码确认

inline/ide/ 包(10 个文件)提供了跨 IDE 适配的实现:

职责
IdeActionServiceIDE 动作服务—管理快捷键到 Action 的映射
IdeEditorActionRouterIDE 编辑器动作路由—将 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 Tokendto/GitResponseDTO.javaGit 认证响应 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. 后续分析建议

  1. 深度分析 template 系统(72 个文件): 这是 iFlyCode 最复杂的子系统,值得单独一个文档分析其 Velocity 模板渲染引擎和单测生成逻辑
  2. util 包 H() 调用统计: 虽然无新解码器定义,但 20/30 个 util 类使用 H() 的事实说明 H() 调用覆盖了比之前估计更广的范围
  3. 动态验证交叉比对: 使用新反编译源码与之前 doc 中的推断结论进行交叉比对,修正可能的错误
  4. 跨 IDE 差异源码分析: inline/ide/ 包的 ActionScope 和谓词系统值得进一步研究

5. 统计总结

统计项数值
原反编译 .java 文件数104
新增反编译 .java 文件数+309
现总计413
新增包目录+47
新增 H() 解码器定义0(确认原有 7 类已覆盖)
已分析的新字符串常量~3000+(在新增 309 个文件中)

本项目仅供学习研究,逆向分析内容归原厂商所有。