使用ASTView分析代码调用关系分析的具体应用
来源:互联网 发布:js动态添加a标签 编辑:程序博客网 时间:2024/04/30 09:08
受到understand的工具的启发,想自己做一个针对java类的代码静态调用工具。
先举个例子:
方法名称:com.person.api.AccountAPI.getPersonLeastInfo(args[1])
call {[
com.house.api.HouseApiTest.test_getConfusedPhoneNumber_normal(args[0])_935,
com.house.service.impl.UserServiceImpl.getUserInfo(args[3])_66,
com.house.api.HouseApiTest.test_getPhoneNumber_normal(args[0])_899
]}
先说下成果,可以通过关键词,计算出xxx类的方法被哪些模块的哪些方法调用例如上图计算出来的,
com.person.api.AccountAPI这个类的getPersonLeastInfo(1个参数的方法),被调用3处,分别在3个不同类的935行(0个参数方法),66行(3个参数方法),899行(0个参数方法)。
作用:可以在研发提交代码后,或者研发修改代码后,自动扫描代码的影响面。往小了说 就是修改一处代码 那里被影响了。
适用于:java类代码跨模块之间调用,如果是单一模块的话 可以直接用eclipse里面的open call hierarchy直接使用。
实现的流程哈:
第1步,首先先确保你的所有要扫描的代码都是最新的代码(这里多说几句,可以更加版本号进行比对,或者做一个类似于jenkins那样的定时触发工具。。好多种做法这个就不一一去说了)
第2步,通过递归的办法,一个一个文件扫描出来所有的*.java类文件,并记录下他们的位置
第3步,通过调用ASTView,一行一行,一个方法一个方法的吧 一个*.java里面的信息存储到一个大的集合中。
1-3步完成后,已经可以知道了很多信息,但是这些信息 仅仅是A方法中调用了哪些B方法
例如
public void A{
B();
}
第4步,这时,我们知道了A都调用了哪些B,但是我们的需求可能是B方法被哪些A调用了。
这时就需要从新变量一般我们第3步的集合, 在遍历的时候,我们可以增加一些简单的过滤逻辑,比如只过滤xxxx模块的,只过滤xxxx名字的。很多种条件,按照自己需要的去实现
- 使用ASTView分析代码调用关系分析的具体应用
- Atitit main函数的ast分析 数组参数调用的ast astview解析
- 使用egypt+graphviz分析ffplay的函数调用关系图
- 使用egypt+graphviz分析ffplay的函数调用关系图
- __SWI的具体分析
- 具体命令的分析
- 一个静态分析调用关系的东西
- Nginx的主要函数调用关系分析
- 文件的存储与读取分析后续具体应用
- pluto实现分析(2)——代码函数调用关系
- 分析PHP生成html文件的具体代码示例
- Java Condition 的await(), singal(), singalAll() 具体代码实现分析,
- 用于分析和生成代码函数调用关系图的相关工具
- 具体问题具体分析
- container_of 宏的具体分析
- 循环队列的具体分析
- Bitmap header的具体分析
- Fabric 智能合约具体代码模板分析
- mysql mysqli pdo区别
- android事件拦截处理机制---详解 onInterceptTouchEven onTouchEvent
- C/C++——set的基本操作总结
- Google推荐的图片加载库Glide介绍
- 二维码扫描
- 使用ASTView分析代码调用关系分析的具体应用
- 飞控中使用到数学函数
- CTS 源码分析(一)--CTS概况
- Emeditor ,果然很强大!
- String StringBuffer和StringBuilder异同
- QT5中文显示乱码解决方法
- 支付系统开发--简易版支付系统部署(单节点)
- 严重: The web application [] appears to have started a thread named [Thread-
- HDFS Shell 命令