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 确实保留了范围属性中的原始“坐标”,所以也许可以以某种方式使用它?


慕田峪9158850
浏览 271回答 2
2回答

眼眸繁星

有范围和tokenRange,您可以使用性能。即类似的东西range.end.line - range.begin.line

aluckdog

这个答案可能很晚了,但这对我有用......public void visit(MethodDeclaration method) {     int methodBodyLength = method.getRange().map(range -> range.begin.line - range.end.line).orElse(0);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java