You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取来自依赖库的方法调用列表(以com.google.protobuf为例)

用CodeQL获取依赖库的方法调用列表(以com.google.protobuf为例)

核心思路

通过CodeQL的Java分析库,定位所有调用目标依赖包下方法的代码位置,筛选出符合条件的调用点并输出关键信息。

前提准备

确保你的CodeQL项目已导入目标代码,且依赖库(如com.google.protobuf)的字节码/源码已被CodeQL解析(通常构建项目时配置好依赖即可)。

示例CodeQL查询

import java

// 指定目标依赖的包前缀
private string targetDependencyPrefix = "com.google.protobuf."

// 筛选所有调用com.google.protobuf包下方法的调用点
from MethodCall call, Method targetMethod
where
  // 匹配目标依赖包下的类
  targetMethod.getDeclaringType().getPackage().getName().startsWith(targetDependencyPrefix)
  // 关联调用点与被调用的方法
  and call.getMethod() = targetMethod
select
  call.getLocation(),  // 调用点的代码位置
  call,                // 具体的调用语句
  targetMethod.getDeclaringType().getQualifiedName(),  // 被调用方法所属的类全名
  targetMethod.getName()  // 被调用的方法名

查询说明

  • 导入java库是分析Java代码的基础,CodeQL会基于此解析代码的AST结构。
  • targetDependencyPrefix 用于匹配目标依赖的所有子包,避免遗漏该库下的各类方法。
  • 通过MethodCall和Method的关联,精准定位到调用依赖库方法的代码位置。
  • 输出的字段可以根据需求调整,比如增加调用方法的所属类,或者调用的参数信息。

扩展优化

  • 若只需追踪特定类的方法,可在where条件中添加精确匹配,比如:
    targetMethod.getDeclaringType().getQualifiedName() = "com.google.protobuf.Message"
    
  • 如果依赖库仅提供字节码,需确保CodeQL在构建代码数据库时包含这些字节码文件,否则无法解析到对应的方法定义。

内容的提问来源于stack exchange,提问作者James W.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:33:23