JavaParser如何获取块语句的原始行大小?

时间:2018-10-05 12:33:30

标签: java javaparser

我正在将JavaParser用于代码分析项目,在其中读取Java源文件并生成AST(抽象语法树)进行分析。我需要确定AST的给定块语句所跨越的原始行数。

基本上,我有这样的方法:

int numberOfLines(Node astNode){
....
}

我需要返回跨越的行数。示例:

void something()
{
// hello world

}

将返回5。

我尝试转换为字符串并计算行数,例如:new BufferedReader(new StringReader(nodeHere.toString())).lines().count(),但是由于缺少词法保留,因此无法正常工作……例如,单行如下:“ class TestClass { int x; int y; int zz(int a){return a;}}“变为10行:

class TestClass {

    int x;

    int y;

    int zz(int a) {
        return a;
    }
}

生成AST之后,将其转换回字符串,本质上是“美化它” ...但是,JavaParser确实在range属性中保留了原始的“坐标”,因此也许可以以某种方式使用它?

谢谢

2 个答案:

答案 0 :(得分:0)

可以使用rangetokenRange属性。即类似range.end.line - range.begin.line

答案 1 :(得分:0)

这个答案可能很晚了,但这对我有用...

public void visit(MethodDeclaration method) {
     int methodBodyLength = method.getRange().map(range -> range.begin.line - range.end.line).orElse(0);
}