Skip to content

fix(desktop): 保留虚拟源码语言和 URI,取消过期类导航 - #1906

Merged
1lck merged 2 commits into
previewfrom
codex/java-binary-navigation
Nov 14, 2026
Merged

1lck merged 2 commits into
previewfrom
codex/java-binary-navigation

Conversation

@1lck

@1lck 1lck commented Nov 14, 2026 •

Copy link
Copy Markdown
Owner

关联 Issue / Linked issue

PR 类型 / Type

  • fix:缺陷修复

改动说明 / What changes

背景 / Why

依赖类的定义返回虚拟 URI 后,Viva 没有赋予文档语言,并再次按磁盘路径转换 URI,导致只读源码不能继续发起正确的语言导航。慢内容响应还可能在用户移动光标后打开标签抢走焦点。Java 插件另行提供既有内容扩展点;本 PR 只修通用呈现接线。

改动 / Changes

  • 按既有语法注册表为虚拟文档选择语言,文本准备和语法加载放后台,UI 线程只提交只读标签。
  • 虚拟文档同步保留原始 URI(含查询编码);磁盘文档继续使用既有原生路径转换,Core 仍校验 URI。
  • 读取绑定可见文档、版本和光标;移动、关闭或新导航取消旧请求,提交时再次检查归属,避免过期响应抢焦点。
  • 新增通用 Go 虚拟文档回归,证明没有 Java 特判;真实 JDT 自建 JAR 回归覆盖类型/方法落点、类间继续跳转、缺失内部类、过期响应和安装包哈希不变。
  • 更新功能矩阵、所属中文 Note、独立 Java 插件构建补丁的非复用资源清单/拒绝路由/测试/本地编译说明。上游补丁属于独立插件,不在宿主复制 Java 规则。

不在本 PR 范围内 / Out of scope

JSP 中的 Java 语言服务、直接把零散 class 文件当完整工程、缺失依赖或内部类恢复、内存整体优化、原生窗口验收。功能矩阵继续 partial/pending;单项无头通过不代表全功能验收。既有纯校验归属债务见 #1892。

类型专属:fix

复现与根因

  • JDT 返回 jdt: 源码目标;打开后 languageID 为空,再按文件路径转换 URI,第二次导航失效。原始接线来自 0faecba491;当前文档同步延续在 10385ee0a。
  • 读取延迟期间移动光标,旧响应仍开新标签:事件门控回归在去掉取消/提交保护后报 obsolete class navigation stole focus,恢复保护后通过。
  • 影响 macOS、Windows 共用 Viva 工作台;没有增加语言专属宿主分支。

检查项

  • 先写回归,修复前失败、修复后通过;私有本地 raw/HTML/JUnit 保留虚拟语言、缺失内部类、过期焦点三组 red/green,公开测试只用自建源文件。
  • [N/A] 无法自动化:关键行为均有无头自动化。
  • 已搜索调用方、Core 内容提供者契约、语言服务器同步与另一平台共用路径。
  • 两平台共用修复,Windows 实际 ZIP 和真实 JDT 验证。
  • 仅修复所需接线;已有重构债务 [Feature] 将 Viva 插件 scheme 与函数 ID 校验下沉 Rust Core #1892。
  • 所属 bug-fix Note 已同步。

范围检查 / Scope checks

逻辑归属 / Logic ownership

  • 文档/光标/焦点快照属于原生 UI 临时状态;Core 保留 URI 校验、内容协议和语言服务器编排。
  • Java URI、内容读取和上游反编译补丁全在独立 Java 插件。

多平台功能矩阵 / Platform feature matrix

  • 更新 java-support-plugin.json 的能力、证据和具体流程;未把整体能力改成 verified。
  • 变更门禁与完整矩阵门禁通过。

统一日志系统 / Unified logging

界面文案与 i18n

N/A:没有新增界面文案;既有提示仍用共享 i18n。现有检查通过。

性能与内存 / Performance and memory

  • 按需启动、无新增轮询/源码缓存;关闭回收已有进程,新增的订阅和光标归属状态有明确所有者。
  • UI 线程不准备全文或加载语法;沿用已有有界内容协议,不增加全量文档传输。
  • 固定客户端 71f48ff / Core 29b35bf、VM 关闭,新旧 ZIP 六对 AB/BA 共 12 轮通过:就绪 JDT 中位 788.38→792.14 MiB,流程结束 815.80→814.48 MiB;打开到动作 6537.93→6465.54 ms,热补全中位 12.14→11.51 ms。基本持平,不宣称优化。

设置 / Settings

N/A:没有修改设置。

插件契约 / Plugin contracts

N/A:复用现有内容提供者、函数和语言服务器请求,无新方法、协议、权限或 Core pin 变更。

发行包与资源 / Bundle and resources

  • 原生运行时不写已安装包;真实流程前后核对安装目录全量哈希,静态 bundle immutability 检查通过。
  • 独立插件补丁只在构建期修改新 staging;固定来源/编译器/class 集合/hash,修改的 EPL 源码随包提供,失效的 Eclipse JAR 签名移除,JVM 原生签名不变。清单、路由、测试、文档同步,输出不跨 worktree 复用。

无用代码与重构 / Dead code and refactoring

验证 / Verification

命令或操作 平台 结果
scripts/desktop/desktop-go.sh test ./... macOS arm64 通过,workbench 153.8 秒;合并最新 preview 3ea0b43 后再次全量通过,workbench 152.06 秒
工作台语义/虚拟文档 -race,另真实二进制导航 -race macOS 通过,真实 JDT 导航 47.55 秒
真实 ZIP:二进制导航、Gradle、Maven、通用虚拟文档,逐项 HTML/JUnit macOS 通过;13.60 / 41.08 / 21.58 秒
同组真实 ZIP 与 JDT 流程 Windows ARM 上运行 x64 工具 通过;49.77 / 119.18 / 68.18 秒
资源复用测试、Agent Note、bundle immutability、矩阵和 i18n macOS / 静态 通过
测试稳定性静态扫描 --base 04595785b 提交差异 通过;全工作区扫描被未跟踪 extension-host/node_modules 既有 78 项阻挡,未改动、未豁免这些文件

本地私有输入另验证两个残缺依赖类的类型/方法落点和类间导航;首次打开约 1.5/1.8 秒,热方法跳转约 0.1 秒。JDT RSS 约 774→993 MiB,整个无头进程树约 913→1154 MiB;关闭后 JDT 退出。只是单点观测,不能宣称内存下降或峰值。私有源码、class、JSP、反编译内容、URI/日志未提交。

最新 preview 合并后,自建无源码 JAR 全链路再次通过(18.05 秒);最终发布资产另作实际包检查。

未能执行的检查和原因: 原生窗口和完整日志界面验收未覆盖;日志生成/使用门禁缺失见 #1802。JSP 仍为 HTML,不把 Servlet/JSP HTTP 验证当源码支持。

提交前确认 / Final checks

  • 从当时最新 preview 04595785b 创建,目标 preview。
  • 以 Draft 提交,全部本地目标平台流程通过后才 ready。
  • 无构建产物、私有输入、凭据、个人路径或无关改动;未跟踪 extension-host 保留不动。
  • 本次测试拥有的 Lithe/Java 进程已清理;Windows VM 会话结束已关闭。

发布前最终核验

  • Java 1.2.0 tag 5c13e96 的 Release workflow 43568101378 成功:Linux Rust/Node 检查、静态 MSVC 原生构建/测试、三个平台包全部生成,下载的 6 个资产及各 ZIP SHA-256 已核对。
  • 最新客户端 b358654 / Core 2c1fed1:macOS 实际下载包的二进制导航 / Gradle / Maven / 通用虚拟文档通过(12.07 / 38.07 / 20.43 秒);两个 macOS 架构包的布局、原生 JVM 签名、许可、补丁 source/JAR/class/编译器哈希通过。
  • 同一客户端和 Core 的 Windows 无头实测使用 Release workflow 生成的静态 MSVC 后端:二进制导航 / Gradle / Maven 通过(46.32 / 111.67 / 67.86 秒)。全部运行文件与最终下载 ZIP 逐项相同;唯一字节差别是重打包 JDT JAR 的条目时间戳及记录该 JAR 摘要的 patch.json,JAR 内每个条目的内容均相同。最终下载 ZIP 自身的补丁及许可检查也通过。
  • 私有残缺类另各关闭重开 6 次全通过;没有上传任何私有 class、JSP、反编译内容或日志。关闭工作区 JVM 退出,Windows 测试无进程残留,VM 停止。
  • 完整 Desktop CI 43568107631 在合并后由关闭 PR 流程取消;合并提交 7c036b3 的 preview CI 43568818336 正在执行,不宣称完成。旧草稿 run 43568103772 取消后长时间未结束,已仅强制取消本任务的过时 run,让 ready 车道启动。preview 规则仍要求旧 macOS CI gate context,当前 Desktop CI 已改为 Vet and test on macOS;不修改仓库保护规则。根据用户预先授权,以管理员压缩合并,明确保留未完成 CI 状态;本地两端实际工作流及 macOS 全量/竞态检查已通过。

@ghfind-review ghfind-review Bot added the review: high ghfind author score; see https://ghfind.com label Nov 14, 2026
@1lck
1lck marked this pull request as ready for review November 14, 2026 06:48
@lithe-code-review

lithe-code-review Bot commented Nov 14, 2026 •

Copy link
Copy Markdown

Lithe Review

结论: ❓ 审查未完成

已由服务器取消。可以重新评论 @lithe review 召唤。

@1lck
1lck merged commit 7c036b3 into preview Nov 14, 2026
6 of 12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review: high ghfind author score; see https://ghfind.com

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant