Skip to content

styzf/java-callgraph-styzf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

1、说明

项目基于java-callgraph2开发,主要目的在于Java调用链路的解析。具体项目内容可以看源项目链接,目前的改动并不大。

2、现状变更说明

废弃原有开始类,重新写了一个com.styzf.link.parser.stat.CallDataGenerate,项目入口在这里调用main方法即可生成数据

对比原有的类,有以下几点变更

1、把io流输出的代码删了,这一个可以参考原先的代码,准备把这块写到生成器中去

2、基于现状,写了一个com.styzf.link.parser.parser.ParserInterface,并通过抽象com.styzf.link.parser.parser.AbstractLinkParser完成数据链路解析,其他生成器通过内嵌解析器进行数据的解析和生成

3、定义了文件生成类com.styzf.link.parser.generator.FileGenerate,在txt包中实现原先所有的输出功能,另外添加解析到接口,以及解析到数据库的功能实现

4、xmind包,可以生成xmind文件,puml包,用于生成puml文件

5、框架底层用的bcel,作者已经做了基础的解析工作了,用的时候可以学习了解一下

3、目前待完成需求内容

1、将原先项目io生成的文件放到com.styzf.link.parser.generator.txt包中实现,并且按照新的规则实现接口方法com.styzf.link.parser.generator.FileGenerate(目前只实现了一个调用关系的文件生成处理)

2、txt生成的文件添加一个向上调用解析末级方法的功能,一个向下解析末级方法的功能。需要有一个截止判断

3、上下文解析适配spring接口、mybatis,做好能获取到接口信息、mybatis的sql解析,spring类的注解原作者好像有做解析,可以做一下参考,mybatis应该要写扩展解析功能

4、实现从接口解析,解析出来所有可能会调用到的数据库sql

5、从mybatis的类或者方法解析,解析出来所有可能调用到的接口,并展示所有的调用链路

6、解析是否为if条件括号中调用的方法,判断是否在if大括号中的方法,判断为true调用还是false调用

7、解析是否为for循环内调用

8、文档注释解析(已完成)部分功能不完善,例如继承的情况下,框架解析的是接口入参类型,而文档解析出来的是实现类的类型

9、数据量过大的时候,考虑分多个文件输出,或者存储在数据库中,具体怎么拆分具体再考虑

10、解析和调用的入参都取消,全部通过上下文进行传参,上下文应当考虑扩展问题

11、接口调用实现,涉及多类实现的,尽量确认具体的调用方(重点,优先处理)

例如:a接口,有b、c、d三个实现,实现类各自实现了a接口方法,b调用链路应该是“调用方”->a->b,而不是“调用方”->a->b、c、d

4、已完成需求

1、解析调用链路com.styzf.link.parser.parser.AbstractLinkParser,辨别是否为循环调用com.styzf.link.parser.parser.AbstractLinkParser.loopHandle

2、调用关系文件生成com.styzf.link.parser.generator.txt.MethodCallTxtGeneratot

3、解析过程添加正则筛选

4、文件生成添加计时器

5、添加pom文件加载功能,通过解析pom文件中所有jar,完成解析

6、接口有默认实现的方法,子类调用接口方法直到出现子类有实现方法为止

About

调用链路解析

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages