1 Star 1 Fork 2

RazorX7/Java-oriented-analysis-and-understanding-tool

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Java-oriented-analysis-and-understanding-tool

1.介绍

面向Java的分析与理解工具,该工具为应用 Javaparser 的一个简单的示例代码。新建maven项目,并添加javaparser依赖后的代码框架。

2.使用说明

  • 环境变量:请自行配置好 Java11 环境
  • data文件夹中存放了一些Java代码,作为本demo的演示。

3.Java Parser

javaparser是一个可以将java源码解析为一棵语法树,然后基于这棵树对java代码进行分析和修改的工具。

3.1 AST 打印

Java Parser AST打印有多种方式,当前支持三种打印方式:Yaml、XML和 Graphiz 可以识别的dot的图片生成的格式。

3.2 AST遍历

在Java Parser中,AST的遍历采用的是访问者模式,在访问者模式的基础上,增加了一个简单的包装器。重写visit方法。例如重写visit IFStmt的方法,与重写ForStmt方法:

@Override
    public void visit(IfStmt n, Object arg){
        //TODO:Perfect this method
        strCFS+="If_start,";
        visit(n.getThenStmt(),arg);
        strCFS+="If_end,";

        if(n.hasElseBlock()||n.hasElseBranch()){
            if(n.getElseStmt().isPresent()){
                strCFS+="Else_start,";
                visit(n.getElseStmt().get(),arg);
                strCFS+="Else_end,";
            }
        }
    }
 @Override
    public void visit(ForStmt n, Object arg){
        //TODO:Perfect this method
        strCFS+="For_start,";
        visit(n.getBody(),arg);
        strCFS+="For_end,";
    }

我们可以得到样例代码BigNum中方法getBigNum(int a, int b)的程序控制流为:

For_start,If_start,If_end,Else_start,Else_end,For_end
public class BigNum{
    public void getBigNum(int a, int b){
        for(int i=0;i<10;i++) {
            if (a > b) {
                System.out.println(a);
            } else
                System.out.println(b);
        }
    }
}

4 实现

JavaParser还有许多应用等着你们去挖掘,大家可以先上手对更复杂的程序控制流结构进行提取来感受JavaParser,鼓励大家多多看JavaParser源码的实现以及JavaParser官方文档。

空文件

简介

取消

发行版

暂无发行版

贡献者

全部

语言

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/LinnaXie/java-oriented-analysis-and-understanding-tool.git
git@gitee.com:LinnaXie/java-oriented-analysis-and-understanding-tool.git
LinnaXie
java-oriented-analysis-and-understanding-tool
Java-oriented-analysis-and-understanding-tool
master

搜索帮助