静态代码分析程序的流程设计

大家好我是王有志,一个分享硬核 Java 技术的金融摸鱼侠。本文首发于微信公众号王有志

上一篇文章中,我向大家汇报了 CA 的诞生,定位,能力与使用,今天向各位汇报下 CA 的设计与实现。

Tips:在设计 CA 的整体流程时,我们预设了一个前提,待分析的项目是通过 Maven 构建的 Java 项目,并使用 Git 进行版本控制。

CA 的流程设计

我们先来回顾下上一篇文章中提到的 CA 的两个核心功能:

  • 功能 1: 根据分支间的差异,解析到本次修改的方法,并分析出方法的调用链路;
  • 功能 2: 通过指定类型和方法,分析该类型中的指定方法,在程序中的调用链路。

在功能 1 中,CA 需要做 3 件事情:

  1. 对比分支间差异,解析到发生变更的方法;
  2. 通过发生变更的方法,生成方法调用链路;
  3. 使用方法调用链路,输出不同形式的报告。

在功能 2 中,CA 只需要做两件事:

  1. 通过用户指定的方法,生成方法调用链路;
  2. 使用方法调用链路,输出不同形式的报告。

可以看到,功能 1 和功能 2 都要分析方法的调用链路,输出不同形式的报告,只不过对于功能 1 来说,这个方法是分支对比后的结果,对于功能 2 来说,这个方法是用户指定的,那么功能 2 就相当于功能 1 的子集,我们只需要完成功能 1 的设计,并将公共的部分提取出来,复用到功能 2 中就可以了。

对于这种情况,我们首先想到的是使用责任链模式来设计 CA 的主流程,责任链中每个节点负责独立的逻辑处理,CA 只需要根据功能来组装责任链的节点就可以实现不同的需求了,那么我们的初版的设计如下图所示ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术范王有志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值