Install
openclaw skills install @extraskittles/code-yinyong从用户指定的 Java 方法向上追溯调用方,生成调用图直到 HTTP 接口或 RPC 方法等入口尽头。搜索范围限于当前 Git 仓库,不跨服务。Use when the user asks for caller graph, upstream call chain, who calls this method, 代码引用, 引用方, 调用图, or 向上追溯.
openclaw skills install @extraskittles/code-yinyong根据代码证据只读分析,生成指定 Java 方法的向上调用图(谁调用了它,一直追到入口)。不修改业务代码,不跨服务搜索。
@RestController / @Controller 类上带 @RequestMapping、@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping 的方法。@DubboService、@Service(Dubbo)、@HSFProvider、@RpcService 等注解的实现类中的对外方法;或明确标注为 RPC 接口实现且在本仓库被暴露的方法。@Scheduled、@XxlJob、@KafkaListener、@RocketMQMessageListener、CommandLineRunner / ApplicationRunner、Servlet Filter/Interceptor 的入口方法。标注为「非 HTTP/RPC 入口」。ClassName.methodName、包名.类名.方法名、文件路径 + 方法名、或粘贴的方法签名。rg 补全;存在重载时结合参数类型、行号或调用点消歧。1. 定位目标方法(文件、类、行号)
2. 确认所属 Git 仓库;可选 READ gitnexus://repo/{name}/context 检查索引是否过期
3. 自目标方法向上 BFS/DFS 收集调用链,直到所有分支到达入口或无法继续
4. 用 rg 核对 GitNexus 结论;消除同名方法误匹配
5. 为最上层入口和各层节点补充一句话功能说明(入口略详,中间层从简)
6. 输出调用图 + 入口汇总
读取目标方法所在类,记录:服务/模块名、完整类名、方法签名、文件绝对路径:行号。
优先 GitNexus(若当前环境已索引该仓库):
gitnexus_context({ name, file_path, kind: "Method" }) 获取直接 callers。context,或一次性用 cypher 查多跳上游:MATCH path = (entry)-[:CodeRelation*1..10 {type: 'CALLS'}]->(target:Method {name: "目标方法名"})
WHERE entry.filePath CONTAINS "目标文件名"
RETURN [n IN nodes(path) | n.name + " @ " + n.filePath] AS chain
LIMIT 50
npx gitnexus analyze,同时改用 rg 手工追溯。rg 回退策略(GitNexus 不可用或需核对时):
rg '\.methodName\s*\(' --glob '*.java' 与 rg 'methodName\s*\('(排除定义处)。@Autowired 注入字段类型)。对每个到达顶层的 caller,读取其类注解与方法注解:
| 类型 | 识别依据 | 输出标签 |
|---|---|---|
| HTTP | Controller 类 + Mapping 注解 | HTTP {METHOD} {path} |
| RPC 提供方 | Dubbo/HSF 等 Service 注解 | RPC {接口/类名}.{方法} |
| 定时/消息 | Scheduled / XxlJob / Listener | JOB / MQ / SCHEDULED |
| 无上层调用 | 仓库内未找到 caller | ROOT(可能是入口或动态调用) |
HTTP path 拼接规则:类级 @RequestMapping + 方法级 mapping 合并;无法静态确认时标注「路径需运行时确认」。
定位到入口后,只做概览级说明,不展开内部实现、数据库表或分支细节。
测试接口:触发邮件删档并写入 Doris。校验退款参数、组装 IMAP 连接。src/test 测试代码,除非用户明确要求包含测试。使用中文。先给结论,再给图和证据。
完整签名 @ 文件:行号默认用 Mermaid(自上而下:入口 → … → 目标):
类名.方法名 + 换行 + 一句话功能说明;入口节点额外保留 HTTP/RPC 与 path。| 入口类型 | 入口标识 | 入口功能(概览) | 调用链(入口 → 目标) | 置信度 |
|---|---|---|---|---|
| HTTP POST | /order/create | 创建订单 | OrderController.createOrder → … → calculateFee | 已确认 |
置信度:已确认(静态调用证据完整)/ 可能(反射、动态代理、接口多实现)/ 未闭合(上层 caller 未找到)。
绝对路径:行号。publishEvent)、异步(@Async)可能导致静态图不完整,需标注。分析代码 skill。输入:RefundService.calculateFee
输出摘要:
RefundService.calculateFee/refund/apply 等路由详细示例见 examples.md。